zplCloud Blog

SVG 转 TTF:用打印机字体替代沉重图形

^A@N,50,50,E:MYICONS.TTF——每张标签只需一个字形引用,取代 10 KB 的 ^GFA 数据块。

1 分钟阅读 zplCloud Team

一张图形在每张标签上的代价

SVG 图标编译为 Zebra 打印机上的 TrueType 字体,取代每张标签的 ^GFA 图像

大多数标签带有 logo 或一组象形图。默认做法是把每个导出为栅格图像,作为 ^GFA 块嵌入 ZPL。它能工作,但同时在三个方面代价高昂。

负载。 ^GFA 是单色位图,每点一位,以十六进制传输。数学很简单:

字节 ≈ (宽_dots × 高_dots) / 8 × 2      (÷8 = 位→字节, ×2 = 十六进制编码)

一个 200 × 200 dots 的中等 logo——203 dpi 下约 25 × 25 mm——是 200 × 200 / 8 = 5 000 字节位图,数据流中约10 000 个字符的十六进制。每张标签都是如此。同样覆盖相同物理面积的 300 dpi logo 是 295 × 295 dots ≈ 21 800 字符。

质量。 位图固定在其生成时的分辨率。打印得更大,或把设计移到 300 或 600 dpi 打印机,就会被重采样——恰好在你代表品牌的元素上出现软边。

速度。 打印机在每张标签上接收、解码并栅格化图形。文本它直接画。

字体是打印机已经会画的字形库

SVG → TTF 编辑器接收你的 SVG 图标并构建一个 TrueType 字体。每个图标成为私有使用区码点上的字形(U+E000、U+E001、…)——正是为此保留的 Unicode 范围。

该字体被上传到打印机 flash 一次,例如作为 E:MYICONS.TTF,从设计器的 Zebra Fonts 选项卡。之后标签引用一个字形:

^XA
^FO50,50^A@N,50,50,E:MYICONS.TTF^FD^FS
^XZ

注意参数顺序:^A@ 接受方向、高度、宽度,然后是字体路径^A@N,E:MYICONS.TTF - 方向后直接跟路径 - 不是有效的 ZPL;打印机会回退到默认字体,你会花一个下午想不通为什么图标成了字母。

字体驻留后,同一标签中后续字段可将 ^A@N,50,50,E:MYICONS.TTF 缩短为 ^A@N,50,50——打印机保持最后一次 ^A@ 字体选择。

数字,附声明的前提

^GFA 图像TTF 打印机字体
前提200 × 200 dot 图标,单色,十六进制编码3 字形字体,~3 KB
每张标签≈ 10 000 B≈ 125 B(带一个字形的单字段)
上传随每张标签一次,~3 KB 总计
10 000 张标签≈ 100 MB≈ 1.25 MB + 3 KB
100 000 张标签≈ 1 GB≈ 12.5 MB + 3 KB

对那个元素而言,传输字节减少 80×。在 115 200 波特串行链路或繁忙的 Weblink 隧道上,这种差别就是队列排空与队列增长之间的差别。

缩放是免费的:同样的字形在 ^A@N,20,20^A@N,120,120 中由打印机字体引擎从矢量轮廓渲染——在 203、300 和 600 dpi 下都清晰。

Flash 有限 - 上传前检查

打印机内存并不宽裕,尤其是较老的桌面机型。GK420 总共只有几 MB。推字体前,先了解大小:

  • 少量字形的图标字体:个位 KB。从不是问题。
  • 完整 Unicode 文本字体是另一回事——ZPLCloud Unicode 字体 11 MB,其 slim 变体 7 MB。它们放不进 GK420,是为有真正 flash 的打印机准备的。
  • 在全面铺开前用 ! U1 getvar "memory.flash_free" 查询可用空间。

工作流

1. 把 SVG 拖进 SVG → TTF 编辑器。每个成为 PUA 码点上的字形;编辑器显示分配(U+E000 起)。

2. 构建字体并上传到你选择的打印机——一次操作,整支车队。

3. 在设计器中打开图标库,把图标拖到画布上。它作为字形元素落地,已绑定正确的码点和字体路径。无需手输十六进制码,无需维护 ^GF 块。

新图标或改动的 logo 是同样的三步:重建字体、推送、完成。标签设计不变——它们引用码点,而码点现在绘制新图形。

什么时候图形仍是正确答案

字体是单色轮廓。以下情况用 ^GFA

  • 照片、渐变或任何带灰度的内容(热敏打印机反正会抖动处理),
  • 每张标签都变化的一次性图形——每批货一张地图、签名图像,
  • 你收到的位图且无法干净矢量化的图形。

对于 logo、危险符号、运输象形图和重复出现的 UI 图标——标签上实际内容的大多数——字体路径更小、更清晰、更快。

能干净转换的 SVG

转换把 path 变成字形轮廓。两条规则省时间:

  • 导出 SVG 前把描边转为轮廓。字形是填充形状;1 px 描边对字体引擎没有粗细。
  • 把文本扁平化为 path。 SVG 内的文本元素依赖转换器没有理由拥有的字体。

相关

更多文章