Saltar al contenido

Envío de un código de barras a una impresora Zebra desde una aplicación Java

Luego de investigar con expertos en esta materia, programadores de deferentes ramas y maestros hemos dado con la solución a la pregunta y la compartimos en este post.

Solución:

Hay dos formas de trabajar con las impresoras Zebra. La primera es imprimir como en una impresora normal. Los conceptos básicos de impresión de Java están bien explicados en el tutorial oficial. La impresora tratará el final de la página como el final de la etiqueta. La desventaja de este enfoque es que toda la pintura debe hacerse a mano. Es decir, no puede utilizar la capacidad de código de barras de la impresora interna.

El segundo es escribir comandos ZPL directamente en la impresora. Algo como esto:

PrintService pservice = ... // acquire print service of your printer
DocPrintJob job = pservice.createPrintJob();  
String commands = "^XAnr^MNMnr^FO050,50nr^B8N,100,Y,Nnr^FD1234567nr^FSnr^PQ3nr^XZ";
DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
Doc doc = new SimpleDoc(commands.getBytes(), flavor, null);
job.print(doc, null);

La desventaja es que necesita aprender ZPL – Lenguaje de programación Zebra. Aunque es bastante simple, cosas como las imágenes y las fuentes personalizadas pueden causarle dolor de cabeza. Los manuales de programación están disponibles gratuitamente en el sitio de Zebra: Parte 1 y Parte 2.

No todas las impresoras Zebra tienen ZPL II, pero puede usar EPL

Guía de programación EPL2 para Zebra

Nota del autor: no elimine este enlace de aquí ya que es una referencia histórica. Tal vez el servidor comience a funcionar nuevamente o haya una copia de wayback. En su lugar, consulte la sección de comentarios para obtener algunas sugerencias o utilice la búsqueda web para encontrar la especificación del lenguaje EPL.

Ejemplo de código:

private static boolean printLabel(PrintService printService, String label)  label == null) 
        System.err.println("[Print Label] print service or label is invalid.");
        return false;
    
    String czas = new SimpleDateFormat("d MMMMM yyyy'r.' HH:mm s's.'").format(new Date());
    String command =  
            "Nn"+
            "A50,50,0,2,2,2,N,""+label+""n"+
            "B50,100,0,1,2,2,170,B,""+label+""n"+
            "A50,310,0,3,1,1,N,""+czas+""n"+
            "P1n"
            ;
    
    byte[] data;
    data = command.getBytes(StandardCharsets.US_ASCII);
    Doc doc = new SimpleDoc(data, DocFlavor.BYTE_ARRAY.AUTOSENSE, null);
    
    boolean result = false;
    try 
        printService.createPrintJob().print(doc, null);
        result = true;
     catch (PrintException e) 
        e.printStackTrace();
    
    return result;

Al final de todo puedes encontrar las notas de otros programadores, tú asimismo eres capaz dejar el tuyo si te apetece.

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



Utiliza Nuestro Buscador

Deja una respuesta

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