Статья описывает настройку штампов, которые наносятся на PDF-документы действием «Добавить штамп»: профили и элементы профилей, расчёт размеров и положения, а также сервис QR-кода проверки актуальности документа. Штампы формирует модуль Stamp портала; движок рабочих процессов вызывает его через API, но модуль используется и другими функциями портала.
Из чего состоит штамп
| Объект | Где настраивается | Что определяет |
|---|---|---|
| Действие «Добавить штамп» | Правило автоматизации (Канбан-доска типа файла или процесса) | Когда и на какие документы наносить штамп; размер, точку привязки, координаты и страницу; ссылку на профиль. |
| Профиль штампа | Список «Профили штампов» (Центр администрирования) | Оформление: шрифт, рамку. Объединяет элементы профиля. |
| Элементы профиля | Список «Профили штампов (элементы)» (Центр администрирования) | Содержимое: строки текста, изображения, QR-код, фрагмент отчёта Telerik; их раскладку по строкам и колонкам. |
Профиль штампа
| Атрибут | Обязательный | Описание |
|---|---|---|
| Название | Да | Название профиля; выбирается в действии «Добавить штамп». |
| Шрифт | Да | Файл шрифта (TTF/OTF), которым выводится текст штампа. Используется кодировка Identity-H, поэтому шрифт должен содержать кириллицу. |
| Толщина рамки | Нет | Толщина внешней рамки штампа в pt. 0 или пусто — без рамки. |
| Цвет рамки | Нет | Цвет рамки в формате R,G,B (или R;G;B), значения 0–255. По умолчанию — чёрный. |
| Размер штампа, Расположение от, Расположение штампа, Номер страницы | Для профилей этапов | Заполняются, если профиль назначается этапу процесса и используется действием «Добавить штамп» с профилем из этапа: в этом режиме геометрия берётся из профиля. Смысл атрибутов — как в действии (см. ниже). |
Элементы профиля
Общие атрибуты
| Атрибут | Описание |
|---|---|
| Профиль штампа | Профиль, к которому относится элемент. |
| Порядок | Порядок вывода элементов (сверху вниз, слева направо). |
| Номер группы | Элементы с одинаковым номером группы (> 0) выводятся в одной строке штампа как колонки равной ширины. Если номер группы пуст или 0, элемент занимает отдельную строку. |
| Формула | Формула, вычисляемая в контексте документа, на который наносится штамп (для строк — текст, для изображений — файл, для QR-кода — кодируемый текст). |
Типы элементов
| Тип элемента | Атрибуты | Поведение |
|---|---|---|
| Строка |
| Выводит текст; по вертикали — по центру ячейки. Длинный текст переносится, увеличивая высоту штампа. |
| Изображение |
| Поддерживаются растровые форматы и SVG. Изображение вписывается в «Размер изображения» с сохранением пропорций. Если файл не найден, ячейка остаётся пустой (ошибка пишется в журнал, штамп наносится). |
| QR-код |
| QR-код растягивается на весь размер штампа (ширина × высота из действия). Используйте отдельный профиль с единственным элементом QR и квадратным размером. |
| Шаблон Telerik |
| Отчёт формируется в PDF с параметром id (идентификатор документа); первая страница отчёта вставляется в штамп как изображение. Размер штампа принимается равным размеру страницы отчёта. Строка подключения источников данных подставляется системой (в шаблоне она должна быть пустой). |
Раскладка элементов
Профиль: ширина штампа = 150 pt (из «Размера штампа» действия)
Элемент (Порядок / Номер группы) Результат
───────────────────────────────── ┌──────────────────────────────┐
Строка «В производство работ» (10 / 1) │ В ПРОИЗВОДСТВО РАБОТ │ строка 1: 1 колонка × 150
Строка «Дата» (20 / 2) ├──────────────┬───────────────┤
Строка Format(Date()) (30 / 2) │ Дата │ 01.09.2026 │ строка 2: 2 колонки × 75
Изображение подписи (40 / 0) ├──────────────┴───────────────┤
│ [подпись.png] │ строка 3 (группа = Порядок 40)
└──────────────────────────────┘
Высота штампа = фактическая высота всех строк
- Элементы сортируются по «Порядку» и группируются в строки по «Номеру группы» (для элементов без группы группой служит их «Порядок»).
- Ширина каждой колонки строки = ширина штампа / количество элементов в строке.
- Высота штампа рассчитывается по фактическому содержимому; высота из «Размера штампа» используется, только если рассчитать её не удалось.
Размещение штампа на листе
Параметры задаются в действии «Добавить штамп» (или в профиле этапа):
| Атрибут | Формат | Описание |
|---|---|---|
| Размер штампа | ширина;высота, pt | Ширина определяет ширину колонок; высота пересчитывается по содержимому. |
| Расположение от | значение списка | Угол листа — точка привязки: левый нижний, левый верхний, правый верхний, правый нижний (по умолчанию). |
| Расположение штампа | X;Y, pt | Смещение от точки привязки (см. таблицу). |
| Номер страницы | целое | Пусто — все страницы; N ≥ 1 — страница N; 0 — первая; −N — страница «всего − N». |
| Точка привязки | X — расстояние | Y — расстояние |
|---|---|---|
| Левый нижний угол | от левого края листа до левого края штампа | от нижнего края листа до нижнего края штампа |
| Левый верхний угол | от левого края листа до левого края штампа | от верхнего края листа до верхнего края штампа |
| Правый верхний угол | от правого края листа до левого края штампа | от верхнего края листа до верхнего края штампа |
| Правый нижний угол (по умолчанию) | от правого края листа до левого края штампа | от нижнего края листа до нижнего края штампа |
- 1 pt = 1/72 дюйма ≈ 0,353 мм; A4 — 595 × 842 pt, A3 — 842 × 1191 pt.
- Отсчёт ведётся от видимой области страницы (CropBox). Поворот страницы учитывается: штамп ставится в угол так, как страница видна на экране.
- Для правых углов X — расстояние до левого края штампа, поэтому X должен быть не меньше ширины штампа.
Подбор координат
Подбор координат удобно выполнять на тестовом документе с отдельным правилом, срабатывающим на тестовый статус. Начните с привязки «Правый нижний угол» и X = ширина штампа + 20.
Пример: штамп «В производство работ»
- Создайте профиль «В производство работ»: Шрифт — файл шрифта с кириллицей, Толщина рамки — 1, Цвет рамки —
0,0,255. - Добавьте элементы профиля:
Тип Порядок Номер группы Формула Оформление Строка 10 1 "В ПРОИЗВОДСТВО РАБОТ"Размер шрифта 10, цвет 0,0,255Строка 20 2 "Дата"Размер шрифта 8, выравнивание влево Строка 30 2 Format("{0:dd.MM.yyyy}", Date())ПРОВЕРИТЬ СИНТАКСИСРазмер шрифта 8 Изображение 40 Формула, возвращающая файл подписи ГИПа Размер изображения 60;25 - На Канбан-доске типа файла в столбце статуса «Согласовано» создайте правило с действием «Добавить штамп»: Профиль штампа — «В производство работ», Размер штампа —
150;120, Расположение от — «Правый нижний угол», Расположение штампа —190;245, Номер страницы — пусто (на все листы).
Нанесение штампа перезаписывает атрибут «Файл» документа. Правила на изменение «Файла» (например, сброс статуса при новой версии) должны исключать изменения, сделанные системным пользователем, иначе штамп сбросит статус документа.
QR-код проверки актуальности документа
Модуль Stamp содержит отдельный сервис QR-кода: на все страницы PDF (в отдельном слое «QR Code») наносится QR-код со ссылкой на страницу проверки, которая по идентификатору и ревизии показывает, актуален ли документ. Сервис вызывается через API POST stamp/api/qrcode/Add/{itemId} (например, из действия «Вызов внешнего сервиса») и настраивается параметрами конфигурации портала:
| Параметр | Описание |
|---|---|
Workflow.QRCode.PageUrl | Адрес страницы проверки. В QR-код кодируется <PageUrl>?Rev=<ревизия>&Id=<ID документа> (страница проверки портала — /qrcode/check). |
Workflow.QRCode.Size | Размер QR-кода, ширина;высота в pt. |
Workflow.QRCode.Position | Смещение X;Y в pt (правила — как для штампа). |
Workflow.QRCode.Position.Anchor | Точка привязки: BottomLeft, TopLeft, TopRight, BottomRight (по умолчанию). |
Workflow.Item.Field.Revision | Внутреннее имя атрибута ревизии документа; значение добавляется в QR-код и сверяется при проверке. |
Workflow.Item.Field.Status | Внутреннее имя атрибута статуса, проверяемого на странице проверки. |
Workflow.QRCode.StatusListValid | Идентификаторы (GUID через запятую) статусов, при которых документ считается действительным. |
Workflow.QRCode.StatusListWarning | Идентификаторы статусов, при которых выводится предупреждение. |
Результат проверки (POST stamp/api/qrcode/Check/{itemId}/{revision}):
| Результат | Условие |
|---|---|
| Действителен | Ревизия совпадает, статус входит в StatusListValid (или у документа нет атрибута статуса). |
| Предупреждение | Ревизия совпадает, статус входит в StatusListWarning. |
| Недействителен | Ревизия в QR-коде отличается от текущей либо статус не входит ни в один из списков. |
| Не определён | Не заданы параметры атрибутов ревизии и статуса. |
QR-код можно нанести и через профиль штампа с элементом типа «QR-код» — тогда содержимое QR задаётся формулой, а положение — параметрами действия «Добавить штамп».
Диагностика
| Симптом | Возможная причина |
|---|---|
| Штамп не появился, ошибок нет | Файл не PDF (действие пропускает такие файлы); не выполнены условия правила; правило не сработало на событие. |
| Ошибка при нанесении штампа | Не заполнены «Размер штампа»/«Расположение штампа» или заданы не числами; у элемента «Строка» не заполнены размер или цвет шрифта; не указан шрифт профиля; «Номер страницы» больше числа страниц. |
| Штамп за пределами листа | Для правых углов X меньше ширины штампа; координаты рассчитаны для другого формата листа. |
| Вместо кириллицы пустые символы | В шрифте профиля нет кириллических глифов. |
| После штампа сбросился статус документа | Сработало правило на изменение «Файла» без исключения системного пользователя. |
| Штамп нанесён дважды | Правило сработало повторно (например, статус устанавливался дважды); добавьте условие. |