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.
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.
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.
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.
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.
La documentación de la API contiene ejemplos para hacer este reenvío desde el plugin, usándolo como proxy.
Ejemplos de la carga útil y modos de reenvío: https://parzibyte.me/http-esc-pos-desktop-docs/es/api/reenviar.html
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
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.
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.
Ver comentarios
Me funciono, solo que me imprimeparzibyte.me/blog no logro quitarselo, se que el credito es tuyo, pero como puedo omitirlo para mi proyecto?
Si quiere remover el pie de página mire aquí: https://parzibyte.me/blog/2022/10/02/contratar-licencia-para-plugin-impresora-termica-v3/
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
Hola. Gracias por sus comentarios. Si tiene alguna consulta con gusto lo atiendo en https://parzibyte.me/#contacto
Saludos!
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
Hola. Gracias por sus comentarios. Si tiene alguna consulta con gusto lo atiendo en https://parzibyte.me/#contacto
Saludos!