^XA
^FO0,90^AD^BY3
^BCN,100,Y,N,Y,A
^MD10
^FD1458622235534^FS
^XZ
使用标签查看器,我能够与ZPL一起玩,并在阅读了一些文档后发现^FO0,90
是条形码的位置。0
表示从左边开始的圆点数,90
表示从上面开始的圆点数。
我的问题是,上面条形码的宽度如何用点来计算?如果我知道条形码的宽度,我就可以编程地将其居中。
打印机的分辨率为203dpi,并且给定3'(宽度)x 2'(长度)标签,即610点横跨。
计算ZPL条码宽度的公式是什么?
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然后在一个可以让我计算点的绘画程序中检查标签来测量它。
我建议您查看Code 128 wikipedia文章以了解详细信息。
代码128的自然长度单位是标记为x的窄条宽度(在您的ZPL代码中设置为3点)。128码条码(不包括两个10倍安静区)由
组成- 一个起始字符(11x宽)
- 一个宽度为11x的编码字符
- 一个CRC (11x宽)
- 一个停止字符(12倍宽)
如果数据包含n个编码字符,则条形码的长度为(34 + n*11)x。在你的例子中,x是3个点,所以在8点/毫米的条形码将是(12.75 + n*4.125)毫米宽。
您必须查看编码以找出n。最小编码不是唯一的,但在您的情况下,数据将用8个条形码字符编码:6个代码C字符(6对数字),1个开关代码字符和1个代码A字符(最后一个数字)。条形码宽度应为45.75毫米/366点。
你们的ZPL有点小问题。您在非UCC条形码上指定了UCC校验码。我不熟悉UCC/GS1-128条形码,但这可能会引入额外的条形码字符或无关紧要。也可以考虑用前导0填充时间戳。使用code128,数字对具有更好的编码。14位的条形码将缩短4.125毫米。
我刚才提到了安静区,条形码阅读器需要它们。