В процессе автоматизации документооборота часто возникает ситуация, когда сформированные или отсканированные PDF-файлы (например, договоры с приложениями) имеют избыточный объем. Это создает трудности при отправке документов по электронной почте, так как почтовые серверы часто имеют ограничения на размер вложений. Разберем пошагово, какие инструменты и методы существуют в экосистеме 1С для решения этой задачи.
Если PDF-файл создается непосредственно в 1С из ТабличногоДокумента, самый эффективный способ уменьшить его вес — это контроль исходных данных. Проанализируем ситуацию: чаще всего «тяжесть» файлу придают изображения высокого разрешения. Рассмотрим алгоритм действий:
ТабличныйДокумент, необходимо программно изменить её разрешение или качество. В 1С для этого используется объект Картинка и метод ОбработатьКартинку().Записать() с указанием типа файла.Посмотрим на пример кода, который подготавливает изображение перед вставкой в документ:
// Пример подготовки картинки для уменьшения веса PDF
ВыбраннаяКартинка = Новый Картинка(ПутьКФайлу);
ПараметрыОбработки = Новый ПараметрыОбработкиКартинки;
ПараметрыОбработки.Формат = ФорматКартинки.JPEG;
ПараметрыОбработки.Качество = 50; // Снижаем качество для экономии места
СжатаяКартинка = ВыбраннаяКартинка.ОбработатьКартинку(ПараметрыОбработки);
Если нам необходимо сжать уже существующий PDF-файл, который был получен извне, штатными средствами 1С сделать это напрямую (без разбора на составляющие) затруднительно. В этом случае на помощь приходят консольные утилиты. Выясним, как использовать ImageMagick — мощный инструмент, который сама фирма 1С рекомендует для работы с изображениями.
Для реализации этого метода утилита должна быть установлена на сервере или рабочей станции. Процесс запускается через команду ЗапуститьПриложение(). Рассмотрим пример командной строки для сжатия:
КомандаЗапуска = "magick convert -density 150 -quality 70 ""input.pdf"" ""output.pdf""";
ЗапуститьПриложение(КомандаЗапуска, , Истина);
Здесь параметр density отвечает за количество точек на дюйм (DPI), а quality — за уровень сжатия JPEG внутри контейнера PDF. Проанализируем результат: использование 150 DPI обычно достаточно для чтения текста, но при этом размер файла уменьшается в несколько раз.
Разберем еще один надежный вариант — использование Ghostscript. Это программное обеспечение является стандартом де-факто для интерпретации PDF. Оно позволяет «пересобрать» файл, применив к нему профили оптимизации.
Основные профили (параметр -dPDFSETTINGS):
/screen — самое сильное сжатие (72 dpi), подходит для просмотра на мониторе./ebook — среднее качество (150 dpi), оптимальный баланс./printer — высокое качество (300 dpi) для печати.Пример интеграции с 1С:
ПутьКГхостскрипт = """C:\Program Files\gs\gs9.54.0\bin\gswin64c.exe""";
Аргументы = " -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=";
ПолнаяКоманда = ПутьКГхостскрипт + Аргументы + """" + ПутьВыхода + """ """ + ПутьВхода + """";
ЗапуститьПриложение(ПолнаяКоманда, , Истина);
Если в организации разрешена установка PDFCreator, мы можем взаимодействовать с его очередью печати через COM-интерфейс. Рассмотрим этот путь как альтернативу консольным командам. Проанализируем преимущества: этот метод позволяет более тонко управлять метаданными файла и очередями печати без прямого обращения к файловой системе через cmd.
Пример обращения к объекту:
Попытка
PDFОбъект = Новый COMОбъект("PDFCreator.JobQueue");
Исключение
Сообщить("Библиотека PDFCreator не найдена");
КонецПопытки;
Этот метод требует предварительной настройки «профилей» в самом PDFCreator, где задаются параметры сжатия картинок. Из 1С мы просто отправляем документ на этот виртуальный принтер.
Проанализируем критически важный нюанс, упомянутый в обсуждении. Если PDF-файл уже содержит присоединенную электронную подпись, любое программное вмешательство в структуру файла (сжатие, изменение DPI, пересохранение) сделает подпись невалидной. Запомним правило: оптимизацию и сжатие необходимо проводить строго ДО этапа подписания документа. Если файл уже подписан, единственный способ уменьшить его объем для пересылки без потери юридической значимости — это использование многотомных архивов (например, .zip или .7z с разбивкой на части).
Выясним, какой метод выбрать в зависимости от условий:
ОбработатьКартинку() для всех вставляемых изображений.ЗапуститьПриложение().Таким образом, хотя в языке 1С нет встроенной функции СжатьPDF(), платформа предоставляет все необходимые инструменты для интеграции с внешними обработчиками и управления качеством контента на этапе его создания.