Как программно добавить факсимиле или графическую подпись в готовый PDF-документ?

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

В процессе автоматизации документооборота часто возникает задача программного наложения факсимиле (скана подписи или печати) на уже сформированные файлы. Если исходный документ формируется непосредственно в конфигурации, то вставка картинки в табличный документ перед выгрузкой в PDF решается штатно. Однако если на вход поступает сторонний готовый PDF-файл (например, скан бумажного акта или накладной), типовые механизмы платформы не позволяют напрямую отредактировать его страницы.

Рассмотрим особенности работы с PDF в среде 1С:Предприятие и разберем проверенные способы решения этой задачи.

Ограничения платформы 1С при работе с готовыми PDF

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

Для решения задачи можно использовать несколько практических подходов: от сборки документа через табличный документ до вызова внешних консольных утилит и сервисов.

Способ 1. Использование табличного документа 1С как графического холста

Если скан документа изначально поступает в виде растрового изображения (JPEG, PNG, TIFF) или предварительно извлекается из PDF, мы можем собрать результирующий документ штатными средствами платформы 1С.

Разберем алгоритм по шагам:

  1. Создаем новый ТабличныйДокумент в памяти.
  2. Добавляем в коллекцию рисунков документа фоновое изображение (скан листа).
  3. Поверх фонового рисунка добавляем второй рисунок — факсимиле (файл формата PNG с прозрачным фоном).
  4. Устанавливаем координаты и размеры для изображения подписи.
  5. Сохраняем табличный документ в формате PDF.

Посмотрим на пример программной реализации:


ТабДок = Новый ТабличныйДокумент;

// Добавляем фоновый скан документа
РисунокСкан = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
РисунокСкан.Картинка = Новый Картинка("C:\Scan_Page_1.jpg");
РисунокСкан.Верх = 0;
РисунокСкан.Лево = 0;
РисунокСкан.Ширина = 210; // Размер листа А4 в миллиметрах
РисунокСкан.Высота = 297;

// Добавляем поверх скана факсимиле с прозрачным фоном
РисунокПодпись = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
РисунокПодпись.Картинка = Новый Картинка("C:\Facsimile.png");
РисунокПодпись.Верх = 240; // Координата Y вставки подписи
РисунокПодпись.Лево = 120; // Координата X вставки подписи
РисунокПодпись.Ширина = 45;
РисунокПодпись.Высота = 20;

// Сохраняем итоговый документ в PDF
ТабДок.Записать("C:\Result_Signed.pdf", ТипФайлаТабличногоДокумента.PDF);

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

Способ 2. Наложение слоя с помощью консольных утилит (CLI)

Если исходный документ уже является многостраничным PDF и переводить его в растр нежелательно (чтобы не потерять качество векторных элементов или текстового слоя), используют вызов специализированных консольных утилит через метод ЗапуститьПриложение().

Выделим два варианта работы через командную строку:

  1. Метод наложения штампа (Stamp/Overlay): Заранее формируется одностраничный прозрачный PDF-документ, содержащий только подпись в нужных координатах. Утилита выполняет операцию слияния слоев, накладывая файл-штамп на нужную страницу целевого документа.
  2. Прямое внедрение изображения по координатам: Консольная утилита принимает на вход путь к исходному PDF, путь к PNG-файлу факсимиле, номер страницы и точные координаты X/Y, после чего генерирует выходной файл.

Посмотрим на пример вызова внешней утилиты из кода 1С:


КомандаЗапуска = "pdfutil.exe stamp ""C:\Source.pdf"" ""C:\Stamp.pdf"" --output ""C:\Result.pdf""";
КодВозврата = 0;
ЗапуститьПриложение(КомандаЗапуска, , Истина, КодВозврата);

Если КодВозврата <> 0 Тогда
    ВызватьИсключение "Ошибка при обработке PDF-документа!";
КонецЕсли;

Способ 3. Внешние компоненты и COM-библиотеки

Для высоконагруженных задач, где запуск отдельного процесса операционной системы на каждый документ создает избыточную нагрузку, применяются внешние компоненты (Native API) или COM-соединения со специализированными издательскими и PDF-библиотеками.

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

Способ 4. HTTP-микросервис для обработки документов

В современных гетерогенных инфраструктурах (где сервер 1С работает под управлением ОС Linux) оптимальным решением является вынос работы с PDF в отдельный легковесный HTTP-сервис.

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

Решение проблемы смещения координат на сканах

Когда документы сканируются вручную, изображение на странице может смещаться или поворачиваться, из-за чего фиксированные координаты подписи могут попасть на текст или выйти за пределы строки. Для автоматизации точного позиционирования применяют следующие подходы:

  1. Поиск текстовых меток (OCR): Перед наложением документ передается в модуль оптического распознавания текста для поиска ключевых фраз (например, «М.П.», «Руководитель», «Подпись покупателя»). Полученные координаты найденного блока используются как база для расчета смещения факсимиле.
  2. Поиск графических маркеров: На типовые бланки заранее наносятся угловые реперные точки или штрихкоды/QR-коды. По их расположению алгоритм вычисляет угол перекоса и реальный сдвиг листа, корректируя координаты вставки подписи.
← На главную