前端条码打印方案(表格+中文+一维码+二维码)

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

前言

条码打印不同于普通打印机,条码大小各不相同,需要针对不同标签贴纸开发不同的样式

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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值