之前在社区分享过 Labelize:用 Rust 写的 ZPL/EPL 标签渲染引擎。那篇帖子带来了项目早期的一批关注和 Star,先谢谢大家。
这次想介绍建立在同一个引擎之上的桌面应用:Labelize Studio。
如果说 Labelize 解决的是“给我一段标签指令,帮我渲染出来”,Studio 解决的就是接下来的操作:打开文件、修改内容、设计标签、检查多页结果,再保存成 PDF 或 PNG。 桌面界面使用 Rust + GPUI,提供 Windows、macOS 和 Linux 安装包。Studio 采用 MIT 许可,Labelize 的 Rust crate 声明 MIT AND BSD-3-Clause。

本文截图来自发布前的 macOS 开发版,标签内容均为演示数据。图中的新 logo、Antialias 和 Vector 选项已随 v0.5.0 发布。
为什么从引擎做到了桌面应用
做物流、电商或仓储系统时,经常会拿到一段 ZPL,或者一个 .prn 文件。它们不是普通图片,而是给标签打印机的指令:哪里放文字、哪里画条码、纸张多大、打印几份。
开发时用 CLI 或 HTTP 接口转换很方便;但要反复打开几个文件对照、调整标签内容,或者让不写代码的同事预览结果,一个桌面工作台会更直接。Studio 最初叫 Labelize Printer,从虚拟打印机起步,逐步加入文件工作台和可视化设计器,所以现在改用了能涵盖这些功能的名字。
Labelize 本身仍然是独立的引擎项目。 它负责打印语言解析与渲染;Studio 复用这部分能力,负责桌面交互、文档会话、任务管理和系统打印接入。
| 你的需求 | 可以从哪里开始 |
|---|---|
| 打开标签文件、做可视化设计、导出 PDF/PNG | Labelize Studio |
| 在自己的系统中集成解析与渲染,或批量转换标签 | Labelize,提供 Rust 库、CLI、HTTP、WASM 和 Android 接入 |
| 先看看打印指令渲染出来是什么样 | Labelize 在线 Playground,建议使用示例或脱敏数据 |
现在能做什么
打开打印语言文件,逐页检查
Studio 支持打开 ZPL、EPL、TSPL/TSC、CPCL 和 DPL 文件,也可以识别常见的 .prn 输入。每个文件有独立标签页,保留页码、缩放、编辑内容和导出选项;重复打开同一路径会定位到已有标签页。
可以在预览和源代码之间切换。文本修改后会自动更新预览;输入错误时保留上一次成功结果,并提示尚未更新。含二进制内容的文件会保持只读,避免文本编辑破坏原始指令数据。

直接设计标签
设计器包含文字、矩形、椭圆、线条、图片,以及 Code 128、Code 39、EAN-13、EAN-8、UPC-A、ITF、QR、Data Matrix、PDF417、Aztec,共 15 种对象。
可以调整位置、尺寸、旋转、文字排版和条码参数,管理图层的顺序、显隐与锁定,也支持撤销和重做。设计保存为 .labelize.json,图片和导入的字体随模板一起保存。需要中文时,可导入包含相应字形的字体。
目前已有的打印语言文件仍按源代码编辑,不会自动拆解成设计对象;设计器输出 PDF/PNG,暂不导出 ZPL 等打印语言代码。
导出文件,或接收系统打印任务
一个任务可以保存为一份多页 PDF,或逐页 PNG。导出提交后会在后台继续处理,可以切换标签页或关闭窗口;任务列表只有在文件真正保存成功后才显示完成。本机草稿和标签页会话也会自动保存,供下次打开时恢复。
另一个入口是虚拟打印机:在系统打印窗口选择 Labelize Printer,把其他应用的打印任务保存为文件。这里仍保留原打印队列名称,方便升级兼容。
两条输入路径各有分工:Windows 路径由 ZDesigner 生成 ZPL,再交给 Labelize;macOS/Linux 经 IPP/PAPPL 接收系统生成的栅格页面,直接保存 PDF/PNG,不需要绕一圈转换成 ZPL。Windows 的完整 ZDesigner 链路仍待实机验收。
只使用文件预览、设计和导出时,无需先安装系统打印队列。标签处理在本机完成;可选的软件更新检查会访问 GitHub。
用 Rust + GPUI 做这类工具的几点体会
Labelize 已经是 Rust 项目,桌面端继续使用 Rust,可以直接复用解析、条码和渲染能力。GPUI 承担工作台、画布和属性面板,后台进程则独立于窗口和 GPU 初始化运行。
过程中比较费心的是状态边界:
- 预览可以过期,结果不能串页。 每次预览绑定文档和修订号,快速输入或切换标签页时,旧结果不能覆盖新内容。
- 编辑状态和导出任务要分开。 导出保存点击时的内容与设置快照,随后继续编辑不会改变已经接收的任务。
- 收到任务不等于保存成功。 输入和任务状态持久化,渲染放到独立子进程,输出先写临时文件再提交,失败时保留诊断信息供重试。
这些工作让渲染引擎变成一个可以反复打开、编辑、关闭和恢复的桌面工具。感兴趣的话,仓库里的 架构说明 记录了具体分工。
v0.5.0 已发布
目前可下载的 v0.5.0 包含多标签页工作台、扩展设计器、PDF/PNG 导出、虚拟打印机和应用内更新入口。这个版本发布了新图标,打印语言任务也已切换到 Labelize 1.12.0。
v0.5.0 加入了 Antialias 和 Vector。抗锯齿可以保留平滑的灰度边缘;矢量 PDF 保留支持的文字、图形和条码几何;PNG 可以从矢量场景按 1–4 倍分辨率生成,但 PNG 本身仍然是位图,标签物理尺寸不变。默认保持原来的黑白栅格输出,导入的位图也不会凭空获得矢量细节。
Windows x64 和 Debian 12 amd64 已通过发布 CI 的构建与测试。两种 macOS 安装包在同一提交上本机构建和验证,其中 Intel 版在 Rosetta 下测试。也可以从源码构建。
试用与反馈
安装包在 GitHub Releases,包括 Windows x64、macOS Apple Silicon、macOS Intel 和 Debian 12 amd64,附带 SHA256SUMS。macOS 也可以通过 Homebrew 安装:
brew install --cask goodboy008/labelize-studio/labelize-studio
打开后可以先新建一个设计,或下载仓库里的 设计器示例 体验预览和导出。已有 Labelize Printer 用户可参考迁移说明。
项目还处于早期试用阶段:Windows/macOS 安装包尚未签名,macOS 公证待完成;CI 构建通过也不代表每种桌面环境都已实机验收。原生 Windows x64 与 ZDesigner、macOS 13,以及更多 Linux 桌面环境仍需要验证,具体状态记录在验收文档。
如果你正在做标签、物流或仓储相关的系统,欢迎拿脱敏后的文件试一试。尤其想听听大家对 GPUI 桌面交互、真实打印链路和渲染效果的反馈。遇到问题时,附上系统与架构、应用版本、预期结果和最小标签样例,会很有帮助。
桌面应用:Labelize Studio · 渲染引擎:Labelize
欢迎提 Issue、PR;如果对你有用,也欢迎给对应的项目一个 Star。谢谢之前从社区一路关注 Labelize 的朋友。
评论区
写评论还没有评论