Как вставить регистрационный штамп в PDF и JPEG в 1С?

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

При автоматизации документооборота часто возникает задача добавления штампа регистрации (номера, даты, штрихкода или QR-кода) на уже существующие вложенные файлы — сканы документов в формате PDF или растровые изображения JPEG, PNG и TIFF. Разберем, почему встроенного объекта ТабличныйДокумент недостаточно для модификации готового PDF и какими способами можно реализовать наложение штампа.

Почему не подходит стандартный ТабличныйДокумент

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

Посмотрим на практические варианты решения этой задачи в современных версиях 1С.

Вариант 1. Штатные возможности «1С:Документооборот»

Если вы работаете в конфигурациях «1С:Документооборот 8» (редакции 2.1 и 3.0), механизм наложения регистрационного штампа уже встроен в типовой функционал.

Разберем по шагам, как это работает:

  1. Пользовательский интерфейс: Для зарегистрированного документа в контекстном меню прикрепленного файла доступна штатная команда «Вставить регистрационный штамп и штрихкод». Система позволяет выбрать целевую страницу (например, титульную или последнюю) и задать координаты расположения.
  2. Настройка состава штампа: В «1С:Документооборот 3.0» внешний вид штампа (поля организации, регистрационный номер, дата, штрихкод/QR-код, границы рамки) настраивается администратором системы в пользовательском режиме без доработки программного кода.
  3. Механизмы наложения: В настройках программы можно выбрать режим работы — средствами платформы либо через связку внешних консольных утилит (ImageMagick и Ghostscript).

Вариант 2. Использование внешних консольных утилит (PDFTK, QPDF, ImageMagick)

Если требуется реализовать собственную доработку в произвольной конфигурации, проанализируем связку 1С с консольными утилитами обработки документов.

Алгоритм решения для PDF состоит из трех этапов:

  1. Формирование штампа в 1С: Создаем макет табличного документа с регистрационными данными и штрихкодом. Сохраняем его во временный файл нужного формата (PDF или прозрачный PNG).
  2. Наложение слоя (Watermark / Stamp): Вызываем внешнюю утилиту через команду ЗапуститьПриложение(). Для векторного наложения отлично подходят специализированные утилиты PDFTK или QPDF. Они позволяют наложить штамп поверх исходной страницы без потери текстового слоя (OCR) и без раздувания размера файла.
  3. Обновление файла в 1С: Считываем результирующий файл с диска и перезаписываем двоичные данные прикрепленного файла в базе.

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


КомандаЗапуска = СтрШаблон("pdftk ""%1"" stamp ""%2"" output ""%3""", 
    ПутьКИсходномуPDF, 
    ПутьКШтампуPDF, 
    ПутьКРезультатуPDF);

ЗапуститьПриложение(КомандаЗапуска, , Истина);

Вариант 3. Работа с растровыми изображениями (JPEG, PNG, TIFF)

Для файлов сканов в формате JPEG или PNG схема наложения выглядит следующим образом:

  1. Формируем изображение штампа на прозрачном фоне в формате PNG.
  2. Вызываем утилиту композитинга (например, ImageMagick composite) для наложения штампа на исходный скан с указанием координат смещения (гравитации).
  3. Альтернативный путь: конвертируем входящий JPEG в одностраничный PDF, накладываем штамп стандартным методом для PDF и при необходимости возвращаем итоговый файл в нужный формат.

Пример команды для ImageMagick:


КомандаКонвертации = СтрШаблон("composite -gravity SouthEast -geometry +50+50 ""%1"" ""%2"" ""%3""",
    ПутьККартинкеШтампаPNG,
    ПутьКИсходномуJPEG,
    ПутьКИтоговомуJPEG);

ЗапуститьПриложение(КомандаКонвертации, , Истина);

Вариант 4. Внешние компоненты и библиотеки (.NET, iTextSharp, PDFium)

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

Преимущества компонентного подхода:

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

Важные особенности серверного окружения

Выясним системные нюансы, с которыми можно столкнуться при внедрении:

  1. Серверы на Linux: При использовании ImageMagick на дистрибутивах Linux по умолчанию часто отключена работа с PDF из соображений безопасности. Чтобы утилита могла обрабатывать файлы, в конфигурационном файле policy.xml необходимо явно изменить параметр rights="none" на rights="read|write" для типа PDF.
  2. Многостраничные документы: При обработке больших сканов избегайте полного постраничного растрирования через Ghostscript, так как это создает избыточную нагрузку на CPU сервера. Оптимально применять векторное наложение штампа только на выбранную страницу через PDFTK или специализированные библиотеки.
← На главную