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

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

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

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

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

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

Решение через консольную утилиту PDFtk (метод наложения слоев)

Рассмотрим подробнее наиболее популярный и проверенный способ — использование бесплатной кроссплатформенной консольной утилиты PDFtk. Данный инструмент умеет объединять страницы, извлекать метаданные и накладывать один PDF-документ поверх другого в качестве фонового водяного знака (background) или переднего слоя (stamp).

Алгоритм решения строится следующим образом:

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

Посмотрим на пример формирования команды для PDFtk через вызов из 1С:


// Пути к файлам
ПутьPDFtk = "pdftk"; // или полный путь к исполняемому файлу pdftk.exe
ИсходныйФайл = """C:\Temp\Doc_Source.pdf""";
ФайлШтампа   = """C:\Temp\Stamp_Overlay.pdf""";
ИтоговыйФайл = """C:\Temp\Doc_Result.pdf""";

// Формируем команду наложения штампа поверх исходного документа
ПараметрыКоманды = ИсходныйФайл + " stamp " + ФайлШтампа + " output " + ИтоговыйФайл;

// Запуск внешней утилиты через платформу 1С
ЗапуститьПриложение(ПутьPDFtk + " " + ПараметрыКоманды, , Истина);

Проанализируем параметры утилиты:

  1. stamp — накладывает файл поверх содержимого исходного документа (если требуется подложить текст под содержимое, используется параметр background).
  2. output — указывает путь для сохранения результирующего PDF-файла.

Альтернативные подходы: скрипты и внешние библиотеки

Если на сервере нежелательно формировать промежуточные PDF-файлы макетов, рассмотрим альтернативные варианты решения:

  1. Скрипты на Python или .NET: Запуск небольшого внешнего скрипта на базе библиотек (например, PyMuPDF, pypdf или iTextSharp). Скрипт принимает путь к исходному файлу, текст резолюции и координаты $(X, Y)$, после чего напрямую внедряет векторный текст и рамку в структуру документа.
  2. Использование COM-объектов или внешних компонент (Native API): Подключение специализированных PDF-библиотек (таких как Debenu PDF Library / Quick PDF Library). Данный подход позволяет выполнять все манипуляции в оперативной памяти сервера без генерации промежуточных файлов на диске.
  3. Утилиты QPDF и Ghostscript: Мощные инструменты для пакетной обработки и трансформации PDF-файлов, подходящие для серверов под управлением Linux.

Важные технические нюансы

При внедрении механизма наложения резолюций обратите внимание на следующие особенности:

  1. Электронная цифровая подпись (ЭЦП / КЭП): Если исходный PDF-файл уже заверен квалифицированной электронной подписью, любое изменение его содержимого (включая наложение штампа утилитой PDFtk) приведет к нарушению целостности хеша и недействительности подписи. Наносить визуальные штампы согласования необходимо строго до момента подписания документа.
  2. Система координат PDF: В стандарте PDF точка отсчета $(0, 0)$ находится в левом нижнем углу листа, а единицей измерения служат типографские пункты ($1/72$ дюйма). Учитывайте это при программном расчете координат и ориентации страниц.
  3. Кроссплатформенность сервера: Если сервер 1С работает под управлением Linux, COM-технологии недоступны. В этом случае связка консольной утилиты PDFtk (или Python-скрипта) и метода ЗапуститьПриложение является наиболее надежным и универсальным решением.
← На главную