ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-02-23 16:30:00  阅读:312  来源: 互联网

标签:条码 打印机 zebraProperties 打印 二维码 ZPL 一维 logger null


前言

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

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.getBytes();
	        DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
	        Doc doc = new SimpleDoc(by, flavor, null);
	        try {
	            job.print(doc, null);
	            logger.info("已打印");
	            return true;
	        } catch (PrintException e) {
	            logger.error("打印出错:{}",e.getMessage());
	            return false;
	        }
	    }
}

具体的组装ZPL指令可以查询ZPL手册

二.前端打印

标签:条码,打印机,zebraProperties,打印,二维码,ZPL,一维,logger,null
来源: https://blog.csdn.net/sbcsdn111/article/details/123092889

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有