Ошибка метода РазделитьМногоСтраничныйФайл в компоненте TWAIN: причины и решение для потокового сканирования

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

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

Однако при использовании штатной компоненты TWAIN и её метода РазделитьМногоСтраничныйФайл нередко возникает ошибка с текстом: "Не удалось преобразовать в картинки pdf файл". Разберем подробно, почему это происходит, что находится "под капотом" этого процесса и как организовать работу правильно.

Анализ причины ошибки

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

Если мы проанализируем отладочную информацию, то выясним следующее:

  1. Метод РазделитьМногоСтраничныйФайл фактически обращается к утилите ImageMagick. Стоит отметить, что эта же утилита часто применяется и для других задач, например, когда требуется генерация картинки штампа цифровой подписи на сервере.
  2. Сама утилита ImageMagick для чтения PDF-файлов использует интерпретатор Ghostscript.
  3. Ошибка "Не удалось преобразовать..." — это общее сообщение, которое скрывает реальную проблему взаимодействия этих утилит.

Рассмотрим основные технические причины сбоя:

Решение 1: Исправление настроек ImageMagick (если хотим использовать штатный механизм)

Если мы хотим заставить работать именно штатный механизм, нам необходимо проверить конфигурационный файл ImageMagick.

Выполним следующие шаги:

  1. Найдем папку установки ImageMagick (обычно она находится в Program Files или во внутренних каталогах компоненты 1С, если она поставляется вместе с макетом).
  2. Откроем файл policy.xml.
  3. Найдем строку, запрещающую права на чтение/запись PDF. Она выглядит примерно так: <policy domain="coder" rights="none" pattern="PDF" />
  4. Закомментируем эту строку или изменим права на read|write.

Также убедимся, что в системе установлен Ghostscript той же разрядности, что и ImageMagick (x32 или x64).

Решение 2: Альтернативная архитектура (Рекомендуемое)

Как показывает практика и обсуждение специалистов, использование компоненты TWAIN для обработки уже отсканированных файлов — не самое оптимальное решение. Компонента TWAIN предназначена в первую очередь для управления сканером.

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

Разберем алгоритм, который используют опытные разработчики:

  1. Сканирование. МФУ или сканер сохраняет многостраничный PDF в сетевую папку (без участия 1С).
  2. Запуск обработки. Регламентное задание в 1С сканирует папку на наличие новых файлов.
  3. Конвертация. Вместо метода компоненты 1С мы вызываем утилиту командной строки (ImageMagick или Ghostscript напрямую) для разбивки PDF на отдельные изображения (TIFF или JPEG).

Пример команды для Ghostscript, которая разбивает PDF на отдельные TIFF-файлы (работает быстрее и стабильнее, чем через ImageMagick):


gswin64c.exe -dNOPAUSE -dBATCH -sDEVICE=tiffg4 -r300 -sOutputFile="D:\Temp\page_%03d.tif" "D:\Input\scan.pdf"

Где:

Распознавание штрихкода

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

Логика обработки:

  1. Берем первый файл из пачки (первую страницу).
  2. Пытаемся распознать штрихкод.
  3. Если штрихкод найден — создаем новый документ в 1С и привязываем к нему файл.
  4. Если штрихкод не найден — считаем страницу продолжением предыдущего документа и склеиваем её с ним.

Сборка файла обратно

Если нам нужно сохранить результат не как набор картинок, а как PDF, мы можем снова использовать утилиты сборки. Для этих целей удобно использовать ImageMagick или специализированное расширение для объединения файлов и преобразования в один PDF непосредственно в интерфейсе Документооборота.

Пример команды ImageMagick для сборки:

magick.exe convert page_001.tif page_002.tif result_document.pdf

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

Преимущества серверного подхода

Отказавшись от метода РазделитьМногоСтраничныйФайл клиентской компоненты в пользу вызова внешних утилит на сервере, мы получаем:

Таким образом, если вы столкнулись с ошибкой преобразования PDF в компоненте TWAIN, рекомендуем не пытаться "лечить" компоненту, а реализовать процесс разделения и распознавания через прямой вызов внешних инструментов.

← На главную