ZPL如何居中条码(代码128)

时间:2014-03-18 08:48:51

标签: zebra-printers zpl zpl-ii

我想知道如何将条形码代码128置于中心位置。 在图片上你应该看到它现在是左对齐的。 Label

我的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

5 个答案:

答案 0 :(得分:10)

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

  • 检查您的窄条宽度,在您的情况下为(^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(页97)
  • 请注意,调用代码(">:", ">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'] = 19
  • 每个角色占用11个单位混合空格和条形,stop code除外,它有2个额外单位(总共13个)
  • 好的东西......条形码宽度是:((chars counted [22 or 19] * 11) + (stop char * 13)) * narrow bar width = 510 dots or 444 dots
  • 现在我们所要做的只是round((label width - barcode width) / 2)并使用它来定位条形码^FT

那就是它!希望它可以帮助别人!

答案 1 :(得分:3)

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

答案 2 :(得分:0)

下一个解决这个问题的方法不是尼古拉斯·加芬基尔(Nicolas Garfinkiel)那样优雅,而是简单得多。

从根本上讲,代码128的问题是宽度可变。但是在现实生活中,无论如何我们还是将其用作固定宽度。这需要解释。我们将代码放置在某个地方,我们期望不能超过某些宽度,否则就不合适了,并且我们必须保留(保持空白)允许的空间填写。因此,即使宽度可变,我们也总是需要为其分配标签上的 fixed 区域。

因此,解决居中问题的方法是使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本身是否支持代码居中,但不幸的是,它不支持代码居中。

答案 3 :(得分:-1)

you must to tray to use :

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

. where
. ^FOX,Y^AQN,...^FSX=x-axis location and Y=y-axis location

答案 4 :(得分:-2)

点击条形码属性中的复选框“打印条形码作为重要性”。

它适用于我的情况。