2012-02-16 23 views
8

我正在创建一个Java应用程序,它从数据库中检索userId,将其转换为条形码,然后将其发送到打印机。我打算使用Zebra打印机,我想知道是否有人有从Java应用程序打印到Zebra打印机的经验;如果是这样,你能分享一些代码吗?从Java应用程序向斑马打印机发送条形码

由于提前, Tumaini

回答

7

有两种方式与Zebra打印机一起工作。第一种是按常规打印机打印。 Java打印基础知识在official tutorial中有很好的解释。页面末尾将被打印机视为贴纸的结束。这种方法的缺点是所有的绘画必须由人手完成。即您不能使用内部打印机的条形码功能。

第二个是直接向打印机写入ZPL命令。事情是这样的:

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); 

的缺点是,你需要学习ZPL - 斑马编程语言。虽然它很简单,但图像和自定义字体等东西可能会让你头痛。编程手册在Zebra网站免费提供:Part 1Part 2

8

并不是每一个斑马打印机具有ZPL II,但你可以使用EPL

EPL2 programming guide for Zebra

代码示例:

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

的链接似乎死了。改为使用它:https://www.zebra.com/content/dam/zebra/manuals/en-us/printer/epl2-pm-en.pdf – luksch 2017-04-26 09:00:52