14

我想知道如何将条形码代码 128 居中。在图片上,您应该看到它现在是左对齐的。 标签

我的zpl:

^XA
^LH10,10
^FO0,0^XGE:SWESE001.GRF^FS
^FO440,0^XGE:SWESE000.GRF^FS
^FO0,70^FB550,50,0,C,0^AQN,25,30^FDSpraynozzle 50mm^FS
^FO0,130^BY2^BCN,30,Y,Y,N,N^FDS/N:941001-0114-0001^FS
^FO180,170^AQN,23,20^FDwww.swepro.com^FS
^XZ
4

5 回答 5

27

我正在发布我的解决方案,以防有人在寻找它。正如 E_S 提到的,为了在标签中居中条形码,您必须按照以下步骤通过代码计算它:

  • 检查您的窄条宽度,在您的情况下 2(^BY2)
  • 找出您的标签总宽度(以点为单位)。为此,您必须知道打印机的分辨率是多少(eg: 8 dots / mm)。所以如果你的80 mm标签很宽,80 * 8 = 640 dots
  • 计算条形码中的每个字符,包括调用代码和校验位,如下所示。有关调用代码的信息,请参见:https ://www.zebra.com/content/dam/zebra/manuals/en-us/software/zpl-zbi2-pm-en.pdf (第 95 页)
  • 请注意,调用代码(">:", ">5", etc.)算作一个字符,并且其中的字符mode C成对存储。有关 的更多信息mode C,请参阅http://en.wikipedia.org/wiki/Code_128
  • 如果您的条形码是>:S/N:941001-0114-0001您必须计算 [起始代码 B] + [20 个字符] + [校验位] = 22
  • 如果您的条形码是>:S/N:>5941001>6->50114>6->50001您必须计算[start code B] + [4 characters for 'S/N:'] + [mode C invocation] + [3 characters for '941001'] + [mode B invocation] + [1 characters for '-'] + [mode C invocation] + [2 characters for '0114'] + [mode B invocation] + [1 characters for '-'] + [mode C invocation] + [2 characters for '0001'] + [check digit] = 20
  • 每个字符占用 11 个混合空格和条的单位,除了stop code有 2 个额外的单位(总共 13 个)
  • 好东西来了……条形码宽度是:((chars counted [22 or 20] * 11) + (stop char * 13)) * narrow bar width = 510 dots or 466 dots
  • 现在我们要做的就是round((label width - barcode width) / 2)用它来定位条形码^FT

而已!希望它可以帮助某人!

于 2015-05-13T21:55:36.043 回答
4

没有 ZPL 命令可以使代码居中。生成 ZPL 的程序需要根据代码的大小和使用坐标的位置自动计算位置。

于 2014-03-18T14:58:40.010 回答
1

这个问题的另一个解决方案,不像 Nicolas Garfinkiel 那样优雅,但简单得多,是下面的一个。

从根本上说,Code 128 的问题在于它是可变宽度的。但在现实生活中,我们无论如何都将其用作固定宽度。这需要解释。我们将代码放置在某个地方,并且我们希望它不会比一些更宽,否则它不会适合,我们必须保留(保持空白)它允许填充的空间。因此,即使它是可变宽度,我们也总是需要在标签上为其分配固定区域。

所以解决居中问题的方法是使 Code 128 固定长度。

如果这是子集 C(数字对),那么您需要:

  1. 获取任何足够大的数字,形式为 100000...,因此总共有偶数位数。
  2. 将您的代码添加到其中。

例如,如果您的代码是 94100101140001,那么您可以将其与 10^16 相加,得到:

10000000000000000
   94100101140001
=================
10094100101140001

因此代码变为固定宽度,并且可以硬居中。

如果您的代码不是 C 子集,并且包含文本,那么(在伪代码中)您可以:

my_code = "S/N:941001-0114-0001"
const_max_code_length = 24  (for example)
if my-code.length > const_max_code_length then error
padding_char = "="
result = ""
for (0..(const_max_code_length - my_code.length)) do
    result += padding_char
end_for
result += my_code

如果是您的代码,它将产生:

====S/N:941001-0114-0001

然后,无论您在其中输入什么文本,它始终是固定长度的,因此将始终定位。

我自己用过,在找到这个帖子之前。这不行,这是一个 hack,Nicolas Garfinkiel 的建议更正确。不过,最合适的解决方案是,如果 ZPL 本身支持代码居中,不幸的是它不支持。

于 2019-08-27T08:14:04.470 回答
-2

您必须使用托盘:

 ^FO10,170^AQN,23,20^FDwww.swepro.com^FS

. 哪里
。^FOX,Y^AQN,...^FSX=x-axis location and Y=y-axis location

于 2017-06-12T17:09:30.960 回答
-3

单击条码属性中的复选框“将条码打印为图形”。

它在我的情况下有效。

于 2016-06-01T09:29:30.210 回答