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 imprimir texto RAW en la impresora.
Usa la compilación en Windows Generic / Text Only
controlador para su impresora Zebra. En lugar del controlador de 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, de zpl renderizada 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 funciona 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 me funcionó en Firefox y IE11, con un pequeño cambio en las propiedades de la impresora.
Estaba usando este emulador de impresora.
En Cromo Recibo un error del emulador al imprimir 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 desde 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 Establezco las siguientes opciones:
- Iniciar 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 '}$'
<script type="text/javascript">
function openWin() {
var printWindow = window.open();
printWindow.document.open('text/plain')
printWindow.document.write('${^XA^FO50,100^BXN,10,200^FDYourTextHere^FS^XZ}$');
printWindow.document.close();
printWindow.focus();
printWindow.print();
}
</script>
<input type="button" value="Print code" onclick="openWin()" />
JSFiddle
Si desea lograr esto de manera consistente sin involucrar la apertura de ventanas emergentes o indicaciones del 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 de 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 a ZPL sin procesar. 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 son compatibles con esta función.