Luego de consultar expertos en este tema, programadores de diversas áreas y maestros dimos con la respuesta al dilema y la plasmamos en este post.
Solución:
Al imprimir en una impresora Zebra, todo lo anterior ^XA
y después ^XZ
se ignora Las etiquetas html alrededor del zpl no interfieren.
Lo único que debe asegurarse es que imprime texto RAW en la impresora.
Usar la compilación en Windows Generic / Text Only
controlador para su impresora Zebra. En lugar del conductor cebra.
- El controlador Zebra normal: convierte el trabajo de impresión en un mapa de bits
- resultado: una imagen impresa lenta de su código zpl.
- El controlador de solo texto: envía el código zpl directamente a la impresora
- resultado: una pegatina impresa rápidamente, desde zpl renderizado en la impresora
Ejemplo en jsfiddle o en gist.run
function printZpl(zpl)
var printWindow = window.open();
printWindow.document.open('text/plain')
printWindow.document.write(zpl);
printWindow.document.close();
printWindow.focus();
printWindow.print();
printWindow.close();
Probado en
- Borde
- explorador de Internet
- Firefox
No trabajo en:
- Cromo
- Chrome crea una imagen antes de enviarla al controlador de la impresora (https://productforums.google.com/forum/#!topic/chrome/GYf6iI42Ug4)
Seleccione el controlador Genérico/Solo texto en las propiedades de su impresora:
El siguiente fragmento funcionó para mí en Firefox y IE11con un pequeño cambio en las propiedades de la impresora.
Estaba usando este emulador de impresora.
En Cromo Recibo un error del emulador cuando imprimo desde el cuadro de diálogo Imprimir de Chrome. El uso del cuadro de diálogo del sistema da un error sobre la falla de impresión de Chrome. CTRL + MAYÚS + P (acceso directo para omitir el cuadro de diálogo de Chrome) no hay error y no pasa nada. Todos estos errores pueden estar relacionados con el emulador, pero no tengo una impresora real para probarlo.
En Propiedades de la impresora Establecí las siguientes opciones:
- Comenzar trabajo de impresión:
$
- Finalizar trabajo de impresión:
$
Como puede ver en el script a continuación, el código ZPL está envuelto en '$'
y '$'
JSFiddle
Si desea lograr esto de manera consistente sin involucrar la apertura de ventanas emergentes o mensajes de usuario, necesitará una aplicación que se ejecute en la PC del cliente para actuar como mediador entre el javascript de su aplicación y la impresora del cliente.
Una forma popular de hacer esto es a través de un complemento de navegador (NPAPI). Pero este enfoque se está volviendo obsoleto rápidamente ya que muchos navegadores han comenzado a eliminar por completo la compatibilidad con NPAPI (Chrome, Firefox).
Otro enfoque es desarrollar una pequeña aplicación que se ejecute en la PC de su cliente y que escuche las conexiones websocket. Su aplicación web enviará el ZPL a través de una conexión al servidor websocket del cliente, que a su vez generará un trabajo de impresión.
Un tercer enfoque: algunas impresoras tienen una dirección IP interna que se puede enviar ZPL sin formato. Si crea su aplicación web para que un usuario pueda configurar esta dirección IP, sería una opción enviar la ZPL a esa dirección. Sin embargo, esto no funcionará si sus usuarios utilizan impresoras que no admiten esta función.