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

问题描述 投票:0回答:3
^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 条码宽度的计算公式是什么?

barcode zebra-printers zpl
3个回答
3
投票

Code 128 条码包括三种模式。 ^BC 中的“A”意味着条形码算法将根据字母与数字混合的位置和/或连续有多少个数字自动选择最佳模式。 这导致条形码的长度根据其内容而变化。

您可以将 A 更改为 N。这将使宽度易于估计,即使它不是最节省空间的。

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

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

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

>;
告诉 ZPL 将其渲染为子集 C。

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

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

如果您的条形码始终为 13 位数字,那么自动居中就没有实际意义了。 即使在自动模式下,条形码也将始终具有相同的宽度。 找到看起来位于标签中心的

^FO
,然后坚持下去。 该条形码的宽度为 368 点。 尝试一下
^FO121,90

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


2
投票

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

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

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

如果您的数据采用 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.125 毫米。

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


0
投票

在已经给出的答案之上,如果您使用ZPL条形码模式

U
(固定19位的UCC大小写模式),您需要根据GSI-128(使用子集C)计算宽度。请注意,对于
U
模式,它将在开头添加填充 0,以便始终生成 19 位数字 + 1 个校验位。

例如:

^BY3
^BCN,100,Y,N,Y,U

条码宽度可按下式计算:

  1. 起始数字:11模块
  2. FNC1:11模块宽度
  3. 19 位数字 + 1 位校验位:20 / 2 = 10 个模块(子集 C 具有双倍密度,因此每 2 位数字一起编码)
  4. 停止符号:11模块+2模块(Final Bar)

总计为 (46 + 11 * 10) * 模块宽度(本例中为 3 点)= 468 点。

© www.soinside.com 2019 - 2024. All rights reserved.