Как в 1С напечатать штамп или регистрационную информацию поверх графических файлов и PDF

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

В конфигурациях 1С, в частности в 1С:Документооборот, часто возникает практическая задача: к карточке документа прикреплены различные файлы (сканированные копии в форматах JPG, PNG, TIFF или многостраничные PDF-документы), и при выводе их на печать требуется нанести в угол страницы штамп с номером, датой регистрации или отметкой электронной подписи. При этом исходный прикрепленный файл изменять нельзя.

Платформа «1С:Предприятие» имеет встроенное ограничение: объект Картинка предназначен только для хранения, смены формата и отображения графических данных. Он не предоставляет методов для прямого рисования, редактирования растра или встраивания векторного текста в графические файлы. Однако решить эту задачу можно несколькими надежными способами. Разберем каждый из них подробно.

Способ 1. Использование табличного документа и колонтитулов (штатный метод для растровых изображений)

Если речь идет об одиночных сканах (JPG, PNG, BMP), мы можем динамически сформировать печатную форму с помощью объекта ТабличныйДокумент, не изменяя исходный графический файл на диске.

Разберем по шагам логику формирования такого документа:

  1. Создаем программно объект ТабличныйДокумент.
  2. Вставляем в него рисунок типа ТипРисункаТабличногоДокумента.Картинка с загруженным файлом скана.
  3. Для добавления регистрационных данных используем верхний колонтитул документа через свойство ВерхнийКолонтитул.ТекстСлева либо накладываем поверх картинки объект типа ТипРисункаТабличногоДокумента.Текст с прозрачным фоном.
  4. Отправляем готовый табличный документ на принтер методом ТабличныйДокумент.Напечатать().

Посмотрим на пример программной реализации вывода изображения со штампом в колонтитуле:


Процедура НапечататьСканСоШтампом(ПутьКФайлу, РегНомер, ДатаДокумента)
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Автомасштаб = Истина;
    
    // Настраиваем колонтитул под регистрационный штамп
    ТабДок.ВерхнийКолонтитул.Выводить = Истина;
    ТабДок.ВерхнийКолонтитул.ТекстСлева = "Входящий № " + РегНомер + " от " + Формат(ДатаДокумента, "ДФ=dd.MM.yyyy");
    
    // Добавляем изображение в табличный документ
    КартинкаСкана = Новый Картинка(ПутьКФайлу);
    Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
    Рисунок.Картинка = КартинкаСкана;
    Рисунок.РазмерКартинки = ИзменениеРазмераКартинки.АвтоРазмер;
    
    // Позиционируем рисунок в таблице
    Рисунок.Расположить(ТабДок.Область("R2C1:R50C15"));
    
    // Выводим на печать
    ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
КонецПроцедуры

Способ 2. Использование виртуального PDF-принтера Bullzip PDF Printer

Для универсальной печати различных форматов (включая документы и сканы) можно применить виртуальный принтер 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Файл.Существует() Цикл
            ОбработкаПрерыванияПользователя();
            // Ожидание завершения генерации файла принтером
        КонецЦикла;
    КонецЕсли;
КонецПроцедуры

Способ 3. Обработка графики и PDF через внешние утилиты (ImageMagick, Ghostscript, QPDF)

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

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

  1. ImageMagick: утилита командной строки, которая умеет выполнять композицию изображений (команда composite или convert с параметром -annotate). Позволяет наложить текстовую надпись или заготовленный графический штамп поверх любого растрового файла с точным указанием координат.
  2. Ghostscript: используется в связке с ImageMagick для работы с многостраничными PDF и PostScript-файлами.
  3. QPDF / PDFtk / Coherent PDF: специализированные утилиты для работы с PDF. Мы можем сгенерировать средствами 1С маленький PDF-файл со штампом (из табличного документа) и выполнить операцию наложения слоя (overlay/stamp) на целевой документ перед его отправкой на принтер.

Пример формирования команды для консольной утилиты:


СтрокаКоманды = СтрШаблон(
    "magick convert ""%1"" -gravity NorthWest -pointsize 14 -fill blue -annotate +20+20 ""Рег. № %2 от %3"" ""%4""",
    ПутьКИсходномуФайлу,
    НомерДокумента,
    Формат(ДатаДокумента, "ДФ=dd.MM.yyyy"),
    ПутьКРезультирующемуФайлу
);
ЗапуститьПриложение(СтрокаКоманды, , Истина);

Способ 4. Штатные механизмы конфигурации «1С:Документооборот»

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

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

← На главную