在开发 ERP / WMS / 电商 / 生产系统 时,经常会遇到一个非常现实的问题:
如何在 Web 系统中稳定地打印标签?
例如:
-
商品标签
-
仓库标签
-
生产条码
-
快递标签
但 Web 打印一直有几个难点:
-
浏览器
window.print()不可控 -
无法直接调用打印机
-
标签尺寸难控制
-
不同系统兼容问题
为了更稳定地解决这个问题,我做了一个开源项目:
知印(Zing Print)
一个基于 QZ Tray 的工业级标签打印工具。
它的目标很简单:
为 Web 系统提供一个 稳定、可复用的标签打印组件。
一、为什么 Web 打印很难?
很多系统最初都是用:
window.print()
但很快就会遇到问题:
1 无法控制打印机
浏览器打印:
-
不能指定打印机
-
不能自动打印
-
不能控制纸张
用户必须手动操作。
2 标签尺寸不稳定
标签打印通常是:
60mm × 40mm
但浏览器打印:
-
DPI 不一致
-
页面缩放影响布局
导致打印出来的尺寸偏差。
3 ERP系统需要批量打印
例如:
订单包含 50 个商品
需要一次打印:
50 个标签
浏览器打印体验非常差。
二、解决方案:QZ Tray
QZ Tray 是一个常见的 Web 打印解决方案。
官网:qz.io
它的核心原理是:
Web 页面
↓
WebSocket
↓
QZ Tray 本地服务
↓
操作系统打印机
优点:
-
可以获取打印机列表
-
可以指定打印机
-
支持静默打印
-
支持多种打印格式
因此很多 工业系统 / ERP 系统 都使用这个方案。
三、知印(zing-print)项目介绍
知印(@zinghub/zing-print) 是一个基于 QZ Tray 的 Vue3 打印组件。
目标:
让 Web 系统可以快速集成标签打印能力。
特点:
-
Vue3 组件化
-
Ant Design Vue UI
-
内置标签模板
-
打印机管理
-
标签预览
-
测试打印
安装:
pnpm add @zinghub/zing-print
升级:
pnpm up @zinghub/zing-print
四、项目依赖
使用前需要安装:
依赖
说明
Vue3
前端框架
Ant Design Vue
UI组件
QZ Tray
本地打印服务
同时需要在电脑上安装并启动:
QZ Tray
下载地址:
https://qz.io/download/https://qz.io/download/
浏览器需要可以访问:localhost
五、在 Vue3 项目中使用
首先在 main.ts 中注册组件。
import { createApp } from 'vue'
import Antd from 'ant-design-vue'
import 'ant-design-vue/dist/reset.css'
import ZingPrint from '@zinghub/zing-print'
const app = createApp(/* root */)
app.use(Antd)
app.use(ZingPrint)
这样就完成了插件注册。
六、使用 PrintSetting 打印设置组件
PrintSetting 是组件中最核心的页面。
使用方式:
<template>
<PrintSetting />
</template>
<script setup lang="ts">
import { PrintSetting } from '@zinghub/zing-print'
</script>
这个组件已经内置完整打印能力。
包括:
-
连接 QZ Tray
-
获取打印机列表
-
选择默认打印机
-
标签预览
-
测试打印
可以直接作为 ERP 打印设置页面 使用。
七、标签模板组件(LabelPrinter)
如果你不需要完整设置页面,也可以直接使用标签组件。
组件:
LabelPrinter
示例:
<template>
<LabelPrinter
:template="1"
text1="产品"
value1="苹果"
text2="批次"
value2="A001"
text3="日期"
value3="2024-01-01"
text4="规格"
value4="500g"
text5="产地"
value5="山东"
qrcode="123456789"
barcode="123456789"
:label-width-mm="60"
:label-height-mm="40"
/>
</template>
<script setup lang="ts">
import { LabelPrinter } from '@zinghub/zing-print'
</script>
支持:
-
模板1 / 模板2 / 模板3
-
二维码
-
条形码
-
标签尺寸设置
适合:
-
页面预览
-
标签设计
-
自定义布局
八、低层打印 API
如果需要更灵活控制,也可以使用低层方法。
例如:
import { connectQZ, listPrinters, printHTML } from '@zinghub/zing-print'
常见流程:
1 连接 QZ Tray
connectQZ()
2 获取打印机列表
listPrinters()
3 发送打印内容
printHTML()
这样可以实现完全自定义的打印逻辑。
九、典型 ERP 打印流程
在 ERP 系统中,打印流程通常是:
订单
↓
商品列表
↓
生成标签
↓
发送打印
例如:
订单包含 10 个商品
就可以生成:
10 个标签
然后通过 QZ Tray 一次性发送到打印机。
十、本地开发
如果你想运行项目 Demo:
pnpm install
pnpm dev
即可启动本地演示页面。
十一、适用场景
知印适用于:
系统
使用场景
ERP
商品标签
WMS
仓库标签
MES
生产条码
电商系统
发货标签
特别适合 工业级标签打印需求。
十二、项目地址
项目开源地址:gitee.com/zinghub/zin…

编辑
结尾
Web 打印一直是很多系统开发的痛点。
知印(zing-print) 的目标就是:
让 Vue3 项目可以快速拥有工业级标签打印能力。
如果你也在做:
-
ERP
-
仓储系统
-
生产系统
希望这个项目可以帮到你。