При автоматизации документооборота часто возникает задача добавления штампа регистрации (номера, даты, штрихкода или QR-кода) на уже существующие вложенные файлы — сканы документов в формате PDF или растровые изображения JPEG, PNG и TIFF. Разберем, почему встроенного объекта ТабличныйДокумент недостаточно для модификации готового PDF и какими способами можно реализовать наложение штампа.
Метод платформы ТабличныйДокумент.Записать() с параметром ТипФайлаТабличногоДокумента.PDF позволяет лишь сформировать новый PDF-файл «с нуля» на основе макета 1С. Однако если в базу уже загружен скан входящего документа в виде многостраничного PDF, платформа 1С не имеет прямого встроенного метода для открытия существующего PDF-файла и дорисовывания графических элементов поверх его страниц без специализированных механизмов.
Посмотрим на практические варианты решения этой задачи в современных версиях 1С.
Если вы работаете в конфигурациях «1С:Документооборот 8» (редакции 2.1 и 3.0), механизм наложения регистрационного штампа уже встроен в типовой функционал.
Разберем по шагам, как это работает:
Если требуется реализовать собственную доработку в произвольной конфигурации, проанализируем связку 1С с консольными утилитами обработки документов.
Алгоритм решения для PDF состоит из трех этапов:
ЗапуститьПриложение(). Для векторного наложения отлично подходят специализированные утилиты PDFTK или QPDF. Они позволяют наложить штамп поверх исходной страницы без потери текстового слоя (OCR) и без раздувания размера файла.Посмотрим на пример вызова внешней утилиты PDFTK из кода 1С:
КомандаЗапуска = СтрШаблон("pdftk ""%1"" stamp ""%2"" output ""%3""",
ПутьКИсходномуPDF,
ПутьКШтампуPDF,
ПутьКРезультатуPDF);
ЗапуститьПриложение(КомандаЗапуска, , Истина);
Для файлов сканов в формате JPEG или PNG схема наложения выглядит следующим образом:
ImageMagick composite) для наложения штампа на исходный скан с указанием координат смещения (гравитации).Пример команды для ImageMagick:
КомандаКонвертации = СтрШаблон("composite -gravity SouthEast -geometry +50+50 ""%1"" ""%2"" ""%3""",
ПутьККартинкеШтампаPNG,
ПутьКИсходномуJPEG,
ПутьКИтоговомуJPEG);
ЗапуститьПриложение(КомандаКонвертации, , Истина);
Для высоконагруженных систем постоянный запуск сторонних процессов операционной системы через командную строку может вызывать задержки. В таких сценариях целесообразно использовать внешние компоненты Native API или COM-библиотеки (например, на базе iTextSharp, PDFium или PdfSharp).
Преимущества компонентного подхода:
Выясним системные нюансы, с которыми можно столкнуться при внедрении:
policy.xml необходимо явно изменить параметр rights="none" на rights="read|write" для типа PDF.