Parzibyte's blog

Blog de conocimiento gratuito: linux, programación, open source, bases de datos, android, frameworks, web e informática en general.

Imprimir ticket en impresora térmica bluetooth desde JavaScript con Android

El día de hoy vamos a hacer una cosa que varios me han pedido y que siempre he querido hacer: imprimir en una impresora térmica Bluetooth desde Android usando JavaScript.

Básicamente vamos a enviar un ticket a una thermal printer con Bluetooth desde el navegador web sin cuadros de diálogo ni cosas extrañas: tan solo usando un plugin gratuito desarrollado por mí y JavaScript puro.

Debido a que esto es hecho desde el navegador con JS luego puedes usarlo para imprimir en una impresora térmica Bluetooth desde Vue, React, Angular, TypeScript, etcétera: cualquier cosa que compile, use o traspile a JavaScript.

Demostración rápida

Si quieres probar antes de ver el código entonces sigue los siguientes pasos. Primero descarga, instala y dale los permisos al siguiente plugin:

https://parzibyte.me/blog/2022/11/01/plugin-gratuito-impresoras-termicas-bluetooth-android/

Asegúrate de tener encendido el Bluetooth y de que le has dado todos los permisos al plugin, además de haber emparejado tu impresora térmica previamente.

Visita la siguiente página desde el dispositivo Android: https://parzibyte.github.io/imprimir-impresora-termica-bluetooth-javascript-android/

Coloca la MAC de tu impresora (por ejemplo FF:FF:FF:FF:FF:FF) y haz clic en Imprimir:

Página de demostración para imprimir en impresora térmica Bluetooth desde JavaScript

Página de demostración para imprimir en impresora térmica Bluetooth desde JavaScript

Debería imprimirse un ticket como el siguiente:

Imprimir en impresora térmica conectada por Bluetooth en Android desde JavaScript

Imprimir en impresora térmica conectada por Bluetooth en Android desde JavaScript

En caso de que todo haya funcionado ya puedes seguir leyendo el post para ver cómo imprimir en una impresora térmica desde Android usando JavaScript.

Hola Impresora térmica Bluetooth desde JavaScript

Antes que nada descarga y ejecuta el plugin para Android:

https://parzibyte.me/blog/2022/11/01/plugin-gratuito-impresoras-termicas-bluetooth-android/

Ahora debemos importar el conector, mismo que puedes descargar de: https://github.com/parzibyte/imprimir-impresora-termica-bluetooth-javascript-android/blob/main/ConectorEscposAndroid.js

Desde HTML vamos a importarlo:

En este caso main.js es el código que va a imprimir el ticket al presionar un botón. Cuando eso suceda se va a ejecutar el siguiente código:

Primero creamos una nueva instancia de ConectorEscposAndroid pasándole la licencia y la URL del plugin. La licencia es un parámetro opcional pero lo estoy mostrando aquí para futuros ejemplos.

Luego podemos invocar a todos los métodos para armar nuestro ticket, ya sea para alinear, enfatizar, imprimir imágenes, etcétera (puedes ver la lista completa en el conector o en la documentación del plugin).

Una cosa es armar nuestro conector y llenarlo de operaciones y otra muy distinta es enviar esas operaciones invocando a imprimirEn, pasando la dirección MAC de la impresora.

Al invocar a imprimirEn se va a imprimir lo que hayamos definido en el conector, siempre y cuando el plugin se esté ejecutando en segundo plano. En este caso:

Imprimir en impresora térmica conectada por Bluetooth en Android desde JavaScript

Imprimir en impresora térmica conectada por Bluetooth en Android desde JavaScript

 

¿Cómo funciona?

Al momento de escribir este post no hay mucho soporte para Bluetooth desde JavaScript, y el poco que existe es con BLE además de que es un lío pelear con las características y servicios.

Por ello es que decidí crear un plugin gratuito que permite ser invocado desde JavaScript (y otros lenguajes) para imprimir en una impresora térmica Bluetooth.

De este modo no necesitamos escapar del sandbox del navegador, solo necesitamos el plugin en ejecución.

Nota: recuerda que para invocar a localhost debes estar en un sitio con https.

Próximos pasos

Si quieres puedes ver el código fuente completo de la demostración: https://github.com/parzibyte/imprimir-impresora-termica-bluetooth-javascript-android

A partir del ejemplo de la demostración puedes imprimir desde cualquier lugar y en cualquier momento. Tal vez te interese ver la presentación del plugin o su documentación.

Si tú no eres de Android y usas impresoras USB tal vez te interese mi otro plugin.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.


8 pensamientos en "Imprimir ticket en impresora térmica bluetooth desde JavaScript con Android"

    Juan Carlos dice:

    Hola, el plugin y su integración me funcionan de maravilla en una tablet Samsung Galaxy Tab A7, imprimiendo desde un sitio web. Sin embargo en una Galaxy Tab A, al abrir el plugin, se queda colgado mientras intenta buscar los dispositivos y nunca me muestra la lista. Tiene todo activado, internet, bluetooth, etc.
    Hay algún troubleshooting que pueda hacer para saber por qué no está cargando la lista de dispositivos en esa tablet?
    Ambas son modelos relativamente recientes y están actualizadas. Gracias de antemano.

    parzibyte dice:

    Algo así pasaba con modelos con Android 12 pero ya fue arreglado en la última versión. Pruebe imprimir desde la web indicando la MAC

    Bruno dice:

    Hola buenas gracias por responder. Efectivamente el problema es ese, en tu pagina de prueba funciona pero en nuestro servidor de desarrollo no, usamos el localhost:8000 y la pagina desde la que intentamos accederlo es HTTPS. Por eso consulto que mas podemos probar ya que las condiciones estan dadas. Gracias por tu pronta respuesta. Saludos

    parzibyte dice:

    ¿Cuál es la página desde la que intenta acceder y cuál es el puerto donde escucha el plugin? también recomiendo copiar el mensaje de error completo y pegarlo aquí

    Bruno dice:

    hola buenas, quisiera hacerte una consulta. Cuando pruebo el proyecto descargado de tu gitHub. Sin embargo al momento de probarlo en local me indica el error Failed to Fetch. el plugin esta corriendo en local por si acaso y la url es la especificada en el proyecto. Aguardo su consejo. Muchas gracias

    parzibyte dice:

    Hola. Creo que no entendí del todo su duda en la parte de “Cuando pruebo el proyecto descargado de tu gitHub. Sin embargo al momento…”
    Si se refiere a que funciona en el enlace de demostración, pero no en su servidor de desarrollo local, puede deberse a que no está usando realmente localhost sino una ip o un sitio sin https y puede que aparezca el siguiente error: https://parzibyte.me/blog/2021/10/01/the-request-client-is-not-a-secure-context-and-the-resource-is-in-more-private-address-space-local/

    jose melendez dice:

    Buenas tardes disculpa, en el movil no me aparece en el plug-in mi impresora ZEBRA IZM220, y cuando busco la pagina localhost:8000 me aparece “Ruta y o metodos no permitidos”

    parzibyte dice:

    No debe abrir esa ruta en el navegador. Debe abrir el plugin, buscar su dispositivo y probar. Le recomiendo revisar minuciosamente el vídeo y post además de visitar la página de demostración

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *