从 Java 应用程序向 Zebra 打印机发送条形码
2022-09-04 08:03:20
我正在创建一个java应用程序,该应用程序从数据库中检索userId,将其转换为条形码,然后将其发送到打印机。我计划使用 Zebra 打印机,我想知道是否有人有从 Java 应用程序打印到 Zebra 打印机的经验;如果是这样,你能分享一些代码使这成为可能吗?
提前致谢,图迈尼
我正在创建一个java应用程序,该应用程序从数据库中检索userId,将其转换为条形码,然后将其发送到打印机。我计划使用 Zebra 打印机,我想知道是否有人有从 Java 应用程序打印到 Zebra 打印机的经验;如果是这样,你能分享一些代码使这成为可能吗?
提前致谢,图迈尼
有两种方法可以使用 Zebra 打印机。第一种是像在普通打印机上一样打印。Java打印基础知识在官方教程中得到了很好的解释。页面末尾将被打印机视为不干胶标签的末尾。这种方法的缺点是所有绘画都必须由手完成。即,您不能使用内部打印机的条形码功能。
第二种是将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 编程语言。虽然它足够简单,但是图像和自定义字体之类的东西可能会让您头疼。编程手册可在 Zebra 站点上免费获取:第 1 部分和第 2 部分。
并非每台 Zebra 打印机都有 ZPL II,但您可以使用 EPL
Zebra .pdf EPL2 编程指南(评论部分中的链接)
代码示例:
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;
}