В современной практике автоматизации часто возникает задача обработки первичной документации, представленной в формате PDF. При регулярном поступлении документов через почту или FTP процесс можно ускорить с помощью программы для загрузки и выгрузки документов. Особую сложность представляет извлечение данных из двухмерных штрихкодов (QR-кодов или DataMatrix), когда несколько чеков или документов отсканированы в один многостраничный файл. Платформа 1С не имеет встроенных механизмов прямого анализа содержимого PDF для поиска штрихкодов, поэтому мы разберем комплексный подход к решению этой задачи с использованием внешних инструментов и библиотек.
Прежде всего, проанализируем ситуацию: файл PDF является контейнером, в котором изображения могут храниться в различных форматах или даже быть представлены в виде векторной графики. Для качественного распознавания штрихкода нам необходимо сначала привести данные к стандартному растровому виду, а затем применить алгоритмы декодирования. Рассмотрим поэтапно, как выстроить этот процесс.
Основной алгоритм действий будет выглядеть следующим образом:
Для того чтобы "увидеть" содержимое файла, нам нужно выполнить рендеринг страниц. Профессиональным стандартом для этой задачи является 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С ожидать завершения процесса конвертации, что крайне важно для дальнейшей цепочки действий.
Разберем основные варианты библиотек, которые упоминались в обсуждении и доказали свою эффективность на практике:
.exe файлов.Поскольку 1С отлично взаимодействует с COM-объектами, одним из самых надежных способов будет использование библиотеки ZXing.Net. Если у вас есть готовая DLL-обертка, работа с ней в коде 1С будет выглядеть следующим образом:
// Создаем объект библиотеки
Попытка
БиблиотекаРаспознавания = Новый COMОбъект("ZXing.BarcodeReader");
Исключение
Сообщить("Библиотека не зарегистрирована в системе!");
Возврат;
КонецПопытки;
// Проанализируем каждое полученное на предыдущем этапе изображение
МассивКартинок = НайтиФайлы("C:\Docs\", "Page_*.png");
Для Каждого ФайлКартинки Из МассивКартинок Цикл
// Читаем данные из файла
Результат = БиблиотекаРаспознавания.Decode(ФайлКартинки.ПолноеИмя);
Если ЗначениеЗаполнено(Результат) Тогда
// Обрабатываем полученный текст штрихкода
Сообщить("Распознан код на странице " + ФайлКартинки.Имя + ": " + Результат.Text);
КонецЕсли;
КонецЦикла;
Проанализируем современный подход, который становится все более популярным среди разработчиков 1С. Использование небольшого скрипта на языке Python в качестве "микросервиса" позволяет объединить конвертацию и распознавание в один шаг. Рассмотрим преимущества: Python имеет библиотеки pdf2image и pyzbar (или OpenCV), которые работают быстрее и точнее за счет продвинутых алгоритмов предварительной обработки изображений.
В 1С это реализуется через сохранение PDF во временный файл, вызов скрипта и чтение текстового файла с результатами. Этот метод избавляет от необходимости регистрировать COM-объекты и бороться с разрядностью систем (32/64 бит).
Рассмотрим несколько практических советов, которые помогут избежать ошибок при обработке реальных сканов чеков:
ZBar.ДвоичныеДанные для передачи контента в компоненты без записи промежуточных файлов на диск, что повышает безопасность и скорость работы.Если задача не носит массовый характер (тысячи документов в минуту), стоит рассмотреть использование API для распознавания документов (например, Yandex Vision). В этом случае 1С просто отправляет POST-запрос с файлом, а в ответ получает структурированный JSON со всеми найденными данными. Это избавляет от необходимости устанавливать и настраивать ImageMagick и Ghostscript на сервере 1С.
Таким образом, мы разобрали основные способы решения задачи. Выбор конкретного метода зависит от ваших требований к производительности и возможности установки стороннего ПО на сервер 1С. Наиболее стабильным для реализации внутри инфраструктуры предприятия считается связка Ghostscript + ZXing. Повторяющиеся цепочки действий по обработке файлов также поддаются роботизации с помощью программных роботов, исключающих ручной ввод данных.