ZPL Как центрировать штрих-код (код 128)

Я хотел бы знать, как центрировать штрих-код 128. На картинке вы должны видеть, что сейчас он выровнен по левому краю. Ярлык

мой ЗПЛ:

^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

person darkdog    schedule 18.03.2014    source источник


Ответы (5)


Я публикую свое решение на случай, если кто-то его ищет. Как упоминает 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.

Вот и все! Надеюсь, это поможет кому-то!

person Nicolas Garfinkiel    schedule 13.05.2015
comment
Таким образом, данные имеют длину 22 символа. Как насчет стартовой, контрольной и стоповой частей штрих-кода? Похоже, вы учитываете только стоп-символ, а не начальную и контрольную часть штрих-кода. Является ли начальная, контрольная и стоповая часть шириной 11 точек? - person SQL and Java Learner; 27.09.2017

Не существует команды ZPL для центрирования кода. Ваша программа, которая генерирует ZPL, должна будет автоматически вычислять позицию на основе размера кода и позиции с использованием координат.

person Elton Saunders    schedule 18.03.2014
comment
Такая грустная правда... - person Matt Mc; 29.04.2021

Другое решение этой проблемы, не такое элегантное, как у Николаса Гарфинкиля, но гораздо более простое, состоит в следующем.

Основная проблема с Code 128 заключается в том, что он имеет переменную ширину. Но в реальной жизни мы в любом случае используем его как фиксированную ширину. Это требует объяснения. Мы размещаем код где-то, и мы ожидаем, что он будет не шире некоторых, иначе он не поместится, и мы должны зарезервировать (оставить пустым) пространство, которое ему разрешено заполнить. Таким образом, несмотря на то, что это переменная ширина, нам всегда нужно выделять для нее фиксированную область на этикетке.

Таким образом, решение проблемы центрирования будет состоять в том, чтобы сделать код 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

Тогда, независимо от того, какой текст вы в него поместите, он всегда будет иметь фиксированную длину и, следовательно, будет позиционироваться последовательно.

Я использовал его сам, прежде чем нашел этот пост. Это не нормально, это взлом, и то, что предложил Николас Гарфинкель, более правильно. Однако наиболее подходящим решением было бы, если бы сама ZPL поддерживала центрирование кода, а, к сожалению, это не так.

person latitov    schedule 27.08.2019

вы должны использовать лоток:

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

. где
. ^FOX,Y^AQN,...^FSX=x-axis location and Y=y-axis location

person ahmed elmzouri    schedule 12.06.2017

Установите флажок «Печатать штрих-код как графику» в свойствах штрих-кода.

Это сработало в моем случае.

person Cristiano Sebolão    schedule 01.06.2016