Другое решение этой проблемы, не такое элегантное, как у Николаса Гарфинкиля, но гораздо более простое, состоит в следующем.
Основная проблема с Code 128 заключается в том, что он имеет переменную ширину. Но в реальной жизни мы в любом случае используем его как фиксированную ширину. Это требует объяснения. Мы размещаем код где-то, и мы ожидаем, что он будет не шире некоторых, иначе он не поместится, и мы должны зарезервировать (оставить пустым) пространство, которое ему разрешено заполнить. Таким образом, несмотря на то, что это переменная ширина, нам всегда нужно выделять для нее фиксированную область на этикетке.
Таким образом, решение проблемы центрирования будет состоять в том, чтобы сделать код 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
Тогда, независимо от того, какой текст вы в него поместите, он всегда будет иметь фиксированную длину и, следовательно, будет позиционироваться последовательно.
Я использовал его сам, прежде чем нашел этот пост. Это не нормально, это взлом, и то, что предложил Николас Гарфинкель, более правильно. Однако наиболее подходящим решением было бы, если бы сама ZPL поддерживала центрирование кода, а, к сожалению, это не так.
person
latitov
schedule
27.08.2019