Печать штрихкода Code 128 с помощью шрифта



Открытые шрифты и кодировщик для встраивания в собственные доработки.

Публикация закрывает вопрос с формированием и печатью Code 128 с помощью шрифта. 

На данный момент в сети много подобных обработок, но мне не удалось найти то, что бы меня устроило с точки зрения происхождения шрифтов и реализации так, чтобы просто это взять и использовать в своих доработках.

1. Шрифты

Вместе с обработкой приложен комплект шрифтов, взятых из открытого репозитория https://github.com/Holger-Will/code-128-font по лицензии OPEN FONT LICENSE.

Также может быть использован шрифт https://fonts.google.com/specimen/Libre+Barcode+128 https://github.com/graphicore/librebarcode 

2. Кодировщик

Прилагаемый кодировщик совместим с этими шрифтами и использует маппинг кодов на символы шрифта по варианту "Common". См. таблицу Code 128 https://en.wikipedia.org/wiki/Code_128

Кодируются символы Набора B с динамическим переходом на Набор C для оптимизации длины штрихкода. Набор B: 

Символы пунктуации: !"#$%&'()*+,-./:;<=>?@[]#k8SjZc9Dxk_
Дополнительные символы: `{|}~
Цифры: 0..9
Заглавные буквы: A..Z
Малые буквы: a..z

Сам алгоритм был реализован по рекомендациям ГОСТ ISO/IEC 15417-2013 "Приложение Е (справочное). Использование знаков Start, Code и Shift для минимизации длины символа". Для желающих разобраться в коде есть комментарии.

Для использования в своих доработках нужно взять код из #Область КодированиеCODE128 и вызывать функцию СтрокаCODE128.

Обработка протестирована на релизе платформы 8.3.14.1854. Ограничений по релизу 8.3 нет.

5 Comments

  1. rusmil

    А какими могут быть значения параметра ТекстШтрихкода и какой максимальной длины для функции СтрокаCODE128?

    Reply
  2. avasl

    (1) на входе есть проверка , что КодСимвола от 32 до 126. В противном случае возвращается пустая строка.

    То есть в ТекстШтрихкода можно вводить

    Символы пунктуации: !»#$%&'()*+,-./:;<=>?@[]#k8SjZc9Dxk_

    Дополнительные символы: `{|}~

    Цифры: 0..9

    Заглавные буквы: A..Z

    Малые буквы: a..z

    Насчет максимальной длины — ограничений нет, в стандарте тоже нет ограничения . Где то читал что разумно 40-50 символов, чтобы не было проблем с чтением

    Reply
  3. CheBurator

    (1) достаточно длинный. упирается в возможности сканера читать широкие шк.

    Reply
  4. Perfolenta

    (2) тип С только для цифр…

    из вики:

    128A (Code Set A) – ASCII characters 00 to 95 (0–9, A–Z and control codes), special characters, and FNC 1–4

    128B (Code Set B) – ASCII characters 32 to 127 (0–9, A–Z, a–z), special characters, and FNC 1–4

    128C (Code Set C) – 00–99 (encodes two digits with a single code point) and FNC1

    Reply
  5. avasl

    (4) Набор С придуман, чтобы сократить длину штрихкода. В Наборе С одним символом кодируется сразу пара цифр. Поэтому хороший алгоритм кодирования должен переключаться из B в С в подходящих случаях. Или сразу стартовать в С

    В обработке этот момент реализован как предлагается в ГОСТ ISO/IEC 15417-2013 «Приложение Е (справочное)

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *