Как преобразовать JPEG в PDF в 1С без использования внешних компонент?

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

В процессе автоматизации документооборота часто возникает задача преобразования отсканированных графических файлов (JPEG) в формат PDF для их последующей отправки в государственные органы или сторонние организации. Многие разработчики задаются вопросом: можно ли выполнить такое преобразование «на лету» без использования тяжелых внешних библиотек (ВК), платных программ или сложных манипуляций с двоичными данными? Давайте детально проанализируем эту задачу и разберем доступные варианты решения.

Мифы о конвертации форматов

Прежде всего, важно развеять распространенное заблуждение о том, что преобразование форматов (в частности, из JPEG в PDF или другие растровые форматы) можно осуществить простой заменой одного бита в двоичном коде файла. Формат JPEG является алгоритмическим сжатием с потерями, основанным на дискретном косинусном преобразовании. В свою очередь, PDF — это сложный контейнерный формат, который может включать в себя не только изображения, но и векторную графику, шрифты и структуру документа.

Попытка манипулировать отдельными битами приведет лишь к повреждению файла и невозможности его открытия стандартными средствами просмотра. Помните, что для успешного создания PDF необходимо соблюдать структуру, предписанную стандартом ISO 32000, что невозможно сделать путем простой подмены заголовков.

Решение 1: Использование табличного документа 1С

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

  1. Создаем новый объект ТабличныйДокумент.
  2. Добавляем рисунок (изображение) в область табличного документа с помощью метода Добавить() коллекции Рисунки.
  3. Загружаем данные файла JPEG в область рисунка.
  4. Сохраняем полученный документ методом Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF).

Это решение является наиболее «родным» для платформы, однако стоит учитывать, что 1С не предоставляет гибких настроек сжатия или разрешения (DPI) для финального PDF-файла. Это может стать ограничением, если к отправляемым документам предъявляются жесткие требования по качеству.


// Пример сохранения картинки через табличный документ
ТабДок = Новый ТабличныйДокумент;
Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = Новый Картинка(ПутьКФайлуJPEG);
Рисунок.Лево = 0;
Рисунок.Верх = 0;
Рисунок.Высота = 297; // Условные параметры
Рисунок.Ширина = 210;
ТабДок.Записать(ПутьКФайлуPDF, ТипФайлаТабличногоДокумента.PDF);

Решение 2: Использование внешних утилит командной строки (CLI)

Если вам требуется высокая степень контроля над качеством и размером итогового PDF-документа, рекомендуем воспользоваться специализированными утилитами, такими как ImageMagick или pdfcreator. Преимущество использования таких инструментов заключается в том, что они не требуют регистрации в реестре Windows в качестве COM-объектов (ВК). Мы можем вызывать их из 1С с помощью стандартных средств платформы.

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


// Пример вызова внешней утилиты для конвертации
Команда = "magick.exe " + ПутьКФайлуJPEG + " " + ПутьКФайлуPDF;
ЗапуститьПриложение(Команда, , Истина); // Истина — ждать завершения процесса

Решение 3: Оптимизация хранения и обработки

При работе с большим объемом сканированных документов стоит пересмотреть подход к их хранению. Вместо чистого JPEG можно рассмотреть использование форматов с более эффективным сжатием, например, WebP, если это позволяют требования интеграции. Если же использование PDF является обязательным, рекомендуем:

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

← На главную