Генератор кода PDF417
PDF417 — не матричный код, хотя его и называют двумерным. Это короткий линейный штрих-код, сложенный в стопку: каждая строка читается лучом так же, как обычный штрих-код на упаковке, а по краям строки стоят указатели её номера, чтобы декодер собрал прочитанное в правильном порядке. Имя описывает кирпичик: одно кодовое слово — это четыре штриха и четыре пробела на семнадцати модулях, отсюда 4 и 17. Из этого устройства следует и область применения: PDF417 берёт лазерный сканер, у которого нет камеры вообще, и потому он живёт в документах.
Оформление
321 × 182 px в PNG
Спецификация
- Набор символов
- любые данные
- Длина
- от 1 до 1850 символов
- Контрольная цифра
- в этой символике не используется
Сгенерировать PDF417 списком
Кодов нужно много, а не один? Сгенерировать PDF417 списком
Где применяется
- Машиночитаемые формы отчётности: полосы внизу каждого листа декларации, по которым принимающая сторона считывает данные, а не набирает их с листа
- Транспортные и складские документы — накладные, путевые листы, описи, — где сканируется лист бумаги, а не товар на полке
- Пропуска, талоны и бланки заявлений, которые печатают, выдают на руки, а потом читают на входе или на приёмке
- Удостоверения и карточки, где машиночитаемый блок на обороте дублирует то, что напечатано на лицевой стороне
Чем отличается
Data Matrix и QR — матричные символики: данные лежат в двумерной сетке, и прочитать такую сетку можно только устройством, которое захватывает всю площадь целиком, то есть камерой. PDF417 устроен иначе, и разница здесь не теоретическая: растровый лазерный сканер, видящий за раз одну линию, читает PDF417 и не читает матричный код ни при каких настройках. Этим и объясняется, где какой формат осел. Стандарты на документы, удостоверения и билеты писались под парки сканирующей техники, где камер не было, а парки живут дольше любого отдельного сканера. Вторая причина — форма. PDF417 вытянутый, он ложится полосой в подвал листа или вдоль края карточки, где квадрат той же ёмкости пришлось бы вписывать в макет, отбирая место у текста. Платит он за это шириной: каждая строка тратит четыре кодовых слова на служебную часть — стартовый шаблон, указатели строки слева и справа, стоповый шаблон, — так что при двух столбцах данных строка выходит 103 модуля, из которых полезных 34. На коротких данных это расточительно, и там уместнее Data Matrix; на телефонной аудитории — QR. PDF417 выбирают, когда на приёмной стороне сканируют документы или когда формат содержимого уже задан стандартом, в котором эта символика прямо названа.
Типичные ошибки
- Кириллица, положенная в код без оглядки на режим упаковки. У PDF417 три способа паковать данные в кодовые слова: текстовый берёт два знака на слово, числовой — почти три цифры, байтовый — всего 1,2 байта. Латиница идёт текстовым режимом, кириллица в него не помещается и уходит в байтовый, по два байта на букву. Разница видна на глаз: двести латинских букв дают шесть столбцов данных и двадцать строк, те же двести букв по-русски — двенадцать столбцов и тридцать четыре строки, то есть примерно в три с половиной раза больше кодовых слов при том же числе знаков. Если содержимое можно оставить латиницей или цифрами, оставьте.
- Скрепка, штамп и подпись поверх кода. Вокруг символа положено оставить по два модуля зоны молчания со всех четырёх сторон — вдвое меньше четырёх модулей, которых требует QR, и поэтому в вёрстке документа эта полоска выглядит просто пустым местом внизу листа. Туда и попадает угол степлера, оттиск входящего штампа или размашистая подпись. Стартовый и стоповый шаблоны стоят вплотную к этой границе, и лучу они говорят, что строка пройдена целиком; закрыв их, вы получаете не отказ чтения, а обрывок строки, который иногда декодируется.
- Правка документа после того, как код на нём напечатан. В машиночитаемой форме код и текст — два представления одних и тех же данных, и принимающая сторона берёт код. Исправили сумму ручкой, перепечатали одну строку, дописали позицию в накладной — и дальше в учёт уходит то, что было напечатано изначально, а глазами все читают исправленное. Расхождение всплывает не сразу и разбирается тяжело. Правится документ целиком, вместе с кодом, а не поверх.
- Пересохранение листа картинкой с потерями. Документ вставили в текстовый редактор скриншотом, отправили в JPEG, распечатали с фотографии на телефоне — на каждом переделе границы штрихов размываются. У PDF417 это бьёт по строкам: слипаются не отдельные штрихи, а соседние ряды, и декодер теряет указатели строк раньше, чем сами данные. Документ с кодом передают исходным файлом или скан-копией без сжатия с потерями.
Вопросы и ответы
- Чем PDF417 отличается от QR-кода?
- Устройством и, как следствие, областью применения. QR — матрица, которую читает камера по трём угловым квадратам; PDF417 — стопка линейных строк, которую берёт и камера, и обычный лазерный сканер. Поэтому QR стоит везде, где сканирует человек телефоном, а PDF417 — там, где документ проходит через технику принимающей стороны. Есть и разница в форме: QR квадратный, PDF417 вытянутый в полосу, и на листе бумаги полоса вписывается туда, куда квадрат той же ёмкости не поместился бы без перекройки макета.
- Сколько данных влезает в PDF417?
- Потолок формата — 1850 знаков текста, 2710 цифр или 1108 байт; это поле принимает до 1850 символов. Три разные цифры получаются из трёх режимов упаковки: текстовый кладёт два знака в кодовое слово, числовой — почти три цифры, байтовый — 1,2 байта. Отсюда практическое следствие: цифры в PDF417 экономичнее всего, латинский текст вдвое дороже, а всё остальное, включая кириллицу, идёт байтами и расходует ёмкость быстрее всего.
- Почему при большом объёме данных код превращается в полосатую кашу?
- Потому что высота символа здесь не растёт вместе с данными. Генератор рисует его одной и той же высоты, а строк внутри становится больше, и каждая строка выходит ниже. На образце это девять строк высотой примерно в шесть модулей — нормально. На двухстах знаках уже двадцать строк по 2,8 модуля, а это ниже трёх модулей, на которые формат рассчитан. На предельных 1850 знаках получается 52 строки и 18 столбцов данных, и высота строки становится примерно равна ширине модуля — картинка штрих-кода, а не штрих-код. Лечится двумя способами: сократить данные или растянуть вставленный в макет файл по высоте, благо это вектор и пропорции задаёте вы.
- Годится ли этот генератор для машиночитаемой формы отчётности?
- Нарисовать по готовой строке — да. Составить строку — нет: её формирует программа подготовки отчётности по формату, который утверждает принимающая сторона, и в нём важны и порядок полей, и служебные признаки, и версия самого формата. Генератор здесь работает средством печати. Если строки на руках нет, брать её надо в той программе, в которой формируется сам отчёт.
- Надо ли где-то регистрироваться ради PDF417?
- Нет. В отличие от EAN, ITF-14 и других символик товарной нумерации, здесь никто не выдаёт префиксов и не ведёт реестра: PDF417 — способ записи произвольных данных, и содержимое кода принадлежит вам. Ограничение приходит с другой стороны: если код читает чужая система, то состав и порядок данных внутри задаёт она, и согласовывать нужно не символику, а формат строки.