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.
Prueba el nuevo diseñador
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.
Importando conector
Como Node.js al final es JavaScript, podemos usar el conector JavaScript que ya existe para comunicarnos con la impresora POS.
Yo lo he tomado de: https://github.com/parzibyte/ejemplos-javascript-plugin-v3/blob/main/ConectorJavaScript.js
Recomiendo que utilices siempre la última versión visitando ese enlace, ya que si actualizo la librería podrás disfrutar de las últimas características. En mi caso lo dejé en la misma carpeta que mi index.js
y lo he importado así:
Obteniendo lista de impresoras
Si quieres puedes obtener la lista de impresoras térmicas para mostrársela al usuario. Esto es totalmente opcional y solo en caso de que quieras mostrar la lista para que el usuario pueda seleccionar la impresora.
Diseñando ticket
Ahora veamos cómo diseñar un ticket o factura para imprimir en la impresora térmica. Recuerda que también puedes solo abrir el cajón de dinero o cortar el papel, no estás obligado a imprimir algo.
De cualquier modo veamos cómo imprimir un ticket en una impresora térmica desde Node.js además de cortar el papel y abrir el cajón de dinero en caso de que exista:
Si te preguntas, todos los métodos que puedes usar están en la documentación de:
Imprimir recibo en impresora térmica
Con lo anterior diseñamos el ticket. Ahora solo falta invocar a imprimirEn
para que se imprima en la impresora que tú indiques según la variable nombreImpresora
.
La impresión devuelve una promesa que al resolverse traerá la respuesta. Si la respuesta es true
, entonces todo fue correcto. En caso de que no sea true, será una cadena con el mensaje de error. Se maneja así:
Con esto, solo es cuestión de ejecutar el archivo. Yo lo he ejecutado con node index.js
pero porque es un ejemplo, obviamente tú puedes poner ese fragmento de código en donde tú prefieras.
Descarga del plugin
Lo presentado aquí es un conector para un plugin gratuito que he desarrollado. Este plugin permite imprimir en impresoras térmicas desde cualquier lenguaje de programación, por ello es que ahora escribí un conector para Node.js.
Entonces antes de usar el código aquí presente debes configurar tu impresora y descargar el plugin.
Para instalar tu impresora y compartirla: https://parzibyte.me/blog/2017/12/11/instalar-impresora-termica-generica/
Después descarga el plugin desde: https://github.com/parzibyte/plugin-impresora-termica-v3/releases/tag/3.2.1
Una vez que hayas hecho todos los pasos necesarios y que veas que el plugin funciona entonces puedes comenzar a imprimir desde Node.js.
Poniendo todo junto
Nota: he grabado un vídeo para complementar el post. Míralo aquí.
El código completo que obtiene la lista de impresoras y también imprime en una impresora térmica usando comandos ESC POS queda así:
Te dejo el repositorio completo en GitHub en caso de que haga actualizaciones en el futuro.
Próximos pasos
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: