В последних версиях FastReport VCL появился функционал по добавлению водяных знаков. Это метка, встраиваемая в электронный документ, изображение, видео, аудио или другой цифровой контент. Её цель — подтвердить авторство, защитить от копирования и отследить распространение файла.
В данной статье подробно разберем создание и использование водяных знаков в отчетах FastReport VCL. Пример использования водяных знаков имеется в Demo, поставляемом в составе FastReport VCL.
Создание и редактирование водяных знаков в отчете доступно как в дизайнере отчетов, так и при предварительном просмотре отчета. Редактирование выполняется с помощью соответствующего редактора. Для вызова редактора в меню дизайнера отчетов нажмите «Отчет -> Watermarks…». Для редактирования водяных знаков в предварительном просмотре отчета на панели инструментов доступна соответствующая кнопка. Редактор водяных знаков имеет следующий вид:
Сверху окна располагается панель инструментов, с помощью которой можно создать новый водяной знак, удалить существующий, и изменить его имя. Также можно перемещать водяной знак вниз или вверх по списку. Набор водяных знаков можно загрузить из файла или сохранить в файл для последующего использования в других отчетах. Последние 2 кнопки позволяют выйти из редактора водяных знаков без сохранения или с сохранением изменений.
Справа расположен список имеющихся в отчете водяных знаков. Для удобства использования им можно назначать свои имена.
Водяной знак можно задавать как с помощью текста, так и с помощью изображения. Допустимо одновременно использовать и то, и другое. На рисунке выше редактор на вкладке настройки текста. Видно, что можно задать сам текст, отображаемый в водяном знаке, его цвет, шрифт, поворот и прозрачность. Также можно задать расположение водяного знака – перед основным отчетом или за ним. Сам же текст, используемый в качестве водяного знака, автоматически располагается в центре страницы и имеет выравнивание по центру – это изменить нельзя.
Для выбора изображения, используемого в качестве водяного знака, надо перейти на вкладку «Объект “Рисунок”».
Кнопка «Загрузить» – вызывает диалог загрузки изображения из файла (поддерживаются форматы wmf, emf, gif, tiff, svg, png, ico, bmp, jpg).
Кнопка «Очистить» удаляет загруженное изображение. С помощью чекбоксов можно настроить положение и размеры выбранного изображения.
Флаг «По центру» – заставляет изображение располагаться по центру страницы. Если его сбросить, то изображение будет располагаться в верхнем левом углу.
Флаг «Растягиваемый» – изображение водяного знака будет растянуто, чтобы заполнить всю страницу. Иначе будет использован оригинальный размер изображения.
Флаг «Сохранять пропорции» – при растягивании изображения заставляет его сохранять свои пропорции для избежания искажений.
Меню «Позиция» позволяет задать положение изображения: на заднем плане (на фоне) или на переднем плане.
С помощью поля «Ориентация» можно задать угол поворот рисунка.
Чекбоксами «Горизонтальное отражение» и «Вертикальное отражение» можно отразить изображение водяного знака по горизонтальной или вертикальной оси.
Ползунком «Прозрачность» можно отрегулировать прозрачность изображения. Слева 0% прозрачности, а справа полная 100% прозрачность выбранного вами изображения.
Группа переключателей «Правила отрисовки» позволяет привязать текущий редактируемый водяной знак к страницам отчета. Для правил отрисовки могут быть заданы следующие значения:
Справа вверху располагается предпросмотр водяного знака, а под ним набор флагов, которыми можно задавать видимость полученного водяного знака при предварительном просмотре, при экспорте и при печати.
Фактически водяные знаки представляют собой коллекцию TfrxWatermarks объектов типа TfrxWatermark. В отчете имеется 2 таких коллекции.
В большинстве случаев эти коллекции будут совпадать, однако следует учитывать вариант, когда водяные знаки строятся или удаляются в скрипте. Также, в случае построения композитного отчета в TfrxReport.PreviewPages.Watermarks будут содержаться водяные знаки всех отчетов, входящих в композитный.
Таким образом, если отчет еще не запущен на выполнение, то используйте TfrxReport.Watermarks. Если необходимо изменить уже построенный отчет, то воспользуйтесь TfrxReport.PreviewPages.Watermarks. Доступ к объектам этой коллекции можно осуществлять в коде Delphi с помощью конструкции вида:
frxReport1.Watermarks.Items[1].TextSettings.Text := 'Random text';
В скрипте отчета доступна только коллекция, находящаяся в TfrxReport.PreviewPages.Watermarks. Эта коллекция копируется туда в начале выполнения метода PrepareReport(). Использовать ее в скрипте отчета можно так:
PreviewPages.Watermarks.Items[1].TextSettings.Text := 'Random text';
Новый водяной знак можно добавить с помощью кода следующего кода как в Delphi, так и в скрипте:
NewWatermark := Watermarks.Add
В скрипте отчета, даже если он композитный, доступны только те водяные знаки, которые находятся в текущем обрабатываемом отчете.
Остальные свойства и методы класса TfrxWatermarks совпадают с такими же свойствами объекта Delphi TCollection. Кроме того, класс TfrxWatermarks обладает методами LoadFromFile, SaveToFile, LoadFromStream и SaveToStream, позволяющими читать и писать себя в файл и в поток соответственно.
Класс TfrxWatermark хранит в себе данные для отображения водяного знака и имеет следующие свойства, которые можно редактировать с помощью формы редактирования водяных знаков.
| Свойство | Описание |
| PagesSetupMode | Определяет на каких страницах будет показан водяной знак. Возможные значения: psmAll, psmDesignPagesName, psmPreviewPagesIndex, psmPreviewPagesFlags |
| PageName | Имя страницы (в дизайнере), на которой будет показан водяной знак, если PagesSetupMode = psmDesignPagesName |
| PagesIndex | Строка с индексам страниц готового отчета, на которых будет показан водяной знак. Используется, если PagesSetupMode = psmPreviewPagesIndex |
| PagesFlags | Типы страниц, на которых будет показываться водяной знак, если PagesSetupMode = psmPreviewPagesFlags. Возможные значения: pfFirstPage, pfLastPage, pfOddPages, pfEvenPages |
| VisibilityTypes | Определяет видимость водяного знака в зависимости от того, куда выводится отчет. Может содержать комбинацию следующих значений: vsPreview, vsExport, vsPrint |
| PictureSettings | Свойства изображения, используемого в качестве водяного знака. Рассматриваются ниже |
| TextSettings | Свойства текста, используемого в качестве водяного знака. Рассматриваются ниже |
Свойства текста, используемого в качестве водяного знака: TextSettings
| Свойство | Описание |
| Text | Содержит отображаемый текст |
| Font | Используемый шрифт |
| Rotation | Угол поворота в градусах |
| Position | Позиция водяного знака – перед печатаемыми данными или за ними |
| Transparency | Устанавливает прозрачность водяного знака. Значение может быть от 0 (непрозрачный) до 100 (прозрачный) |
Свойства изображения, используемого в качестве водяного знака: PictureSettings
| Свойство | Описание |
| Picture | Содержит отображаемое изображение |
| Center | Если True, то изображение располагается по центру страницы, иначе в левом верхнем углу |
| Stretched | Если установлено, то изображение растягивается по размеру страницы, иначе используется исходный размер изображения |
| KeepAspectRatio | Если установлено, то растягивание изображения происходит с сохранением пропорций изображения |
| Position | Позиция водяного знака – перед печатаемыми данными или за ними |
| Transparency | Устанавливает прозрачность водяного знака. Значение может быть от 0 (непрозрачный) до 100 (прозрачный) |
Как видим, программно из кода доступны те же самые свойства, что и в диалоге настройки водяного знака. Обратите внимание, что класс хранит в себе несколько свойств, определяющих страницы, на которых будет показываться водяной знак. Однако использоваться будет только то свойство, на которое указывает PagesSetupMode.
Ещё раз подчеркнём, что PictureSettings и TextSettings это разные свойства объекта Watermark! Хоть они и очень похожи, но изменение какого-либо параметра у свойства PictureSettings никак не повлияет на текстовый водяной знак, и наоборот, изменение TextSettings не приведет к изменению параметров изображения водяного знака.
Для наглядности возьмем отчет 3.fr3 из Демоцентра FastReport – в нем достаточно много страниц, и на каждой странице разместим текстовый водяной знак, содержащий номер страницы. Для бэнда Band1 - TfrxPageFooter создадим обработчик OnBeforePrint и разместим там следующий код:
procedure Band1OnBeforePrint(Sender: TfrxComponent); var W: TfrxWatermark; P:string; begin P := IntToStr(<Page>); W:= PreviewPages.Watermarks.Add; W.Name := 'W' + P; W.PagesIndex := P; W.PagesSetupMode := psmPreviewPagesIndex; W.TextSettings.Text := 'Page_' + P; W.VisibilityTypes := vsPreview + vsPrint + vsExport; W.TextSettings.Rotation := 45; W.TextSettings.Font.Size := 72; W.TextSettings.Font.Style := fsBold; W.TextSettings.Position := wpFront; W.TextSettings.Font.Name := 'Times New Roman'; W.TextSettings.Transparency := 70; end; begin end.
В данном коде при печати подвала каждой страницы создается водяной знак. С помощью свойства PagesSytupMode водяному знаку назначается отображение на определенной странице готового отчета, номер страницы задается с помощью свойства PagesIndex, и далее с помощью свойства TextSettings в коде устанавливаются остальные свойства водяного знака.
Должен получиться такой отчет:
Этот скрипт можно использовать и в других отчетах. Обработчик Band1OnBeforePrint должен быть назначен элементу, который печатается 1 единственный раз на каждой странице, например, TfrxPageHeader или TfrxPageFooter.
Аналогичными методами можно воспользоваться и для построения графических водяных знаков. Например, так как изображение SVG фактически является текстом, то можно генерировать изображение для каждой страницы в скрипте отчета или загружать изображения для водяного знака в зависимости от содержимого страницы.
При использовании водяных знаков помните, что они могут быть не видны из-за совпадения с цветом фона. Например, серый водяной знак на сером фоне.
При использовании водяных знаков при экспорте помните, что далеко не все экспорты поддерживают водяные знаки. Некоторые экспорты имеют поддержку водяных знаков лишь частично. Полная поддержка имеется лишь у экспортов в графические форматы: PDF и HTML5. Экспорт в документ Microsoft Word имеет лишь частичную поддержку водяных знаков — это особенность самого Microsoft Word.
При экспорте в PDF, для получения полупрозрачных водяных знаков, не забудьте отметить флажок «Прозрачность» в диалоге экспорта.
В статье подробно рассмотрели функционал добавления водяных знаков в FastReport VCL — как через визуальный интерфейс, так и программно, с помощью кода на Delphi и в скриптах отчётов. Описаны возможности редактора водяных знаков: настройка текстовых и графических меток, регулировка их прозрачности, поворота, расположения и видимости, а также правила отрисовки — в том числе привязка к конкретным страницам (первой/последней, чётной/нечётной, по диапазону номеров и т. д.). Приведён практический пример кода для автоматического создания текстовых водяных знаков с номерами страниц — его можно адаптировать для других отчётов.
Эти инструменты позволяют гибко защищать контент и маркировать отчёты в соответствии с бизнес‑требованиями. При этом важно учитывать ограничения: не все форматы экспорта поддерживают водяные знаки полноценно. Полная поддержка есть у PDF и HTML5, тогда как экспорт в Microsoft Word обеспечивает лишь частичную совместимость.