При настройке потокового сканирования в 1С (чаще всего в конфигурации "1С:Документооборот") мы часто сталкиваемся с задачей автоматического разбора пачки документов. Обычно сценарий выглядит так: пользователь сканирует стопку бумаги, формируется многостраничный PDF, где первая страница содержит штрихкод для идентификации, а последующие — содержимое документа. Далее 1С должна разделить этот файл на части.
Однако при использовании штатной компоненты TWAIN и её метода РазделитьМногоСтраничныйФайл нередко возникает ошибка с текстом: "Не удалось преобразовать в картинки pdf файл". Разберем подробно, почему это происходит, что находится "под капотом" этого процесса и как организовать работу правильно.
Важно понимать, что сама платформа 1С или компонента TWAIN часто не занимаются прямой растеризацией PDF. В типовых решениях, таких как "1С:Документооборот", для этих целей используются внешние библиотеки.
Если мы проанализируем отладочную информацию, то выясним следующее:
РазделитьМногоСтраничныйФайл фактически обращается к утилите ImageMagick. Стоит отметить, что эта же утилита часто применяется и для других задач, например, когда требуется генерация картинки штампа цифровой подписи на сервере.Рассмотрим основные технические причины сбоя:
Если мы хотим заставить работать именно штатный механизм, нам необходимо проверить конфигурационный файл ImageMagick.
Выполним следующие шаги:
policy.xml.
<policy domain="coder" rights="none" pattern="PDF" />
read|write.Также убедимся, что в системе установлен Ghostscript той же разрядности, что и ImageMagick (x32 или x64).
Как показывает практика и обсуждение специалистов, использование компоненты TWAIN для обработки уже отсканированных файлов — не самое оптимальное решение. Компонента TWAIN предназначена в первую очередь для управления сканером.
Более надежный и масштабируемый подход — разделить процесс на этапы и использовать специализированные инструменты напрямую. Это позволяет перенести нагрузку на сервер и не зависеть от клиентских компонент. Такой подход открывает дополнительные возможности, например, локальное извлечение текста из полученных изображений для автоматического заполнения реквизитов.
Разберем алгоритм, который используют опытные разработчики:
Пример команды для Ghostscript, которая разбивает PDF на отдельные TIFF-файлы (работает быстрее и стабильнее, чем через ImageMagick):
gswin64c.exe -dNOPAUSE -dBATCH -sDEVICE=tiffg4 -r300 -sOutputFile="D:\Temp\page_%03d.tif" "D:\Input\scan.pdf"
Где:
-sDEVICE=tiffg4 — формат сжатия (черно-белый, оптимален для штрихкодов).-r300 — разрешение 300 DPI (достаточно для распознавания).%03d — шаблон нумерации файлов (page_001.tif, page_002.tif...).После того как мы получили набор картинок, нам нужно найти штрихкод на первой странице. Для этого также лучше использовать специализированные компоненты, например ZBar или внешние компоненты для 1С. В некоторых случаях, если вы работаете с офисными документами, может потребоваться предварительная вставка QR-кода во внутренние документы для их последующей идентификации при сканировании.
Логика обработки:
Если нам нужно сохранить результат не как набор картинок, а как PDF, мы можем снова использовать утилиты сборки. Для этих целей удобно использовать ImageMagick или специализированное расширение для объединения файлов и преобразования в один PDF непосредственно в интерфейсе Документооборота.
Пример команды ImageMagick для сборки:
magick.exe convert page_001.tif page_002.tif result_document.pdf
В процессе формирования итогового документа часто возникает задача соблюдения регламентов оформления, таких как визуализация электронной подписи на документе PDF с точным указанием её положения.
Отказавшись от метода РазделитьМногоСтраничныйФайл клиентской компоненты в пользу вызова внешних утилит на сервере, мы получаем:
Таким образом, если вы столкнулись с ошибкой преобразования PDF в компоненте TWAIN, рекомендуем не пытаться "лечить" компоненту, а реализовать процесс разделения и распознавания через прямой вызов внешних инструментов.