En este post te mostraré cómo imprimir en red local usando mi plugin para impresión térmica versión 1.
Te enseñaré a saltarte las limitaciones de seguridad del navegador para poder invocar http desde https; y esto también te permitirá imprimir desde Android.
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 Chrome 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.
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
Nota: si vas a usarlo en Android mira la guía de cómo instalarlo y obtenerlo.
Ahora que ya expliqué la solución, veamos cómo aplicarlo. El plugin ya lleva incorporado el reenvío en la ruta imprimir_y_reenviar
que reenvía la información a otro plugin y recibe la IP e impresora de la máquina remota.
El cliente en Impresora.js igual ya tiene el método imprimirEnImpresoraConNombreEIp
, solo debes invocarlo.
Veamos un ejemplo que ya está en el repositorio:
Fíjate en la línea 33. Creamos nuestra instancia de impresora y creamos nuestro ticket como normalmente lo haríamos, pero en lugar de invocar a imprimirEn
invocamos a imprimirEnImpresoraConNombreEIp
que recibe el nombre de impresora y la IP.
Ten en cuenta que no recibe el puerto ni ajustes adicionales, solo recibe la IP sin puerto (por ejemplo 192.168.1.55
) y el nombre de la impresora como cadena, que ya debe estar compartida y funcionando en la otra computadora.
También recuerda que el plugin debe estarse ejecutando en ambos hosts, y que no debes cambiar RUTA_API
, porque la magia del reenvío está en la línea 33.
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 premium.
La versión para Android es opcional solo si usas dispositivos con este sistema operativo, y se vende por separado aunque hayas obtenido la versión premium para Windows o Linux.
Por si no sabes de qué hablé en todo este post te recomiendo ver los detalles del plugin.
4 Comentarios
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
parzibyte · junio 28, 2022 a las 2:36 pm
Hola. Gracias por sus comentarios. Si tiene alguna consulta con gusto lo atiendo en https://parzibyte.me/#contacto
Saludos!
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
parzibyte · junio 25, 2022 a las 6:41 pm
Hola. Gracias por sus comentarios. Si tiene alguna consulta con gusto lo atiendo en https://parzibyte.me/#contacto
Saludos!