Saltar al contenido

JavaScript: enviar texto sin procesar a la impresora: sin solicitudes de servidor/llamadas de método, capaz de trabajar sin conexión, puramente del lado del cliente

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:

Impresora Zebra: controlador genérico/solo texto

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.

Sección de Reseñas y Valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4.5)



Utiliza Nuestro Buscador

Deja una respuesta

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