В конфигурациях 1С, в частности в 1С:Документооборот, часто возникает практическая задача: к карточке документа прикреплены различные файлы (сканированные копии в форматах JPG, PNG, TIFF или многостраничные PDF-документы), и при выводе их на печать требуется нанести в угол страницы штамп с номером, датой регистрации или отметкой электронной подписи. При этом исходный прикрепленный файл изменять нельзя.
Платформа «1С:Предприятие» имеет встроенное ограничение: объект Картинка предназначен только для хранения, смены формата и отображения графических данных. Он не предоставляет методов для прямого рисования, редактирования растра или встраивания векторного текста в графические файлы. Однако решить эту задачу можно несколькими надежными способами. Разберем каждый из них подробно.
Если речь идет об одиночных сканах (JPG, PNG, BMP), мы можем динамически сформировать печатную форму с помощью объекта ТабличныйДокумент, не изменяя исходный графический файл на диске.
Разберем по шагам логику формирования такого документа:
ТабличныйДокумент.ТипРисункаТабличногоДокумента.Картинка с загруженным файлом скана.ВерхнийКолонтитул.ТекстСлева либо накладываем поверх картинки объект типа ТипРисункаТабличногоДокумента.Текст с прозрачным фоном.ТабличныйДокумент.Напечатать().Посмотрим на пример программной реализации вывода изображения со штампом в колонтитуле:
Процедура НапечататьСканСоШтампом(ПутьКФайлу, РегНомер, ДатаДокумента)
ТабДок = Новый ТабличныйДокумент;
ТабДок.Автомасштаб = Истина;
// Настраиваем колонтитул под регистрационный штамп
ТабДок.ВерхнийКолонтитул.Выводить = Истина;
ТабДок.ВерхнийКолонтитул.ТекстСлева = "Входящий № " + РегНомер + " от " + Формат(ДатаДокумента, "ДФ=dd.MM.yyyy");
// Добавляем изображение в табличный документ
КартинкаСкана = Новый Картинка(ПутьКФайлу);
Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = КартинкаСкана;
Рисунок.РазмерКартинки = ИзменениеРазмераКартинки.АвтоРазмер;
// Позиционируем рисунок в таблице
Рисунок.Расположить(ТабДок.Область("R2C1:R50C15"));
// Выводим на печать
ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
КонецПроцедуры
Для универсальной печати различных форматов (включая документы и сканы) можно применить виртуальный принтер Bullzip PDF Printer. Он поддерживает работу через COM-соединение и позволяет динамически накладывать водяные знаки, регистрационные номера, настраивать отступы, шрифт и прозрачность наложения.
Рассмотрим пример кода управления печатью через COM-объект Bullzip:
Процедура СформироватьPDFСоШтампом(Таб, ИмяФайла, ТекстШтампа)
Принтер = Новый COMОбъект("Bullzip.PDFPrinterSettings");
Принтер.SetValue("output", ИмяФайла);
Принтер.SetValue("ShowSaveAS", "never");
Принтер.SetValue("ShowProgress", "no");
Принтер.SetValue("ShowProgressFinished", "no");
Принтер.SetValue("ShowSettings", "never");
Принтер.SetValue("ShowPDF", "no");
Принтер.SetValue("ConfirmOverwrite", "no");
// Настройка водяного знака / регистрационного штампа
Принтер.SetValue("WatermarkText", ТекстШтампа);
Принтер.SetValue("WatermarkVerticalPosition", "top");
Принтер.SetValue("WatermarkHorizontalPosition", "left");
Принтер.SetValue("WatermarkColor", "#FF0000");
Принтер.WriteSettings();
Таб.Автомасштаб = Истина;
Таб.ИмяПринтера = "Bullzip PDF Printer";
PDFФайл = Новый Файл(ИмяФайла);
Если НЕ PDFФайл.Существует() Тогда
Таб.Напечатать(Истина);
Пока НЕ PDFФайл.Существует() Цикл
ОбработкаПрерыванияПользователя();
// Ожидание завершения генерации файла принтером
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Если требуется обработать многостраничный PDF-документ или преобразовать графические файлы перед отправкой на физический принтер, наиболее гибким подходом является вызов консольных утилит через метод платформы ЗапуститьПриложение().
Проанализируем доступные инструменты:
composite или convert с параметром -annotate). Позволяет наложить текстовую надпись или заготовленный графический штамп поверх любого растрового файла с точным указанием координат.Пример формирования команды для консольной утилиты:
СтрокаКоманды = СтрШаблон(
"magick convert ""%1"" -gravity NorthWest -pointsize 14 -fill blue -annotate +20+20 ""Рег. № %2 от %3"" ""%4""",
ПутьКИсходномуФайлу,
НомерДокумента,
Формат(ДатаДокумента, "ДФ=dd.MM.yyyy"),
ПутьКРезультирующемуФайлу
);
ЗапуститьПриложение(СтрокаКоманды, , Истина);
В типовой конфигурации 1С:Документооборот заложена архитектура централизованной обработки входящих файлов. Все прикрепленные сканы и документы могут автоматически преобразовываться на стороне сервера в формат PDF.
После конвертации в PDF система применяет встроенные обработчики для простановки штампа регистрационной карточки (номер, дата, штрихкод, наименование организации) и штампа визуализации электронной подписи. На результирующий PDF-документ накладываются заданные реквизиты, после чего файл передается на печать штатными средствами просмотра и печати PDF.