Как реализовать сканирование всех штрихкодов из вложенного PDF-файла в 1С

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

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

Анализ проблемы и выбор стратегии распознавания

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

Основной алгоритм действий будет выглядеть следующим образом:

  1. Извлечение страниц из PDF-файла и преобразование их в графические форматы (PNG, JPG или BMP).
  2. Обработка полученных изображений для улучшения читаемости штрихкодов (бинеризация, изменение контрастности).
  3. Использование специализированной библиотеки для поиска и декодирования текстовой информации из штрихкода.
  4. Загрузка полученных данных обратно в 1С.

Этап 1: Конвертация PDF в изображения с помощью Ghostscript или ImageMagick

Для того чтобы "увидеть" содержимое файла, нам нужно выполнить рендеринг страниц. Профессиональным стандартом для этой задачи является Ghostscript или его оболочка ImageMagick. Проанализируем, почему это важно: ImageMagick позволяет через командную строку быстро преобразовать многостраничный PDF в серию картинок с заданным разрешением (DPI).

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


// Пример подготовки команды для конвертации через ImageMagick
ПутьККонвертеру = "C:\Program Files\ImageMagick\magick.exe";
ФайлИсточник = "C:\Docs\Receipts.pdf";
ФайлРезультат = "C:\Docs\Page_%d.png"; // %d создаст файлы Page_0.png, Page_1.png и т.д.

ПараметрыЗапуска = "convert -density 300 """ + ФайлИсточник + """ -quality 100 """ + ФайлРезультат + """";

// Используем метод ЗапуститьПриложение для выполнения команды
ЗапуститьПриложение(ПутьККонвертеру + " " + ПараметрыЗапуска, , Истина);

В данном примере флаг Истина в методе ЗапуститьПриложение заставляет 1С ожидать завершения процесса конвертации, что крайне важно для дальнейшей цепочки действий.

Этап 2: Выбор библиотеки для распознавания штрихкодов

Разберем основные варианты библиотек, которые упоминались в обсуждении и доказали свою эффективность на практике:

  1. ZBar — легкая и быстрая библиотека. Хорошо справляется с QR-кодами, но, как было отмечено в дискуссии, имеет ограниченную поддержку некоторых типов DataMatrix, используемых в маркировке. Однако для кассовых чеков она вполне подходит. Контроль и сверка марок при учёте алкоголя автоматизируются через решение для автоматизации обмена данными с ЕГАИС.
  2. ZXing.Net (Zebra Crossing) — мощный порт библиотеки на платформу .NET. Это наиболее универсальное решение, которое поддерживает практически все виды 1D и 2D кодов.
  3. Native API компоненты — специализированные разработки для 1С, которые подключаются как внешние компоненты и позволяют работать без вызова сторонних .exe файлов.

Этап 3: Интеграция ZXing.Net через COM-обертку

Поскольку 1С отлично взаимодействует с COM-объектами, одним из самых надежных способов будет использование библиотеки ZXing.Net. Если у вас есть готовая DLL-обертка, работа с ней в коде 1С будет выглядеть следующим образом:


// Создаем объект библиотеки
Попытка
    БиблиотекаРаспознавания = Новый COMОбъект("ZXing.BarcodeReader");
Исключение
    Сообщить("Библиотека не зарегистрирована в системе!");
    Возврат;
КонецПопытки;

// Проанализируем каждое полученное на предыдущем этапе изображение
МассивКартинок = НайтиФайлы("C:\Docs\", "Page_*.png");

Для Каждого ФайлКартинки Из МассивКартинок Цикл
    // Читаем данные из файла
    Результат = БиблиотекаРаспознавания.Decode(ФайлКартинки.ПолноеИмя);
    
    Если ЗначениеЗаполнено(Результат) Тогда
        // Обрабатываем полученный текст штрихкода
        Сообщить("Распознан код на странице " + ФайлКартинки.Имя + ": " + Результат.Text);
    КонецЕсли;
КонецЦикла;

Этап 4: Альтернативный метод через Python-скрипт

Проанализируем современный подход, который становится все более популярным среди разработчиков 1С. Использование небольшого скрипта на языке Python в качестве "микросервиса" позволяет объединить конвертацию и распознавание в один шаг. Рассмотрим преимущества: Python имеет библиотеки pdf2image и pyzbar (или OpenCV), которые работают быстрее и точнее за счет продвинутых алгоритмов предварительной обработки изображений.

В 1С это реализуется через сохранение PDF во временный файл, вызов скрипта и чтение текстового файла с результатами. Этот метод избавляет от необходимости регистрировать COM-объекты и бороться с разрядностью систем (32/64 бит).

Рекомендации по улучшению качества распознавания

Рассмотрим несколько практических советов, которые помогут избежать ошибок при обработке реальных сканов чеков:

Использование облачных сервисов

Если задача не носит массовый характер (тысячи документов в минуту), стоит рассмотреть использование API для распознавания документов (например, Yandex Vision). В этом случае 1С просто отправляет POST-запрос с файлом, а в ответ получает структурированный JSON со всеми найденными данными. Это избавляет от необходимости устанавливать и настраивать ImageMagick и Ghostscript на сервере 1С.

Таким образом, мы разобрали основные способы решения задачи. Выбор конкретного метода зависит от ваших требований к производительности и возможности установки стороннего ПО на сервер 1С. Наиболее стабильным для реализации внутри инфраструктуры предприятия считается связка Ghostscript + ZXing. Повторяющиеся цепочки действий по обработке файлов также поддаются роботизации с помощью программных роботов, исключающих ручной ввод данных.

← На главную