как вставить штрих код в pdf
Пример модуля для вставки штрихкода в PDF, на примере 1С:Документооборот 2.1
1. Срабатывает обработчик бизнес события (изменение внутренего документа)
2. Проверяется, что есть файл pdf и не был еще добавлен штрихкод
3. Вставляется штрихкод
4. Формируется новая версия, т.е. при желании можно откатиться на предыдущую
Штрихкод вставляется в левый нижний угол. Выполняется все на сервере, но может работать и на клиенте. При сравнении отметить по подсистеме.
Скачать файлы
Специальные предложения
(10) выполнил в командной строке
convert.exe: RegistryKeyLookupFailed `CoderModulesPath’ @ error/module.c/GetMagickModulePath/657.
convert.exe: no decode delegate for this image format `PDF’ @ error/constitute.c/ReadImage/509.
convert.exe: no images defined `D:\Foto\F\activate_final1.jpg’ @ error/convert.c/ConvertImageCommand/3275.
Обновление 06.09.17 11:29
См. также
Пометка на удаление неиспользуемых элементов справочников и документов Промо
В ходе работы в программе в ней зачастую накапливается «мусор». Данная разработка может помочь убрать его. (обычные или управляемые формы)
02.02.2010 39944 720 AnryMc 53
«Учет штрафов ГИБДД» с возможной загрузкой из открытых источников в интернет Расширение конфигурации 1С: Предприятие 8.3
Расширение конфигурации Бухгалтерия предприятия, редакция 3.0 (при минимальных изменениях любой типовой конфигурации), позволяющее вести историю данных по штрафам ГИБДД для справочника транспортных средств компании. Бонусом поставляется внешняя обработка, способная загружать эти данные из открытых источников в интернет.
30.12.2019 18854 21 capitan 11
Пакетное пробитие чеков на Онлайн-кассе при оплатах от физических лиц на расчетный счет
Автоматизация процесса пробития чеков онлайн при поступлениях на расчетный счет от физических лиц. Помогает сократить трудозатраты таким организациям, как МФЦ, Управляющие компании и т.д. Подходит для 1С:Бухгалтерия 3.0 любой версии (базовая, ПРОФ, КОРП). Не изменяет конфигурацию. Конфигурация остается на поддержке (типовая).
Добавить штрих-код в PDF
Как добавить PDF417 2-D штрих-код (как изображение) в Acroform PDF?
У меня есть процесс, где я заполняю PDF-шаблоны данными с помощью файла XFDF, который я создаю на стороне сервера. Оставаясь в одном рабочем процессе, я хотел бы использовать файлы XFDF или FDF для добавления штрих-кода в PDF файл.
Я использую полноэкранную среду JavaScript, где среда Nodejs работает на стороне сервера. Я использую сервер PDFTK (JavaScript на сервере, вызывающий файл PDFTK.exe).
Я могу использовать любой инструмент/метод в своем стеке технологий (Nodejs/Javascript). Кроме того, это решение должно работать только на стороне сервера.
В «шаблоне» PDF в настоящее время используется штрих-код «Бумажные формы для штрих-кодов Adobe Lifecycle» для штрих-кода. Когда мы заполняем эту форму PDF вручную с помощью данных, скрипт XFA, встроенный в PDF, автоматически заполняет штрих-код PDF417 с помощью элемента «Бумажные форматы штрих-кода».
Когда я запускаю команду заполнения формы PDFTK Server, чтобы заполнить PDF с помощью данных XFDF, которые я создаю на стороне сервера, я считаю, что XFA (и, следовательно, любой интеллект, находящийся под контролем «Бумажные формы штрих-кода») автоматически удаляется из итогового выходного PDF файла.
Я могу по желанию удалить «Бумажные форматы штрих-кода» и использовать любой другой доступный элемент управления.
pdf417-js, похоже, приближается к созданию штрих-кода PDF417, но это клиентская сторона. А также, я не вижу способа построить вывод изображения.
Из моих исследований кажется, что мне может потребоваться удалить существующий элемент «Бумажные форматы штрих-кода» и как-то добавить изображение в PDF. Затем, возможно, используйте PDFTK, чтобы каким-то образом объединить PDF-документ, который я заполнил данными из моего существующего процесса, с другим PDF файлом, который просто имеет штрих-код.
Я никогда не видел примера XFDF или FDF, вставляющего изображение в PDF. Я читал, где можно динамически добавлять изображение (значок) в элемент управления кнопкой через FDF (я не нашел на этом жесткого примера), но не смог получить ничего работающего.
Распознаем штрих-код pdf файла с автоматической привязкой к документу в 1С
Подобный механизм был реализован в транспортной компании, где в день выписывается 400-500 Транспортных накладных. Обработанные документы передают в отдел ТЭД, где они сканируются в разные PDF файлы и складываются в сетевую папку.
В итоге получился следующий алгоритм:
Весь механизм помещен во внешнюю обработку, которая подключается через справочник «Дополнительные отчеты и обработки», там же можно указать расписание автоматического запуска. Предварительно необходимо заполнить настройки:
1. Путь к ImageMagick
2. Папку, откуда брать сканы.
3. Папку, куда складывать успешно обработанные сканы
Т.к. в обработке используется подключение внешней компоненты, необходимо для пользователя, от имени которого будет запускаться задание, снять флаг «Защита от опасных действий».
Тестировалось на площадке:
Конфигурация 1С:ERP Управление предприятием 2 (2.4.9.98)
Платформа 1С:Предприятие 8.3 (8.3.14.1779)
Скачать файлы
Специальные предложения
Обновление 11.10.19 10:50
См. также
Удаление и/или копирование сохраненных в 1С настроек (например настроек печати табличных форм) Промо
Иногда нужно удалить сохраненную в 1С «покореженную» настройку или скопировать «удачную» другому пользователю.
01.09.2012 65537 1375 AnryMc 46
Работа с картами в 1С на примере бесплатной библиотеки Leaflet
Разработка функционала отображения и выбора пунктов доставки на карте прямо в 1С с помощью бесплатной библиотеки Leaflet. Тестирование производилось на платформе 8.3.15.1534 на тонком клиенте.
31.03.2021 8708 23 Parsec1C 11
Универсальная обработка переноса данных из основной конфигурации в расширение
Обработка предназначена для разработчиков, для тех случаев, когда ранее дописанный функционал, перенесен в расширение и появляется необходимость перенести данные из объектов основной конфигурации в объекты расширения. Перенос осуществляется настройкой соответствия объектов основной конфигурации объектам расширения.
05.10.2020 9208 60 biz-intel 66
Улучшенная обработка универсального обмена данными в формате XML (УФ)
Улучшенная обработка «Универсальный обмен данными» с полноценными возможностями СКД для выборки данных (не только для отборов).
23.06.2020 11699 130 Lem0n 1
Групповая корректировка записей регистров (Управляемое приложение) v 2.1 Промо
Обработка предназначена для групповой корректировки записей регистров Накопления, Сведений и Бухгалтерии. Разработана специально для Управляемого приложения.
06.09.2013 67581 305 kser87 56
Панель #Расширение объекта: Редактор, Права, Поиск, Сторно, Обмен
Панель команд текущего объекта (документа, справочника и т.д.) со следующим возможностями: Редактор реквизитов, таблиц и движений текущего объекта, Анализ прав доступа к текущему объекту, Поиск ссылок на объект с отборами, Сторно движений документа, Выгрузка/загрузка текущего объекта между базами. Реализована всплывающей панелью в форме объекта. Подключается как расширение конфигурации (*.cfe) либо отдельными обработками.
01.05.2020 14390 109 sapervodichka 1
Работа с файлами (обычная и управляемая форма)
Нужно загрузить файл с клиента на сервер или же, наоборот, файл загрузить с сервера на клиент, а впридачу все это на web-клиенте, да еще и асинхронно? Нет ничего проще, читай далее, как это сделать!
10.06.2019 39266 215 Xershi 77
Электронная таблица средствами 1С (Версия 2.0)
Функционал электронной таблицы для программ на платформе 1С реализован на основе табличных документов. Функционал реализован в виде обработки. Большую часть формы обработки занимают листы (закладки) с табличными документами, которые выполняет роль электронной таблицы. Листы могут быть добавлены, удалены или переименованы. Ограничение по количеству листов определяется возможностью платформы. В формулах электронной таблицы можно использовать любые языковые конструкции, процедуры и функции 1С, ссылки на другие ячейки электронной таблицы расположенные в том числе и на других листах. Допустимо обращаться к ячейкам электронной таблицы по имени именованной области. В случае использования в формулах электронной таблицы данных из самой таблицы пересчет зависимых ячеек с формулами производится автоматически. Электронную таблицу можно сохранить в файл.
23.04.2019 22769 76 user706545_kseg1971 40
Установка предопределенных элементов: просмотр, исправление и поиск ошибок (задвоенных и отсутствующих) Промо
Простая обработка для просмотра и установки значений предопределенных элементов. Позволяет заменить значение предопределенного элемента с одного элемента справочника на другой, удалить предопределенный элемент (снять пометку предопределенности), установить пометку переопределенного элемента. Проверяет предопределенные данные на наличие задвоений и отсутствующих. Работает со справочниками, планами счетов, планами видов характеристик, планами видов расчетов.
06.10.2014 167830 2741 ekaruk 169
Удобная консоль регламентных и фоновых заданий
Аналог обработки БСП «РегламентныеИФоновыеЗадания». Не требует наличия библиотек, может использоваться в качестве внешней обработки. В отличие от обработки БСП предоставляет больше информации о свойствах регламентных и фоновых заданий, а также об ошибках и сообщениях для пользователей, возникших во время их выполнения. Позволяет управлять регламентными (создание, удаление, настройка расписания, ручной запуск) и фоновыми (прерывание) заданиями.
06.02.2019 21084 204 Alxby 20
Редактор объектов информационной базы 8.3
Универсальная внешняя обработка для редактирования реквизитов и табличных частей объектов информационной базы, редактирование движений документов. Доступ ко всем реквизитам объектов, есть возможность выгрузки и загрузки данных (объекты и движения документов) через XML. Платформа 8.3, управляемые формы. Версия 1.1.0.55 от 24.06.2021
23.01.2019 41458 454 ROL32 50
Сравнение pdf-файлов актов сверки
Обработка сравнивает два pdf-файла, в которых находятся стандартные печатные формы актов сверки, и показывает на экране совпадающие и/или отличающиеся по суммам документы взаиморасчетов.
19.12.2018 22659 18 Torin99 2
Навигатор по конфигурации базы 1С 8.3 Промо
Универсальная внешняя обработка для просмотра метаданных конфигураций баз 1С 8.3. Отображает свойства и реквизиты объектов конфигурации, их количество, основные права доступа и т.д. Отображаемые характеристики объектов: свойства, реквизиты, стандартные рекизиты, реквизиты табличных частей, предопределенные данные, регистраторы для регистров, движения для документов, команды, чужие команды, подписки на события, подсистемы. Отображает структуру хранения объектов базы данных, для регистров доступен сервис «Управление итогами». Платформа 8.3, управляемые формы. Версия 1.1.0.83 от 24.06.2021
28.10.2018 43990 388 ROL32 72
Коды step-by-step: читаем / кодируем PDF417
Вы ведь любите коды? Ну или не любите. В любом случае, иногда нужно знать, как правильно ими пользоваться. Можно пойти длинным путём, как это сделал я в прошлый раз, но когда времени нет, проще воспользоваться инструкцией.
Итак, давайте разберёмся со всем необходимым для чтения и / или записи PDF417. Ведь не всегда под рукой найдётся смартфон с программой для их чтения. А для записи — и подавно.
Внимание, под катом — 9 изображений общим размером в 2.79 МБ, 6 таблиц и немного формул.
Оглавление
01. История PDF417 и право использования
PDF417 придумали в компании Symbol Technologies Inc. в 1991 году, а 7 сентября 1993 года на него был выдан патент США под номером 5 243 655 (доступен, к примеру, здесь). На самом деле, патент описывает не просто метод кодирования, а комплексную систему для кодирования и декодирования информации («System for encoding and decoding data in machine readable graphic form»). Кроме того, не все из рекомендаций в патенте используются на данный момент.
Сразу стоит отметить, что использовать PDF417 можно свободно, без лицензирования или правовых ограничений.
Единственный подводный камень: если вы хотите точно соответствовать стандарту ISO/IEC 15438:2015, описывающему PDF417, — доступ к нему стоит 198 CHF (швейцарских франков). Именно он описывает все необходимые словари и прочее, однако большую часть информации можно легко найти в интернете. Патент, упомянутый выше, этой информации не содержит.
02. Графическое представление и структура
Каждый символ (код) PDF417 (Рис. 1) — это набор строк информации, представленной в виде штрихового кода. Каждая строка состоит из стартового паттерна, набора ключевых слов (два из которых называются левым и правым индикаторами и помогают в автоматизированном декодировании) и стоп паттерна. Слова из разных строк формируют колонки (столбцы).
Как количество строк, так и количество столбцов может варьироваться. Символ PDF417 может состоять из минимум 3 и максимум 90 строк, а также от 3 до 30 столбцов включительно.
Рис. 1. Структура PDF417 символа
Каждое слово состоит из 17 модулей (минимальных элементов), которые образуют чередующуюся последовательность из 4 заполненных и 4 пустых групп. Одна группа может быть длиной от 1 до 6 модулей.
Каждое слово представляют в виде уникальной последовательности (
). Все возможные слова делятся на 3 взаимоисключающие группы (кластера), то есть в каждом кластере содержаться одни и те же «значения», представленные разными «словами». Кроме того, слова могут быть представлены в виде
последовательности, где каждое значение
. Это также помогает избежать ошибок при сканировании кодов.
Каждая строка PDF417 символа использует только один из кластеров последовательно. Таким образом, если один из кластеров используется строками , то второй — строками
, а третий — строками
. Это нужно для правильного определения строки при автоматическом сканировании (Рис. 2), поскольку соседние строки не могут содержать слова одной группы.
Номер кластера однозначно определяется из или
последовательности по одной из формул:
,
,
где — остаток от деления на 9.
На самом деле, можно было бы использовать не 3 разных кластера, а все 9 возможных, но это увеличило бы вероятность дополнительных ошибок. Номер кластера можно определить также из номера строки: .
Всего PDF417 использует 929 слов (от 000 до 928 ).
03. Компоненты символа
Рис. 2. Компоненты символа PDF417
04. Режимы
Как уже было сказано, коды PDF417 содержат слова от 000 до 928 в виде трёх разных кластеров. Таким образом, в коде может встретиться всего 2 787 разных слов.
Слова от 000 до 899 включительно используются для записи полезной информации в одном из возможных режимов кодирования.
## | Функция | Описание |
---|---|---|
900 | Текстовый режим (TC) | |
901 | Байт-режим (BC) | |
902 | Числовой режим (NC) | |
903: 912 | Зарезервировано | Используются для пользовательских надстроек |
913 | Байт-режим | Только для следующего слова |
914: 920 | Зарезервировано | Используются для пользовательских надстроек |
921 | Инициализация | Слова далее будут интерпретированы для инициализации или программирования сканера |
922 | PDF macro | Конец блока |
923 | PDF macro | Опциональное поле |
924 | Байт-режим | Если количество байтов кратно 6 |
925 | ECI / GLI | Определяется пользователем |
926 | ECI / GLI | Общие наборы символов |
927 | ECI / GLI | Международные наборы символов |
928 | PDF macro | Начало блока |
Табл. 1. Сервисные слова PDF417. Выделены те, которые будут нам интересны
PDF macro позволяет разбить длинное сообщение на несколько PDF417 символов. При этом каждый символ содержит идентификатор сообщения, порядковый номер блока сообщения (для восстановления правильной последовательности) и другую информацию.
ECI / GLI — Extended Channel Interpretation / Global Label Identifier — система надстроек, которая позволяет кодировать нестандартные символы с помощью штриховых кодов. Так, возможно подключить один из международных наборов символов (к примеру, стандартным является GLI 0, именно эти таблицы приведены далее), наборов общего назначения либо ваших персональных наборов символов.
04.a) Текстовый режим (TC, Text Compaction Mode)
Этот режим стандартный для символов PDF417 (то есть именно с него начинается весь символ). У текстового режима есть 4 разных подгруппы:
## | Alpha Символ (ASCII) | Lower case Символ (ASCII) | Mixed Символ (ASCII) | Punctuation Символ (ASCII) |
---|---|---|---|---|
0 | A (65) | a (97) | 0 (48) | ; (59) |
1 | B (66) | b (98) | 1 (49) | (62) |
3 | D (68) | d (100) | 3 (51) | @ (64) |
4 | E (69) | e (101) | 4 (52) | [ (91) |
5 | F (70) | f (102) | 5 (53) | \ (92) |
6 | G (71) | g (103) | 6 (54) | ] (93) |
7 | H (72) | h (104) | 7 (55) | _ (95) |
8 | I (73) | i (105) | 8 (56) | ` (96) |
9 | J (74) | j (106) | 9 (57) | |
10 | K (75) | k (107) | & (38) | ! (33) |
11 | L (76) | l (108) | CR (13) | CR (13) |
12 | M (77) | m (109) | HT (9) | HT (9) |
13 | N (78) | n (110) | , (44) | , (44) |
14 | O (79) | o (111) | : (58) | : (58) |
15 | P (80) | p (112) | # (35) | LF (10) |
16 | Q (81) | q (113) | — (45) | — (45) |
17 | R (82) | r (114) | . (46) | . (46) |
18 | S (83) | s (115) | $ (36) | $ (36) |
19 | T (84) | t (116) | / (47) | / (47) |
20 | U (85) | u (117) | + (43) | » (34) |
21 | V (86) | v (118) | % (37) | | (124) |
22 | W (87) | w (119) | * (42) | * (42) |
23 | X (88) | x (120) | = (61) | ( (40) |
24 | Y (89) | y (121) | ^ (94) | ) (41) |
25 | Z (90) | z (122) | pl | ? (63) |
26 | SP (32) | SP (32) | SP (32) | < (123) |
27 | ll | as | ll | > (125) |
28 | ml | ml | al | ‘ (39) |
29 | ps | ps | ps | al |
Табл. 2. Подгруппы текстового режима в стандартной интерпретации GLI 0
Одно слово в базисе 900 содержит 2 символа из таблицы выше по правилу:
,
Где — значение в базисе 900,
— первый символ,
— второй. Иногда символы указывают как
и
соответственно.
Если данные заканчиваются словом, в которое нужно включить только один символ, то он является -значением, а в качестве
-значения используется значение 29.
Использование ещё одного перехода после shift-перехода запрещено. Ограничений на использование переходов после latch-перехода нет.
04.b) Байт-режим (BC, Byte Compaction Mode)
Данный режим позволяет записывать последовательность байтов с помощью последовательности кодовых слов в базисе 900. Для этого нужно совершить переход от базиса 256. Этот режим включается двумя разными сервисными словами:
Рис. 3. Кодирование, байт-режим
Тогда код должен содержать следующую последовательность слов:
04.c) Числовой режим (NC, Numeric Compaction Mode)
Числовой режим позволяет записать данные с помощью перехода из базиса с основой 10 в базис с основой 900. Соответственно, такой режим поддерживает запись цифр от 0 до 9. В результате, каждые 44 цифры можно записать в виде 15 слов.
Для перехода в базис 900 нужно дописать 1 к числу слева, а дальше выполнить переход как показано на Рис. 4. Обратный переход вполне очевидный, остаётся лишь убрать лишнюю 1 слева.
Рис. 4. Кодирование и декодирование, числовой режим
05. Коррекция ошибок
Давайте начнём с самого простого. В любом символе PDF417 присутствует как минимум 2 слова в области ответственной за коррекцию ошибок. Кроме того, коды характеризуются уровнем коррекции ошибок, для которых нужно разное количество дополнительных символов (Табл. 3).
Уровень | Количество дополнительных слов как это указывается (как это описано в патенте) |
---|---|
0 | 2 (0) |
1 | 4 (2) |
2 | 8 (6) |
3 | 16 (14) |
4 | 32 (30) |
5 | 64 (62) |
6 | 128 (126) |
7 | 256 (254) |
8 | 512 (510) |
Табл. 3. Уровни коррекции ошибок в PDF417
Различают два вида ошибок:
Введём следующие параметры:
количество систематических ошибок;
количество случайных ошибок;
уровень коррекции;
количество слов для коррекции ошибок.
Тогда выполняется следующее условие:
2 слова, которые присутствуют в символе в любом случае, используются для проверки, не возникла ли случайная ошибка при распознавании.
Вводится также понятие Error Correction Capacity, которое показывает, сколько же ошибок обоих видов мы можем исправить. Очевидно, что если все дополнительные слова используются для исправления систематических ошибок, то шанс случайной возрастает. Потому для всех уровней, кроме , считается, что:
.
Именно потому в патенте количество слов для коррекции ошибок на 2 меньше, чем его часто указывают сейчас. Эти 2 слова правильно называть контрольной суммой.
К примеру, с уровнем коррекции , можно исправить 13 систематических ошибок, либо 7 случайных, либо их комбинацию, которая всё ещё соответствует неравенству (9 систематических И 2 случайных и т.д.).
Для коррекции ошибок используются коды Рида-Соломона в поле Галуа . На данный момент я не буду на них останавливаться.
Существуют также рекомендации относительно минимального уровня коррекции ошибок (Табл. 4).
Количество слов-данных | Уровень коррекции ошибок |
---|---|
0: 40 | 2 |
41: 160 | 3 |
161: 320 | 4 |
321: 863 | 5 |
Табл. 4. Минимальный рекомендуемый уровень коррекции ошибок
06. Обязательные неинформационные слова
Как упоминалось раньше (Раздел 03), первое слово каждого кода означает длину полезных данных в символе PDF417.
Кроме того, каждый код содержит левые и правые индикаторы, которые помогают в распознавании символа. Как и обычные слова, они используют разные кластеры словаря, а кроме того, циклически содержат информацию о количестве строк в коде, количестве столбцов, а также уровне коррекции ошибок (Рис. 5).
Рис. 5. Правила записи левых и правых индикаторов
07. Словари
Как упоминалось ранее (Раздел 02), словарь PDF417 состоит из 3 кластеров (0, 3 и 6) по 929 слов. Периодически их представляют в виде 17-битного числа, но я считаю такой вариант неудобным в сравнении с x-последовательностью. В любом случае, вы вольны решать, как вам удобнее, а потому выше приведены ссылки на оба варианта записи, а начало словарей приведено в Табл. 5.
## | Кластер 0 | Кластер 3 | Кластер 6 |
---|---|---|---|
0 | 31111136 | 51111125 | 21111155 |
1 | 41111144 | 61111133 | 31111163 |
2 | 51111152 | 41111216 | 11111246 |
3 | 31111235 | 51111224 | 21111254 |
4 | 41111243 | 61111232 | 31111262 |
5 | 51111251 | 41111315 | 11111345 |
6 | 21111326 | 51111323 | 21111353 |
7 | 31111334 | 61111331 | 31111361 |
8 | 21111425 | 41111414 | 11111444 |
9 | 11111516 | 51111422 | 21111452 |
10 | 21111524 | 41111513 | 11111543 |
11 | 11111615 | 51111521 | 61112114 |
12 | 21112136 | 41111612 | 11112155 |
13 | 31112144 | 41112125 | 21112163 |
14 | 41112152 | 51112133 | 61112213 |
15 | 21112235 | 61112141 | 11112254 |
16 | 31112243 | 31112216 | 21112262 |
17 | 41112251 | 41112224 | 61112312 |
18 | 11112326 | 51112232 | 11112353 |
19 | 21112334 | 31112315 | 21112361 |
20 |
Табл. 5. Первые 20 слов словаря в виде x-последовательностей
08. Стандартная 8-битная таблица символов
GLI 0
В качестве стандартной таблицы символов используется ASCII таблица для символов 0:127. Символы 128:255 представлены расширенным набором PC 437.
## | Символ | ## | Символ | ## | Символ | ## | Символ | ## | Символ | ## | Символ | ## | Символ | ## | Символ |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | NUL | 32 | SP | 64 | @ | 96 | ` | 128 | Ç | 160 | á | 192 | └ | 224 | α |
1 | SOH | 33 | ! | 65 | A | 97 | a | 129 | ü | 161 | í | 193 | ┴ | 225 | ß |
2 | STX | 34 | « | 66 | B | 98 | b | 130 | é | 162 | ó | 194 | ┬ | 226 | Γ |
3 | ETX | 35 | # | 67 | C | 99 | c | 131 | â | 163 | ú | 195 | ├ | 227 | π |
4 | EOT | 36 | $ | 68 | D | 100 | d | 132 | ä | 164 | ñ | 196 | ─ | 228 | Σ |
5 | ENQ | 37 | % | 69 | E | 101 | e | 133 | à | 165 | Ñ | 197 | ┼ | 229 | σ |
6 | ACK | 38 | & | 70 | F | 102 | f | 134 | å | 166 | ª | 198 | ╞ | 230 | µ |
7 | BEL | 39 | ‘ | 71 | G | 103 | g | 135 | ç | 167 | º | 199 | ╟ | 231 | τ |
8 | BS | 40 | ( | 72 | H | 104 | h | 136 | ê | 168 | ¿ | 200 | ╚ | 232 | Φ |
9 | HT | 41 | ) | 73 | I | 105 | i | 137 | ë | 169 | ⌐ | 201 | ╔ | 233 | Θ |
10 | LF | 42 | * | 74 | J | 106 | j | 138 | è | 170 | ¬ | 202 | ╩ | 234 | Ω |
11 | VT | 43 | + | 75 | K | 107 | k | 139 | ï | 171 | ½ | 203 | ╦ | 235 | δ |
12 | FF | 44 | , | 76 | L | 108 | l | 140 | î | 172 | ¼ | 204 | ╠ | 236 | ∞ |
13 | CR | 45 | — | 77 | M | 109 | m | 141 | ì | 173 | ¡ | 205 | ═ | 237 | φ |
14 | SO | 46 | . | 78 | N | 110 | n | 142 | Ä | 174 | « | 206 | ╬ | 238 | ε |
15 | SI | 47 | / | 79 | O | 111 | o | 143 | Å | 175 | » | 207 | ╧ | 239 | ∩ |
16 | DLE | 48 | 0 | 80 | P | 112 | p | 144 | É | 176 | ░ | 208 | ╨ | 240 | ≡ |
17 | DC1 | 49 | 1 | 81 | Q | 113 | q | 145 | æ | 177 | ▒ | 209 | ╤ | 241 | ± |
18 | DC2 | 50 | 2 | 82 | R | 114 | r | 146 | Æ | 178 | ▓ | 210 | ╥ | 242 | ≥ |
19 | DC3 | 51 | 3 | 83 | S | 115 | s | 147 | ô | 179 | │ | 211 | ╙ | 243 | ≤ |
20 | DC4 | 52 | 4 | 84 | T | 116 | t | 148 | ö | 180 | ┤ | 212 | ╘ | 244 | ⌠ |
21 | NAK | 53 | 5 | 85 | U | 117 | u | 149 | ò | 181 | ╡ | 213 | ╒ | 245 | ⌡ |
22 | SYN | 54 | 6 | 86 | V | 118 | v | 150 | û | 182 | ╢ | 214 | ╓ | 246 | ÷ |
23 | ETB | 55 | 7 | 87 | W | 119 | w | 151 | ù | 183 | ╖ | 215 | ╫ | 247 | ≈ |
24 | CAN | 56 | 8 | 88 | X | 120 | x | 152 | ÿ | 184 | ╕ | 216 | ╪ | 248 | ° |
25 | EM | 57 | 9 | 89 | Y | 121 | y | 153 | Ö | 185 | ╣ | 217 | ┘ | 249 | ∙ |
26 | SUB | 58 | : | 90 | Z | 122 | z | 154 | Ü | 186 | ║ | 218 | ┌ | 250 | · |
27 | ESC | 59 | ; | 91 | [ | 123 | < | 155 | ¢ | 187 | ╗ | 219 | █ | 251 | √ |
28 | FS | 60 | 94 | ^ | 126 | 158 | ₧ | 190 | ╛ | 222 | ▐ | 254 | ■ | ||
31 | US | 63 | ? | 95 | _ | 127 | DEL | 159 | ƒ | 191 | ┐ | 223 | ▀ | 255 | NBSP |
Табл. 6. Таблица GLI 0, которая используется кодами PDF417
GLI 1
Следующий набор символов соответствует стандарту ISO 8859-1 (Википедия).
09. Определяем код как PDF417, выравниваем и находим минимальный элемент
Пришло время прочитать наш первый PDF417 символ.
Хотя этот шаг кажется совсем необязательным, стоит помнить, что PDF417 характеризуется уникальными старт- и стоп-паттернами, которые представлены x-последовательностями 81111113 и 711311121 (18 модулей) соответственно.
Кроме того, поскольку эти паттерны одинаковы в каждой строке их легко использовать для выравнивания PDF417 символа (Рис. 6). Хотя это и более актуальная задача при автоматическом сканировании, читать код необходимо перпендикулярно к старт- и стоп-паттернам.
Рис. 6. Шаг 0 при чтении PDF417
10. Считаем и сопоставляем со словарями
На необходимо определить количество информационных слов. Оно содержится в первом слове кода (строка 0, слово 0). К примеру, в нашем случае это значение равно 19 (Рис. 7). Кроме того, стоит проверить уровень коррекции ошибок, который можно узнать с помощью левых или правый индикаторов (не забываем, нужно выбрать правильную строку, Раздел 06). В результате, у нас должно быть 1 слово-длина, 18 слов-данных и 8 проверочных слов, то есть 27, что соответствует действительности.
Теперь разобьём код на строки. Это поможет ускорить чтение, поскольку необходимо использовать разные кластеры словаря.
Рис. 7. Узнаём длину данных, характеристики кода
11. Переводим PDF417 в текстовый вид и проверяем режимы кодирования
Итак, каждому слову необходимо сопоставить одно из значений от 000 до 928 (Рис. 8). В результате, получаем последовательность чисел, с которой далее будет удобно работать.
Рис. 8. Переводим символ в текстовое представление
12. Переводим в привычный нам вид
Поскольку мы знаем, что используется только текстовый режим, каждое слово можно расшифровать как 2 символа по формуле:
То есть чтобы определить необходимо выполнить целочисленное деление на 30, а для
— взять остаток от деления на 30.
Тогда всё сообщение можно записать как:
(27)(07) (19)(19) (15)(18) (28)(14) (19)(19) (28)(07) (27)(00) (01)(17) (29)(17) (02)(14) (12)(29) (19)(15) (14)(18) (19)(28) (19)(05) (00)(00) (09)(06) (02)(29)
Что в стандартном виде будет выглядеть как:
Итак, код скрывает ссылку на данную публикацию. С помощью дополнительных 8 символов можно проверить наличие ошибок в результатах (Раздел 05).
13. Особенности автоматизированного чтения
Автоматическое сканирование часто производится дважды — слева направо и наоборот. Это позволяет минимизировать количество ошибок.
Как и в случае ручного чтения, при автоматическом нужно выполнить поиск и выравнивание символа. Поскольку в жизни редко можно выровнять код и сканер идеально, необходимо чтобы линия сканирования не проходила через более чем 3 разные строки. В таком случае всегда можно будет определить, какие слова принадлежат какой строке (поскольку они находятся в разных кластерах).
Ещё один пункт, важный для неидеальных условий — чтение не последовательности, а
последовательности (Раздел 02). Поскольку PDF417 рассчитаны в том числе на печать на физических носителях, возможно размытие чернил (и т.д.), которое может привести к тому, что заполненные группы модулей станут шире, а пустые — уже. Проводя сканирование от края до такого же края, такие ошибки можно минимизировать.
Следующим шагом является определение уровня коррекции ошибок и построение матрицы слов. Кроме того, строится ещё одна матрица, которая состоит из весов (уровня доверия каждому значению). Слова с низким уровнем доверия в последствии проверяются на ошибки первыми.
14. Минимизация кода
Поскольку одну и ту же информацию можно записать различными способами в разных режимах, есть список рекомендаций, которые позволяют уменьшить количество информационных слов.
15. Размеры, пропорции и чистые зоны
Несмотря на то, что строгих ограничений на размер символа PDF417 нет, есть рекомендации касательно пропорций одного модуля. Так, желательно сохранять соотношение высоты к ширине примитивного элемента не менее (если вы соблюдаете минимальный рекомендуемый уровень коррекции ошибок, Табл. 4). Если рекомендации не соблюдаются, соотношение должно быть не менее
.
Кроме того, вокруг PDF417 необходимо оставлять «чистую зону», размером не менее 2 ширин модуля.
Посчитать размер символа можно с помощью следующих формул:
где
— высота;
— ширина;
— количество строк;
— количество столбцов;
— высота модуля (строки);
— ширина модуля;
— размер чистой зоны (минимум
).
16. Компактный (усечённый) PDF417
В случае использования PDF417 в «чистой» среде (символ не может быть случайно повреждён и чистые зоны вокруг символа достаточно велики), можно использовать усечённый режим PDF417 (Truncated PDF417, Рис. 9).
Он работает следующим образом:
В результате ширина символа сокращается на 34 модуля и формула из Раздела 15 может быть переписана:
Рис. 9. Усечённый PDF417 (содержит ту же информацию, что и рассмотренный ранее код)
Стоит помнить, что у такого метода кодирования есть и недостатки:
17. Полезные ссылки
Описание PDF417
Упоминалось
Кроме того
18. Послесловие
Итак, мы рассмотрели принципы кодирования и чтения информации в виде символов PDF417. Эти коды достаточно удобны для записи длинных сообщений в разных форматах (текстовый, числовой, байтовый) и их комбинациях, а также позволяют использовать коррекцию ошибок.
Возможно, вам будут также интересны другие статьи цикла Коды step by step:
Не забывайте, всегда лучше знать, как что-то работает. Вдруг, оно работает неправильно.