Как в 1С распознать штрихкоды из PDF-файла?

Программист 1С v8.3 (Управляемые формы) Торговля и дистрибуция
← На главную

Задача считывания штрихкодов из PDF-файлов — нетривиальная, но вполне решаемая. Часто она возникает при работе с документами от поставщиков, файлами из системы "Честный ЗНАК" или при потоковой обработке сканированных документов. Рассмотрим основные подходы и инструменты, которые помогут автоматизировать этот процесс в среде 1С.

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

Шаг 1. Понимание структуры PDF и извлечение изображения

Прежде чем что-то распознать, нужно это "что-то" получить в виде, понятном для распознающих библиотек. Большинство из них работают с растровыми изображениями (PNG, JPEG, BMP), а не с PDF-документами напрямую.

Важный момент: штрихкод в PDF не всегда является простой картинкой. Возможны два варианта:

  1. Растровое изображение. Штрихкод вставлен в документ как обычная картинка. Это самый простой случай.
  2. Векторная графика. Штрихкод, особенно DataMatrix из системы "Честный ЗНАК", может быть сгенерирован с помощью команд языка описания страниц (например, PostScript). Он состоит из множества мелких графических примитивов (квадратиков), а не из единого изображения.

В обоих случаях надежный способ — это рендеринг (преобразование) всей страницы или ее части из PDF в графический файл. Для этого можно использовать внешние утилиты, вызываемые из 1С:

При конвертации крайне важно задать достаточно высокое разрешение (DPI), например, 300 DPI или выше. От качества полученного изображения напрямую зависит успех распознавания.

Шаг 2. Предобработка изображения (опционально, но часто необходимо)

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

Для этого можно использовать библиотеки компьютерного зрения, такие как OpenCV, или тот же ImageMagick. Основные операции предобработки:

Современный подход — использование нейронных сетей (ИИ) для интеллектуальной предобработки и автоматического подбора нужных фильтров для улучшения качества картинки.

Шаг 3. Выбор инструмента для распознавания штрихкода

Это ключевой этап, на котором обработанное изображение передается в специализированный инструмент. Рассмотрим несколько вариантов.

Решение 1: Готовые облачные сервисы и сервисы 1С

Это наиболее простой в интеграции путь, который не требует развертывания собственного ПО, но может быть платным и требует доступа в интернет.

1С:Распознавание документов: Встроенный сервис от фирмы "1С", предназначенный для обработки различных документов. Он умеет извлекать данные по заранее настроенным шаблонам и способен распознавать штрихкоды. Это самый нативный для 1С вариант.

Сторонние API:

Принцип работы: вы отправляете изображение (или PDF) через HTTPЗапрос и получаете в ответ JSON со распознанными данными. Это удобно и не требует разработки внешних компонент.

Решение 2: Использование библиотек с открытым исходным кодом

Этот путь дает больше контроля, не зависит от интернета и чаще всего бесплатен. Однако он требует больше технических навыков для интеграции с 1С, так как напрямую эти библиотеки из 1С не вызвать.

Популярные библиотеки:

Как это интегрировать с 1С?

  1. Написать внешнюю компоненту (Native API): вы можете создать DLL на C++ или C#, которая будет использовать одну из этих библиотек (например, ZXing.net) и предоставлять простые методы для вызова из 1С.
  2. Использовать скрипты: можно написать небольшой скрипт на Python, который принимает путь к файлу изображения, распознает штрихкод с помощью Pyzbar и выводит результат в консоль. Из 1С этот скрипт можно запустить командой ЗапуститьПриложение() и прочитать его вывод.
  3. Создать локальный веб-сервис: поднять на том же или соседнем сервере простой веб-сервис (например, на Go с библиотекой gozxing), который будет принимать картинки по HTTP и возвращать результат. Это делает архитектуру более гибкой.

Примерный алгоритм работы "на постоянку":

  1. 1С получает PDF-файл.
  2. С помощью команды ЗапуститьПриложение() вызывается утилита ImageMagick для конвертации PDF в PNG с высоким разрешением.
  3. Далее вызывается скрипт или внешняя компонента, которой передается путь к полученному PNG-файлу.
  4. Компонента/скрипт возвращает в 1С распознанную строку.
  5. Временные файлы удаляются.

Решение 3: Готовые обработки с Инфостарта

Прежде чем писать свое решение с нуля, стоит поискать готовые. На портале Инфостарт существуют разработки, которые уже решают похожие задачи. Например, обработки для извлечения кодов маркировки из PDF-файлов, полученных из "Честного ЗНАКА". Часто они используют описанные выше подходы (внешние утилиты + библиотеки) и могут стать отличной основой для вашего решения.

Альтернативный путь: изменение бизнес-процесса

Наконец, стоит задать вопрос: а нужно ли вообще решать эту задачу "в лоб"? Возможно, можно договориться с контрагентами о предоставлении документов в других форматах, где данные штрихкодов передаются в текстовом виде (например, через ЭДО, в файлах XML или CSV). Это самый надежный способ, который полностью исключает ошибки распознавания и сложности технической реализации.

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

← На главную