前言
条码打印不同于普通打印机,条码大小各不相同,需要针对不同标签贴纸开发不同的样式
1. 条码打印的两种方案:
- 后端ZPL指令打印
- 前端调用浏览器打印
2. 优缺点分析:
| 优点 | 缺点 | |
|---|---|---|
| 后端ZPL指令打印 | 样式固定,不会出现兼容性问题 | 不能调用客户端打印机,打印机需要支持ZPL指令 |
| 前端调用浏览器打印 | 对打印机品牌没有要求,可以调用客户端打印机打印 | 样式比较难调整,中文需要单独下载字体 |
一.后端打印
前端打印主要是使用javax.print.*包下的类通过给打印机发送ZPL指令的字符串实现打印服务,
核心的业务逻辑主要是寻找打印机,发送指令,如下:
public class ZebraService {
private static final Logger logger = LoggerFactory.getLogger(ZebraService.class);
public ZebraService(ZebraProperties zebraProperties) {
this.zebraProperties = zebraProperties;
PrintService[] services = PrintServiceLookup.lookupPrintServices(null,null);
if (services != null && services.length > 0) {
for (PrintService service : services) {
if (zebraProperties.getName().equals(service.getName())) {
printService = service;
break;
}
}
}
if (printService == null) {
logger.error("没有找到打印机:{}",zebraProperties.getName());
//循环出所有的打印机
if (services != null && services.length > 0) {
for (PrintService service : services) {
logger.warn("可用的打印机:{}",service.getName());
}
}
}else{
logger.info("找到打印机:{},打印机名称:{}",zebraProperties.getName(),printService.getAttribute(PrinterName.class).getValue());
}
}
public boolean print(String zpl){
logger.info("当前ZPL:{}",zpl);
if(printService==null){
logger.error("打印出错:没有找到打印机{}",zebraProperties.getName());
return false;
}
DocPrintJob job = printService.createPrintJob();
byte[] by

本文探讨了条码打印的两种方案:后端ZPL指令打印和前端调用浏览器打印。后端方案样式固定但需支持ZPL指令,前端方案对打印机无特定要求但样式调整复杂。文中详细介绍了后端如何使用Java发送ZPL指令进行打印,并展示了前端利用jsPDF、jsBarcode和qrcode生成PDF并打印的实现代码。
最低0.47元/天 解锁文章
1760

被折叠的 条评论
为什么被折叠?



