Imprimir en impresora térmica en red local

Imprimir en red usando plugin para impresora térmica

En este post te mostraré cómo imprimir en red local usando mi plugin para impresión en impresoras térmicas desde JavaScript.

Te enseñaré a saltarte las limitaciones de seguridad del navegador para poder invocar http desde https en cualquier lenguaje de programación y plataforma.

Explicando el problema

Lo que se quiere lograr es imprimir desde un dispositivo a una impresora que está conectada a otra computadora, y esa computadora está ejecutando el plugin además de encontrarse en la misma red local que el primero.

Vamos a suponer (para todo el tutorial) que la IP de la computadora que tiene la impresora y el plugin es la 192.168.1.55

El problema es que con las recientes actualizaciones de los navegadores no se puede invocar a una IP desde un sitio seguro, al menos que la IP tenga https.

Si esto no existiera, entonces podríamos cambiar la URL del plugin a 192.168.1.55:8000 y podríamos mandar la impresión ahí. Pero como no es posible debemos buscar alternativas.

Solución

Lo que podemos hacer es usar al mismo plugin como proxy. De este modo no vamos a invocar a una IP, sino a localhost y le vamos a indicar al plugin que envíe la solicitud a otro plugin indicado por la IP.

Imprimir en impresora térmica en red local
Imprimir en impresora térmica en red local

De este modo el sitio web del primer dispositivo va a invocar a localhost y no a una IP desconocida; la parte “insegura” la hará el plugin, pues el mismo reenviará la información a la red local y no le va a importar si tiene o no tiene https.

Apartado técnico

Ahora que ya expliqué la solución, veamos cómo aplicarlo. El plugin ya lleva incorporado el reenvío en la ruta reenviar que reenvía la información a otro sitio (indicado en la variable GET host).

Con esto puedes obtener las impresoras térmicas en red y también imprimir en red.

El conector ya tiene los métodos:

obtenerImpresorasRemotas: recibe la URL del plugin local y la URL del plugin al que se envía. Por ejemplo, el primer argumento sería http://localhost:8000 y el segundo sería http://192.168.1.55/impresoras

imprimirEnImpresoraRemota: recibe el nombre de la impresora y la URL del plugin al que se enviará esa impresión. Por ejemplo, el primer argumento sería ZJ-58 y el segundo sería http://192.168.1.55/imprimir

Veamos un ejemplo que ya está en el repositorio. Si queremos imprimir:

Y si queremos obtener las impresoras remotas:

Nota: recuerda que en el caso de imprimirEnImpresoraRemota no se indica la URL del plugin local porque ese debe ser enviado al momento de crear la instancia de ConectorPluginV3.

Especificación HTTP

Puedes usar lo visto aquí en cualquier plataforma y lenguaje de programación. Por ejemplo, enviar una impresión desde Windows a Raspberry Pi.

Y puedes hacerlo con JavaScript, Java, Python, C#, etcétera. Al final el plugin es un servidor HTTP.

Para reenviar la información haz una petición POST o GET a la URL del plugin /reenviar pasándole la variable host.

Por ejemplo, para obtener las impresoras en red, internamente el conector de JavaScript invocará a:

GET http://localhost:8000/reenviar?host=http://192.168.1.55:8000/impresoras

Y para imprimir:

POST http://localhost:8000/reenviar?host=http://192.168.1.55:8000/imprimir

Conclusión

Resumiendo, el plugin tal y como está ya sirve como proxy y como ayudante de impresión en impresoras térmicas. Funciona igual ya sea gratuito o con licencia.

Por si no sabes de qué hablé en todo este post te recomiendo ver los detalles del 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.

6 comentarios en “Imprimir en red usando plugin para impresora térmica”

  1. Hola, tengo un error de ‘Failed to fech’ al Imprimir_y_reenviar. Tengo los plugin funcionando en cada PC y con sus impresoras compartidas y funcionando. El código es el mismo que el del ejemplo, probe el otro ejemplo de mandar con nombre de impresora y si funciona. Sera que debo generar un certificado para que no me de el error a la petición fetch? Podrías ayudarme por favor

Dejar un comentario