Почему значительно увеличивается размер PDF-файла после подписания в 1С:Документооборот 3.0 и как это исправить?

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

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

Выясним причину: механизм работы ImageMagick

Для начала проанализируем внутреннюю логику системы. Основная причина кроется в способе визуализации штампа. В типовой конфигурации «1С:Документооборот» процесс наложения отметки о подписании реализован через внешнюю компоненту ImageMagick. Алгоритм работы программы выглядит следующим образом:

  1. Исходный PDF-документ разделяется на отдельные страницы.
  2. Каждая страница конвертируется (растеризуется) в растровое изображение (картинку).
  3. На нужную страницу (первую или каждую) «накладывается» слой со штампом электронной подписи.
  4. Все полученные картинки-страницы собираются обратно в единый PDF-файл.

Проблема заключается в том, что если ваш исходный файл был текстовым (векторным), то после превращения каждой страницы в несжатую картинку высокого разрешения объем данных увеличивается в геометрической прогрессии. Например, текстовая страница занимает 50 КБ, а ее растровое представление в высоком качестве — уже 3-5 МБ. Для 16 страниц это дает колоссальный прирост веса.

Способ 1. Настройка разрешения (DPI) и параметров сжатия

Рассмотрим самый простой путь исправления ситуации без изменения программного кода. Качество и, соответственно, вес результирующего файла напрямую зависят от параметра Density (DPI), с которым ImageMagick обрабатывает документ.

Посмотрим, что можно изменить в настройках:

Способ 2. Оптимизация через Ghostscript

Поскольку ImageMagick часто использует Ghostscript в качестве «движка» для работы с PDF, мы можем повлиять на результат через параметры командной строки. Проанализируем возможность передачи ключей сжатия. При сборке итогового файла полезно использовать параметры типа -dPDFSETTINGS=/ebook (среднее качество) или /screen (минимальный вес для просмотра на экране).

Если у вас есть доступ к редактированию кода, найдите место вызова внешней компоненты и попробуйте добавить параметры сжатия JPEG. Посмотрим на пример логики формирования команды:


// Пример модификации параметров вызова ImageMagick
ПараметрыЗапуска = "-density 150 -quality 80 -compress jpeg";
// Далее следует вызов обработки файла

Способ 3. Использование альтернативных библиотек (iTextSharp)

Разберем более продвинутый метод, который используют опытные разработчики. Вместо того чтобы превращать весь документ в набор картинок, можно использовать библиотеку iTextSharp (или её аналоги на .NET). Этот инструмент позволяет работать с PDF на уровне объектов. Штамп накладывается как новый векторный слой поверх существующего контента, не затрагивая структуру остальных страниц.

Преимущества этого метода:

  1. Текстовый слой остается текстовым (можно выделять и копировать текст).
  2. Размер файла увеличивается ровно на размер картинки самого штампа (около 20-50 КБ).
  3. Процесс происходит значительно быстрее, так как не требуется тяжелая растеризация.

Способ 4. Переход на утилиту pdftk или CryptoPro PDF

Если компания готова к использованию стороннего ПО, рассмотрим применение специализированных утилит. Например, программа pdftk умеет «накладывать» один PDF-файл (со штампом) на другой в качестве водяного знака (background или stamp).

Другой вариант — использование КриптоПро PDF. У этой программы есть консольная утилита cppdfutil.exe, которая позволяет пакетно подписывать и визуализировать штампы. Рассмотрим пример использования командной строки для этих целей:


// Пример использования внешней утилиты
Команда = "cppdfutil.exe -sign -v -f " + ПутьКФайлу + " -out " + ПутьКРезультату;
ЗапуститьПриложение(Команда,, Истина);

Способ 5. Использование отсоединенной подписи

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

Практические советы по отладке

Если вы столкнулись с тем, что один файл раздувается, а другой (похожий) — нет, рекомендуем выполнить следующие действия:

  1. Воспользуйтесь отладчиком 1С и установите точку останова в модуле, отвечающем за визуализацию файлов (обычно это связано с регламентными заданиями или функциями работы с файлами в ДО 3.0).
  2. Найдите временную директорию, куда ImageMagick складывает промежуточные картинки страниц.
  3. Посмотрите на формат этих картинок. Если они сохраняются в BMP без сжатия, это и есть причина раздувания. Попробуйте принудительно изменить формат промежуточных файлов на JPG.
  4. Убедитесь, что установлены последние патчи от фирмы «1С». Проблема «тяжелых» PDF хорошо известна, и в некоторых релизах (например, через патчи серии EF_00_...) были добавлены оптимизации алгоритмов сжатия.

Резюме: Основной способ борьбы с увеличением веса — это уход от полной растеризации документа в пользу векторного наложения штампа или жесткая настройка параметров DPI и JPEG-сжатия в параметрах ImageMagick. Выбор метода зависит от ваших требований к качеству документа и возможности вносить изменения в программный код системы.

← На главную