如何计算此 zpl 条形码的宽度(以点为单位)?

How to calculate the width (in dots) of this zpl barcode?

^XA
^FO0,90^AD^BY3
^BCN,100,Y,N,Y,A
^MD10
^FD1458622235534^FS
^XZ

使用 Label Viewer 我能够使用 ZPL,在阅读一些文档后发现 ^FO0,90 是条形码的位置。 0 是从左边开始的点数,90 是从顶部开始的点数。

我的问题是,上面条码的宽度如何以点为单位进行计算?如果我知道条形码的宽度,我就可以通过编程将其居中。

打印机的分辨率为 203dpi,标签为 3'(宽)x 2'(长),即 610 点宽。

计算 ZPL 条码宽度的公式是什么?

Code 128条码包括三种模式。 ^BC 中的 "A" 表示条形码算法将根据字母与数字混合的位置自动 select 最佳模式,and/or 有多少数字一排。这导致条形码的长度根据其内容而变化。

您可以将 A 更改为 N。这将使宽度易于估计,即使它不是最 space 有效的。

对于 N 选项:书挡总计 106 个点,每个数字 33 个点。

对于 N + 子集 C 选项:如果您可以肯定地说您将始终拥有偶数个数字(没有字母、space 或其他符号)。您可以强制条形码进入子集 C 模式。书挡有 104 个点,每两位数字有 33 个点。但是你的位数必须是偶数。

^BCN,100,Y,N,Y,N
^FD>;1422335544^FS

>; 告诉 ZPL 将其呈现为子集 C。

如果您知道您将需要支持字母数字条形码,请坚持使用 A。这是事情变得更难的地方。

您需要使用您选择的编程语言对条形码算法进行建模。也许您可以找到一个现有的库,因为 Code 128 是一种非常流行的条码。使用库在内存中呈现条形码。您可能需要调整参数才能生成与您的 ZPL 输出相等的条形码。然后让您的程序使用库的输出来确定条形码的宽度。

如果您的条形码总是 13 位数字,那么自动居中是一个有争议的问题。条形码将始终具有相同的宽度,即使在自动模式下也是如此。找到看起来像在标签中心的 ^FO,并坚持下去。此条形码为 368 点宽。试试 ^FO121,90.

我没有计算条形码的宽度,我是通过将标签渲染成 Gif,然后在可以让我计算点数的绘图程序中检查标签来测量的。

我建议您查看 Code 128 维基百科文章以了解详细信息。

代码 128 的自然长度单位是标记为 x 的窄条宽度(在您的 ZPL 代码中设置为 3 点)。一个code 128条码(不包括两个10x静区)由

组成
  1. 一个起始字符(11 倍宽)
  2. n 个宽度为 11x 的编码字符
  3. 一个 CRC(11 倍宽)
  4. 一个停止字符(12 倍宽)

如果你的数据有n个编码字符,则条形码的长度是(34 + n*11)x。在你的例子中,x 是 3 个点,所以在 8dot/mm 时,条形码将是 (12.75 + n*4.125)mm 宽。

您必须查看编码才能计算出 n。最小编码不是唯一的,但在您的情况下,数据将使用 8 个条码字符进行编码:6 个代码 C 字符(用于 6 对数字),1 个开关代码字符和 1 个代码 A 字符(用于最后一位)。条形码应为 45.75 毫米/366 点宽。

你的 ZPL 有点问题。您在非 UCC 条码上指定了 UCC 校验码。我不熟悉 UCC/GS1-128 条形码,但这可能会引入额外的条形码字符或无关紧要。

您也可以考虑用前导 0 填充时间戳。使用 Code 128,数字对具有更好的编码。 14位条码会短4.125mm

我刚才提到了静区,条码阅读器需要它们。