前端条码打印方案(表格+中文+一维码+二维码) 您所在的位置:网站首页 怎么打印贴纸标签内容呢 前端条码打印方案(表格+中文+一维码+二维码)

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

2024-06-14 19:39| 来源: 网络整理| 查看: 265

前言

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

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手册

二.前端打印

前端打印我主要测试了两种方案:1.直接画html然后打印,2.生成pdf后打印 第一种方案css样式调整起来折磨人,直接选择第二种简单粗暴

1.这里主要使用了3个插件: npm i jspdf # 用于生成pdf npm i jsbarcode # 用于生成一维码 npm i qrcode # 用于生成二维码 2. 先贴出完整代码 import {jsPDF} from "jspdf"; import './jianbaosong-normal' const table = { unit:'mm', width:100, height:80, offset:2, colH:10, } let doc; function tableInit(){ doc = new jsPDF({ orientation: "landscape", unit: table.unit, format: [table.width, table.height] }); } //获取行Y值 function getRowY(indexRow,colH){ return table.offset+indexRow*colH; } export function pdfPrint(contents){ tableInit(); const length=contents.length for (let i = 0; i 0&& i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有