Sending a Barcode to a Zebra Printer from a Java Application

前端 未结 2 1973
借酒劲吻你
借酒劲吻你 2020-12-16 01:07

I am creating a java application that retrieves a userId from a database, transforms it into a barcode, then sends it to a printer. I am planning to use a Zebra printer and

相关标签:
2条回答
  • 2020-12-16 01:37

    There are two ways to work with Zebra printers. The first is to print as on regular printer. Java printing basics are well explained in official tutorial. End of page will treated by printer as end of sticker. The disadvantage of this approach is that all painting must be done by hands. I.e. you can't use internal printer's barcoding ability.

    The second is to write ZPL commands directly to printer. Something like this:

    PrintService pservice = ... // acquire print service of your printer
    DocPrintJob job = pservice.createPrintJob();  
    String commands = "^XA\n\r^MNM\n\r^FO050,50\n\r^B8N,100,Y,N\n\r^FD1234567\n\r^FS\n\r^PQ3\n\r^XZ";
    DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
    Doc doc = new SimpleDoc(commands.getBytes(), flavor, null);
    job.print(doc, null);
    

    The disadvantage is that you need to learn ZPL - Zebra Programming Language. Although it is simple enough, but such things as images and custom fonts could make you headache. Programming manuals are freely available on Zebra site: Part 1 and Part 2.

    0 讨论(0)
  • 2020-12-16 01:40

    Not every Zebra printer has ZPL II, but then you can use EPL

    EPL2 programming guide for Zebra

    Author note: Please do not remove this link from here as this is a historical reference. Maybe the server starts working again or there is a wayback copy. Instead, see the comments section for some suggestions or use web search to find EPL language specification

    Code sample:

    private static boolean printLabel(PrintService printService, String label) {
        if (printService == null || 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 =  
                "N\n"+
                "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"+
                "P1\n"
                ;
        
        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;
    }
    
    0 讨论(0)
提交回复
热议问题