这个问题的另一个解决方案,不像 Nicolas Garfinkiel 那样优雅,但简单得多,是下面的一个。
从根本上说,Code 128 的问题在于它是可变宽度的。但在现实生活中,我们无论如何都将其用作固定宽度。这需要解释。我们将代码放置在某个地方,并且我们希望它不会比一些更宽,否则它不会适合,我们必须保留(保持空白)它允许填充的空间。因此,即使它是可变宽度,我们也总是需要在标签上为其分配固定区域。
所以解决居中问题的方法是使 Code 128 固定长度。
如果这是子集 C(数字对),那么您需要:
- 获取任何足够大的数字,形式为 100000...,因此总共有偶数位数。
- 将您的代码添加到其中。
例如,如果您的代码是 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 本身支持代码居中,不幸的是它不支持。