我正在創建一個Java應用程序,它從數據庫中檢索userId,將其轉換爲條形碼,然後將其發送到打印機。我打算使用Zebra打印機,我想知道是否有人有從Java應用程序打印到Zebra打印機的經驗;如果是這樣,你能分享一些代碼嗎?從Java應用程序向斑馬打印機發送條形碼
由於提前, Tumaini
我正在創建一個Java應用程序,它從數據庫中檢索userId,將其轉換爲條形碼,然後將其發送到打印機。我打算使用Zebra打印機,我想知道是否有人有從Java應用程序打印到Zebra打印機的經驗;如果是這樣,你能分享一些代碼嗎?從Java應用程序向斑馬打印機發送條形碼
由於提前, Tumaini
有兩種方式與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 1和Part 2。
並不是每一個斑馬打印機具有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;
}
的鏈接似乎死了。改爲使用它:https://www.zebra.com/content/dam/zebra/manuals/en-us/printer/epl2-pm-en.pdf – luksch 2017-04-26 09:00:52