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.


Estoy disponible para trabajar en tu proyecto o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.
Si el post fue de tu agrado muestra tu apoyo compartiéndolo, suscribiéndote al blog, siguiéndome o realizando una donación.

Suscribir por correo

Ingresa tu correo y recibirás mis últimas entradas sobre programación, open source, bases de datos y todo lo relacionado con informática

Únete a otros 6,046 suscriptores

parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

6 Comentarios

Juan · octubre 18, 2022 a las 10:39 am

Me funciono, solo que me imprimeparzibyte.me/blog no logro quitarselo, se que el credito es tuyo, pero como puedo omitirlo para mi proyecto?

Paula · junio 28, 2022 a las 2:28 am

Te deje un mail, quiero solicitarte una asistencia pero no recibi una repuesta. Dime cómo puedo contactarte directamente así realizó el pago correspondiente a la consultoría . Gracias

Paula · junio 24, 2022 a las 5:24 pm

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

Deja un comentario

Marcador de posición del avatar

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

A %d blogueros les gusta esto: