14标签打印服务(独立后台程序)
标签打印服务是一个独立运行的后台程序,它不依赖设计器主程序。你可以把它想象成一个"打印服务器"——它 7×24 小时在后台运行,等待接收打印任务。
📝 什么情况下需要它?
- 你需要批量自动打印,不想人工操作
- 其他软件(如 ERP、MES)需要通过网络发来打印指令
- 打印任务需要有队列管理(排队、重试、限速)
- 需要远程监控打印状态
- 你需要批量自动打印,不想人工操作
- 其他软件(如 ERP、MES)需要通过网络发来打印指令
- 打印任务需要有队列管理(排队、重试、限速)
- 需要远程监控打印状态
14.1 启动与关闭
| 操作 | 方法 |
|---|---|
| 启动服务 | 双击运行 阿标标签打印服务.exe。启动后没有窗口弹出,只在任务栏右下角(系统托盘)出现一个打印机图标。 |
| 确认服务已运行 | 在系统托盘中找到打印机图标,如果没有就去托盘展开区找。 |
| 退出服务 | 右键点击托盘图标 → 选择「退出」。 |
| 开机自启动 | 右键托盘图标 → 「设置」→ 勾选「开机启动」。以后电脑开机,服务会自动运行。 |
💡 找不到托盘图标?点击任务栏右下角的 ^ 箭头(显示隐藏的图标),一般就能看到。你也可以把图标拖到任务栏主区域。
14.2 三条接收通道
打印服务同时提供 3 种方式来接收打印任务:
① TCP 通道(端口 8888)
这是最直接的方式。任何程序或设备,只要通过 TCP 协议连接到这台电脑的 8888 端口,发送 ZPL 指令,服务就会打印。
适用场景:
- 局域网内的扫码设备直接发送打印指令
- 生产线上的一体机发送标签数据
- 需要低延迟、高效率的打印
② HTTP REST API(端口 5000)
这是最常用的方式。通过标准的 HTTP 请求来发送打印任务,任何支持 HTTP 的编程语言(C#、Java、Python、PHP 等)都可以调用。
管理后台:打开浏览器,访问 http://localhost:5000,可以看到服务状态页面。
可用 API 接口:
| 方法 | 接口地址 | 作用 |
|---|---|---|
| GET | http://localhost:5000/ | 打开服务状态网页,可以看到服务是否运行、队列情况等 |
| POST | http://localhost:5000/print | 最重要的接口!发送 ZPL 指令打印标签 |
| GET | http://localhost:5000/queue | 查看当前打印队列中有哪些任务 |
| DELETE | http://localhost:5000/queue/任务ID | 取消某个等待打印的任务 |
| GET | http://localhost:5000/history | 查看打印历史记录 |
| DELETE | http://localhost:5000/history | 清空所有历史记录 |
| POST | http://localhost:5000/shutdown | 远程关闭打印服务 |
如何用 Python 调用 HTTP 接口打印:
import requests, json
zpl_data = "^XA^FO50,50^ADN,36,20^FDHello World^FS^XZ"
task = {
"zpl": zpl_data,
"copies": 2,
"printer": "ZDesigner ZD421",
"priority": 0
}
resp = requests.post("http://localhost:5000/print", json=task)
print(resp.json()) # {"success": true, "taskId": "..."}
如何用 curl 命令测试:
curl -X POST http://localhost:5000/print ^
-H "Content-Type: application/json" ^
-d "{\"zpl\":\"^XA^FO50,50^ADN,36,20^FDHello^FS^XZ\",\"copies\":1}"
③ 目录监控
服务会监视一个指定的文件夹。只要有人把 .zpl 或 .iba 文件放到这个文件夹里,服务就会自动把文件内容作为打印任务入队。
- 打印成功:文件移到
.processed子文件夹 - 打印失败:文件移到
.failed子文件夹 - 这个方式很适合与其他系统集成——其他系统只需要生成 ZPL 文件放到文件夹,打印服务自动处理
14.3 打印队列管理
当有多个打印任务同时进来时,服务会按顺序排队处理:
- 先入先出:默认按到达顺序打印
- 优先级:可以给任务设优先级(0=最高,数值越大优先级越低),高优先级的先打印
- 自动重试:如果打印失败了,会自动重试(默认最多重试 3 次,每次间隔 5 秒)
- 限速:可以设置两次打印之间的最小间隔(防止打印机过载)
- 暂停/恢复:可以临时暂停队列(比如换碳带),之后再恢复
- 持久化:队列中的任务会存到硬盘上,就算服务重启了,任务也不会丢
14.4 设置管理
右键点击系统托盘的打印机图标 → 「设置」,进入设置界面:
| 设置项 | 默认值 | 说明 |
|---|---|---|
| TCP 端口 | 8888 | TCP 监听端口。如果端口被占用可以改 |
| HTTP 端口 | 5000 | HTTP API 端口。如果跟其他程序冲突可以改 |
| 监控目录 | (空) | 要监视的文件夹路径,填写完整的路径如 D:\PrintJobs\ |
| 默认打印机 | (系统默认) | 未指定打印机时的默认打印设备 |
| 打印重试次数 | 3 | 任务失败后重试几次(0=不重试) |
| 重试间隔 | 5 秒 | 每次重试之间等多久 |
| 限流间隔 | 200 毫秒 | 两个任务之间至少间隔多少毫秒 |
| 开机启动 | 关闭 | 是否随 Windows 自动启动 |
| 队列存储路径 | (默认) | 队列持久化文件存放在哪里 |
14.5 条件规则(进阶功能)
条件规则可以对打印任务进行智能处理——根据任务的内容,决定怎么做。
规则示例:
- 按内容分流:如果是"上海"出货的标签,转发到仓库 A 的打印机;如果是"北京"出货的,转发到仓库 B 的打印机
- 按来源分流:来自 HTTP 的走快速通道,来自目录监控的走批量通道
- 过滤:某些标签不需要打印直接丢弃
- 修改内容:在 ZPL 指令前加一段固定的页眉/页脚
- 修改数量:某些类型的标签自动多打印一份
规则由两部分组成:
- 条件:什么情况下匹配(字段值匹配 / ZPL 内容匹配 / 来源匹配)
- 动作:匹配后做什么(转发打印机 / 阻止打印 / 修改内容 / 修改份数)
规则按配置的顺序从上到下依次判断,匹配了第一条就停止。
14.6 系统托盘操作
在任务栏右下角找到打印机图标:
- 左键双击:在浏览器中打开管理后台(http://localhost:5000)
- 右键菜单:
┣ 打开管理后台
┣ 显示窗口(显示服务控制窗口)
┣ 暂停/恢复打印
┣ 设置
┣ 关于
┗ 退出
14.7 COM 组件支持(旧系统兼容)
如果你的公司还在用 VB6、VBA(Excel 宏)等旧技术,也可以通过 COM 组件调用打印服务:
Dim service As Object
Set service = CreateObject("PrintServiceComServer")
service.PrintZPL "^XA...^XZ", "ZDesigner ZD421", 1