Как сжать PDF-файл средствами 1С:Предприятие?

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

В процессе автоматизации документооборота часто возникает ситуация, когда сформированные или отсканированные PDF-файлы (например, договоры с приложениями) имеют избыточный объем. Это создает трудности при отправке документов по электронной почте, так как почтовые серверы часто имеют ограничения на размер вложений. Разберем пошагово, какие инструменты и методы существуют в экосистеме 1С для решения этой задачи.

Метод 1. Оптимизация на этапе формирования (превентивный метод)

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

  1. Сжатие картинок перед добавлением: Прежде чем поместить картинку в ТабличныйДокумент, необходимо программно изменить её разрешение или качество. В 1С для этого используется объект Картинка и метод ОбработатьКартинку().
  2. Настройка параметров сохранения: Начиная с версии платформы 8.3.16, механизм печати в PDF стал более гибким. Мы можем использовать метод Записать() с указанием типа файла.

Посмотрим на пример кода, который подготавливает изображение перед вставкой в документ:


// Пример подготовки картинки для уменьшения веса PDF
ВыбраннаяКартинка = Новый Картинка(ПутьКФайлу);
ПараметрыОбработки = Новый ПараметрыОбработкиКартинки;
ПараметрыОбработки.Формат = ФорматКартинки.JPEG;
ПараметрыОбработки.Качество = 50; // Снижаем качество для экономии места
СжатаяКартинка = ВыбраннаяКартинка.ОбработатьКартинку(ПараметрыОбработки);

Метод 2. Использование внешней утилиты ImageMagick

Если нам необходимо сжать уже существующий PDF-файл, который был получен извне, штатными средствами 1С сделать это напрямую (без разбора на составляющие) затруднительно. В этом случае на помощь приходят консольные утилиты. Выясним, как использовать ImageMagick — мощный инструмент, который сама фирма 1С рекомендует для работы с изображениями.

Для реализации этого метода утилита должна быть установлена на сервере или рабочей станции. Процесс запускается через команду ЗапуститьПриложение(). Рассмотрим пример командной строки для сжатия:


КомандаЗапуска = "magick convert -density 150 -quality 70 ""input.pdf"" ""output.pdf""";
ЗапуститьПриложение(КомандаЗапуска, , Истина);

Здесь параметр density отвечает за количество точек на дюйм (DPI), а quality — за уровень сжатия JPEG внутри контейнера PDF. Проанализируем результат: использование 150 DPI обычно достаточно для чтения текста, но при этом размер файла уменьшается в несколько раз.

Метод 3. Промышленное сжатие с помощью Ghostscript и Poppler + itextSharp

Разберем еще один надежный вариант — использование Ghostscript. Это программное обеспечение является стандартом де-факто для интерпретации PDF. Оно позволяет «пересобрать» файл, применив к нему профили оптимизации.

Основные профили (параметр -dPDFSETTINGS):

Пример интеграции с 1С:


ПутьКГхостскрипт = """C:\Program Files\gs\gs9.54.0\bin\gswin64c.exe""";
Аргументы = " -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=";
ПолнаяКоманда = ПутьКГхостскрипт + Аргументы + """" + ПутьВыхода + """ """ + ПутьВхода + """";
ЗапуститьПриложение(ПолнаяКоманда, , Истина);

Метод 4. Работа через COM-объекты (PDFCreator)

Если в организации разрешена установка PDFCreator, мы можем взаимодействовать с его очередью печати через COM-интерфейс. Рассмотрим этот путь как альтернативу консольным командам. Проанализируем преимущества: этот метод позволяет более тонко управлять метаданными файла и очередями печати без прямого обращения к файловой системе через cmd.

Пример обращения к объекту:


Попытка
    PDFОбъект = Новый COMОбъект("PDFCreator.JobQueue");
Исключение
    Сообщить("Библиотека PDFCreator не найдена");
КонецПопытки;

Этот метод требует предварительной настройки «профилей» в самом PDFCreator, где задаются параметры сжатия картинок. Из 1С мы просто отправляем документ на этот виртуальный принтер.

Важное ограничение: Электронная подпись (ЭЦП)

Проанализируем критически важный нюанс, упомянутый в обсуждении. Если PDF-файл уже содержит присоединенную электронную подпись, любое программное вмешательство в структуру файла (сжатие, изменение DPI, пересохранение) сделает подпись невалидной. Запомним правило: оптимизацию и сжатие необходимо проводить строго ДО этапа подписания документа. Если файл уже подписан, единственный способ уменьшить его объем для пересылки без потери юридической значимости — это использование многотомных архивов (например, .zip или .7z с разбивкой на части).

Краткие итоги и рекомендации

Выясним, какой метод выбрать в зависимости от условий:

  1. Если вы сами формируете файл из 1С — используйте ОбработатьКартинку() для всех вставляемых изображений.
  2. Если нужно массово сжимать готовые сканы на сервере — лучше всего подойдет Ghostscript через ЗапуститьПриложение().
  3. Если работа идет на клиенте и нужна гибкость — ImageMagick обеспечит отличный результат.
  4. Всегда проверяйте наличие ЭЦП перед началом манипуляций с файлом.

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

← На главную