三分钟搞定标签打印:用免费开源的 LPrint 让标签打印机不再挑系统
【免费下载链接】lprintA Label Printer Application项目地址: https://gitcode.com/gh_mirrors/lp/lprint
做标签打印这件事,最让人头疼的往往不是打印机本身,而是软件。今天要介绍的开源项目 LPrint,就是来帮你解决这个问题的:它用几个简单的命令,就能让 Zebra、DYMO、TSPL、EPSON 这些常见标签打印机在 Linux、macOS 甚至手机上顺畅打印,而且完全免费、一个可执行文件搞定一切。
一个真实的场景:仓库里的标签机又"罢工"了
先讲个朋友小周的故事。他在一家电商公司管发货,仓库里有台 Zebra 4 英寸标签机,专门打快递面单和货架标签。听起来很简单对吧?但现实是:
- 这台机器只能插在 Windows 电脑上,驱动三天两头出问题;
- 快递 API 返回的 PNG 面单,在打印机自带软件里各种缩放错位;
- 手机想临时打一张退货标签?门都没有;
- 换一卷标签纸就要重新校准,全靠老师傅的手感。
小周后来在一台闲置的 Linux 服务器上装了个叫 LPrint 的开源工具,前后不到十分钟,仓库里的 Windows 电脑、手机、打印服务器全都能直接往这台 Zebra 上丢打印任务了。他说得最多的一句话是:"早知道有这玩意儿,我少加多少班。"
LPrint 是什么?一个只管标签打印的"专用服务器"
LPrint 是一个开源的标签和票据打印机应用,作者是 Michael R Sweet——没错,就是 CUPS 打印系统的作者本人。他写 LPrint 的初衷很实在:他担心 CUPS 的后续改动会让用标签打印机的人"没得用",于是干脆专门做了一个为标签打印而生的替代品。
怎么理解它?你可以把 LPrint 想成一家"只做标签菜的小饭馆":菜单上没那么多花样,但每道菜都做得很专。它用一个二进制文件同时干三件事:
- 打印队列管理——排队、调度、取消任务;
- 打印机驱动——把数据翻译成 Zebra、TSPL、DYMO 等各家打印机"听得懂"的语言;
- 网络打印服务——让其他设备能发现并直接打印。
换句话说,它既是打印调度员,又是翻译官,还是前台接待,一个人全包了。
目前 LPrint 内置支持的打印机包括:
| 打印机品牌/系列 | 典型机型 | 对应驱动文件 |
|---|---|---|
| Zebra ZPL | 各种 2/4 英寸商用标签机 | lprint-zpl.c |
| Zebra/Eltron EPL2 | 老款 Zebra 机 | lprint-epl2.c |
| TSPL/TSPL2 | Rollo X1038 等 | lprint-tspl.c |
| ESC/POS 小票机 | EPSON TM 系列 | lprint-escpos.c |
| DYMO LabelWriter | LW450 系列 | lprint-dymo.c |
| Seiko SLP | SLP 系列 | lprint-sii.c |
另外还有 Brother PT/QL 和 Zebra CPCL 两个实验性驱动,需要编译时手动开启。
三分钟上手:装好、认出打印机、打出一张标签
第一步:安装,三条路任选
Linux 上最省事的办法是用 snap 安装,官方提供了现成的打包:
sudo snap install lprint sudo snap connect lprint:raw-usb sudo snap start lprint.lprint-server想从源码编译的话,先确认环境里有 PAPPL 1.2 以上、CUPS 2.5 以上(或 libcups 3.0)的开发文件,然后:
git clone https://gitcode.com/gh_mirrors/lp/lprint cd lprint ./configure make sudo make installmacOS 用户可以直接下载官方安装包,Intel 和 Apple Silicon 都支持。
第二步:让 LPrint 认出你的打印机
USB 连接的标签机,直接运行:
lprint devices它会列出所有能通过 USB 和 SNMP 发现的打印机及对应的设备 URI。网络打印机可以先在机器上打印一张"配置摘要页"拿到 IP 地址,设备 URI 就是socket://加上 IP,比如socket://192.168.0.42。
再看看有哪些驱动可用:
lprint drivers第三步:添加打印机并打印第一张标签
添加一台 4 英寸 Zebra 打印机(假设 IP 是 192.168.0.42):
lprint add -d myprinter -v socket://192.168.0.42 -m zpl_4inch-203dpi-dt然后直接打一份 ZPL 原始文件:
lprint mylabel.zpl或者打一张快递面单 PNG,指定 4x6 英寸的标签尺寸:
lprint -o media=na_index-4x6_4x6in label.png到这里,你已经完成了一次完整的标签打印。整个过程不需要任何图形界面,一条命令搞定,这也是 LPrint 最迷人的地方。
核心机制拆解:它是怎么做到的?
一个二进制,身兼数职
前面说过,LPrint 只有一个可执行文件,它的架构分三层:
- 应用层:
lprint.c是主入口,负责解析各个子命令; - 协议层:通过 PAPPL 库实现 IPP Everywhere 等网络打印协议(PAPPL 同样是作者的开源库,专门用来快速搭建 IPP 打印服务);
- 驱动层:
lprint-*.c是各品牌的驱动模块。
这和 CUPS 那种"重量级"设计形成了鲜明对比。CUPS 为了兼容海量打印机,每次打印都要反复建立、断开连接;而标签打印机往往很"娇气",频繁断连容易卡纸、丢数据。LPrint 的做法是把多个打印任务合并到同一条连接上连续发送,尽量减少连接的开合次数,让标签机一直保持"顺畅出纸"的状态。就这一个细节,对批量打印体验的提升是肉眼可见的。
驱动模块:每个品牌一个 C 文件
看项目的源码目录,你会发现每个品牌对应一个独立驱动文件,比如前面表格里列出的lprint-zpl.c、lprint-tspl.c、lprint-escpos.c。每个驱动里都内置了该品牌常见型号支持的标签尺寸、分辨率、打印速度、浓度等参数,还会自动探测打印机的型号和功能。加一个新品牌,基本就是照葫芦画瓢多写一个 C 文件,不需要动核心代码。这种模块化设计,让社区扩展新打印机支持的门槛变得很低。
免驱动网络打印,手机也能打
LPrint 最酷的能力其实在服务器模式。运行:
lprint server之后,每台打印机都会以 IPP Everywhere(一种"免驱动打印"标准,苹果的 AirPrint 也基于它)的形式出现在网络上。于是你的 Android 手机、iPhone、iPad、Windows 10/11、Chrome OS——几乎所有支持免驱打印的设备,都能像找到普通网络打印机一样找到你的标签机,直接开打。对"仓库里多台设备都要打标签"这种场景来说,这基本等于免费白得一套无线打印方案。
新手最容易踩的坑和对应的解法
别拿 master 分支上生产。项目 README 明确警告:当前 master 分支有已知问题,不适合打包发布,请等正式 release。尝鲜可以,但别拿去给重要业务用。
实验性驱动要手动开启。Brother PT/QL 和 Zebra CPCL 的驱动编译时需要加
--enable-experimental,而且它们未经完整测试,功能可能不全。想当主力用之前,一定先用真机验证一遍。ZPL 状态命令的兼容性问题。有些打印机并没有完整实现 ZPL 的状态查询指令。新版驱动已经会自动检测并禁用这些命令,但如果你用的是旧版本,发现打印卡在"查询状态"这一步,先想想是不是这个原因。
media 尺寸名别瞎填。LPrint 的标签尺寸用的是
na_index-4x6_4x6in这种"自描述"名字,记不住很正常。最稳的办法是先跑lprint options -d 打印机名,看看这台机器到底支持哪些值,别凭感觉硬填。URI 和驱动名要对上。常见的坑是 USB 打印机用错了设备 URI,或者驱动名拼错。多跑
lprint devices和lprint drivers,让工具自己告诉你正确答案。改了服务器配置要重启。比如通过
lprint.conf修改了监听端口、日志级别等参数后,记得用systemctl restart lprint,或先lprint shutdown再启动服务器,不然改动不生效。
进阶玩法:让标签打印自动化起来
配合脚本做自动打印。快递 API 返回的往往是 PNG 面单,你完全可以直接管道给 LPrint:
cat label.png | lprint -o media=na_index-4x6_4x6in再配合定时任务或订单系统,基本就能实现"订单来了,标签自己打"。
用 lprint modify 告诉打印机当前装了什么纸。比如 Dymo LabelWriter 450 双卷机型,可以用类似下面的命令设置两卷各自的纸型,省得每次手动选:
lprint modify -d Dymo450TT \ -o media-ready=oe_address-label_1.25x3.5in,oe_shipping-label_2.125x4in开 Web 管理界面。服务器模式下,LPrint 自带一个网页管理界面,可以远程添加、修改、删除打印机,还能查看任务状态。运维人员不用再 SSH 进去敲命令了。
远程提交任务。LPrint 的很多子命令都支持
-u参数指向远程 LPrint 服务器的打印队列,这样你可以在统一入口管理多个位置的标签机。
写在最后
标签打印这件事,说大不大,说小不小,但卡在软件上真的很影响效率。LPrint 把"装驱动、配队列、管任务、开网络打印"这些原本很散的事,收敛成了几个命令和一个免费开源的工具。它的价值不在于功能多花哨,而在于专业、专注、开箱即用——任何需要打标签的个人和小团队,都值得花十分钟亲自试一下,说不定你就成了下一个"早知道有这玩意儿"的人。
【免费下载链接】lprintA Label Printer Application项目地址: https://gitcode.com/gh_mirrors/lp/lprint
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考