2012-02-16 85 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