Hoy vamos a ver cómo imprimir tickets en una impresora térmica con Node.js usando JavaScript del lado del servidor. Me imagino que con esto se podrá imprimir usando express, Electron o cualquier otra cosa.
Toma en cuenta que esto imprimirá en el servidor y que funcionará perfectamente para sistemas locales, pero si vas a subirlo al servidor puede que quieras revisar cómo imprimir del lado del cliente así como ya expliqué el problema que tenemos con PHP.
En estos días he creado un nuevo diseñador web para impresoras térmicas. El diseñador te guiará en el proceso de instalar tu impresora, compartirla e instalar lo necesario para imprimir tus diseños. Pruébalo en:
https://parzibyte.me/apps/ticket-designer/#/first-steps
Una vez que tengas tus diseños vas a poder imprimirlos desde cualquier lenguaje de programación, incluyendo Python.
Vamos a definir un arreglo de operaciones que serán traducidas a comandos ESC POS y enviadas a la impresora térmica. Voy a usar exactamente el mismo código que se usa para imprimir en impresora térmica con JavaScript del lado del cliente, pues al final la API es consistente.
Veamos un ejemplo para iniciar la impresora al estado en el que estaba cuando se encendió y luego escribir un hola mundo escribiendo texto:
const listaDeOperaciones = [
{
"nombre": "Iniciar",
"argumentos": []
},
{
"nombre": "EscribirTexto",
"argumentos": [
"Hola impresora\n"
]
}
];
Cuando hemos creado la lista es momento de enviarla al servidor local para impresoras térmicas. Yo voy a usar fetch que permite hacer peticiones HTTP, codificando la carga útil como JSON.
He encerrado el código en una función que demuestra la impresión térmica con Node.js:
const demostrarImpresion = async () => {
const listaDeOperaciones = [
{
"nombre": "Iniciar",
"argumentos": []
},
{
"nombre": "EscribirTexto",
"argumentos": [
"Hola impresora\n"
]
},
{
"nombre": "DescargarImagenDeInternetEImprimir",
argumentos: ["https://github.com/parzibyte.png", 380, 0, true]
}
];
const respuesta = await fetch("http://localhost:8000/imprimir",
{
method: "POST",
body: JSON.stringify({
"serial": "",
"nombreImpresora": "Termica",
"operaciones": listaDeOperaciones
}),
});
const respuestaHttp = await respuesta.json();
if (respuestaHttp.ok) {
console.log("Ok");
} else {
console.error("Petición ok pero error en plugin: " + respuestaHttp.message);
}
}
demostrarImpresion()
Es así de simple, solo tienes que enviar la lista de operaciones que serán convertidas a ESC POS en el endpoint del plugin que permite imprimir. En JavaScript contamos con fetch
para hacer peticiones HTTP, ya sea del lado del cliente o del servidor.
Esto solo es un hola mundo, pero puedes imprimir imágenes, códigos QR, códigos de barras, cambiar el estilo del texto e incluso imprimir HTML convertido a imagen. La lista completa de operaciones está en la documentación oficial:
https://parzibyte.me/http-esc-pos-desktop-docs/es/
Para que el código funcione necesitas el servidor local ejecutándose y que tu impresora esté compartida. Por favor, sigue los pasos que aparecen en la página previamente enlazada, ya que ahí está la API unificada.
La documentación completa está en: https://parzibyte.me/http-esc-pos-desktop-docs/es/
Puedes ver más conectores y modos de uso en:
https://parzibyte.me/blog/2022/09/30/plugin-impresoras-termicas-version-3/
Así como la documentación oficial:
https://parzibyte.me/http-esc-pos-desktop-docs/es/
A partir de aquí puedes ver la documentación para ver cómo agregar cosas más complejas al ticket. Puedes imprimir caracteres personalizados, códigos QR, códigos de barras, imágenes locales, de internet, en base 64 y también usarla en distintos lenguajes de programación.
De nuevo te dejo con el post de presentación en donde encontrarás más detalles:
https://parzibyte.me/blog/2022/09/30/plugin-impresoras-termicas-version-3/
Y aquí la documentación oficial:
https://parzibyte.me/http-esc-pos-desktop-docs/es/
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Esta web usa cookies.