Публикация закрывает вопрос с формированием и печатью 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 нет.
А какими могут быть значения параметра ТекстШтрихкода и какой максимальной длины для функции СтрокаCODE128?
(1) на входе есть проверка , что КодСимвола от 32 до 126. В противном случае возвращается пустая строка.
То есть в ТекстШтрихкода можно вводить
Символы пунктуации: !»#$%&'()*+,-./:;<=>?@[]#k8SjZc9Dxk_
Дополнительные символы: `{|}~
Цифры: 0..9
Заглавные буквы: A..Z
Малые буквы: a..z
Насчет максимальной длины — ограничений нет, в стандарте тоже нет ограничения . Где то читал что разумно 40-50 символов, чтобы не было проблем с чтением
(1) достаточно длинный. упирается в возможности сканера читать широкие шк.
(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
(4) Набор С придуман, чтобы сократить длину штрихкода. В Наборе С одним символом кодируется сразу пара цифр. Поэтому хороший алгоритм кодирования должен переключаться из B в С в подходящих случаях. Или сразу стартовать в С
В обработке этот момент реализован как предлагается в ГОСТ ISO/IEC 15417-2013 «Приложение Е (справочное)