Nas versões recentes do FastReport VCL, foi adicionada a funcionalidade para adicionar marcas d'água. Uma marca d'água é uma marca incorporada em um documento eletrônico, imagem, vídeo, áudio ou outro conteúdo digital. Seu objetivo é confirmar a autoria, proteger contra cópia e rastrear a distribuição do arquivo.
Neste artigo, abordaremos detalhadamente a criação e o uso de marcas d'água em relatórios do FastReport VCL. Um exemplo de uso de marcas d'água está disponível no Demo fornecido com o FastReport VCL.
A criação e edição de marcas d'água em um relatório estão disponíveis tanto no Designer de relatórios quanto na visualização prévia do relatório. A edição é feita por meio de um editor apropriado. Para abrir o editor no menu do Designer de relatórios, clique em “Relatório → Watermarks...”. Para editar marcas d'água na visualização prévia do relatório, um botão correspondente está disponível na barra de ferramentas. O editor de marcas d'água tem a seguinte aparência:
Na parte superior da janela, há uma barra de ferramentas com a qual você pode criar uma nova marca d'água, excluir uma existente e alterar seu nome. Você também pode mover a marca d'água para baixo ou para cima na lista. O conjunto de marcas d'água pode ser carregado de um arquivo ou salvo em um arquivo para uso posterior em outros relatórios. Os últimos dois botões permitem sair do editor de marcas d'água sem salvar ou com salvamento das alterações.
À direita, está a lista de marcas d'água existentes no relatório. Para facilitar o uso, você pode atribuir nomes personalizados a elas.
A marca d'água pode ser definida tanto por meio de texto quanto por meio de imagem. É permitido usar ambos simultaneamente. Na figura acima, o editor está na aba de configuração de texto. É possível definir o texto exibido na marca d'água, sua cor, fonte, rotação e transparência. Também é possível definir a posição da marca d'água — antes ou depois do relatório principal. O texto usado como marca d'água é automaticamente centralizado na página e alinhado ao centro — isso não pode ser alterado.
Para selecionar a imagem usada como marca d'água, você precisa ir até a aba “Objeto Figura”.
Botão “Carregar” — abre um diálogo para carregar imagem de um arquivo (formatos suportados: wmf, emf, gif, tiff, svg, png, ico, bmp, jpg).
Botão “Limpar” — remove a imagem carregada. Com as caixas de seleção, você pode ajustar a posição e o tamanho da imagem selecionada.
Caixa de seleção “Centralizar” — faz com que a imagem seja posicionada no centro da página. Se desmarcada, a imagem será posicionada no canto superior esquerdo.
Caixa de seleção “Esticar” — a imagem da marca d'água será esticada para preencher toda a página. Caso contrário, o tamanho original da imagem será usado.
Caixa de seleção “Manter proporções” — ao esticar a imagem, faz com que ela mantenha suas proporções para evitar distorções.
Menu “Posição” — permite definir a posição da imagem: em segundo plano (no fundo) ou em primeiro plano.
Com o campo “Orientação”, você pode definir o ângulo de rotação da imagem.
Com as caixas de seleção “Espelhamento horizontal” e “Espelhamento vertical”, você pode espelhar a imagem da marca d'água no eixo horizontal ou vertical.
Com o controle deslizante “Transparência”, você pode ajustar a transparência da imagem. À esquerda, 0% de transparência; à direita, 100% de transparência da imagem selecionada.
O grupo de botões de opção “Regras de renderização” permite vincular a marca d'água atualmente editada às páginas do relatório. As seguintes opções podem ser definidas para as regras de renderização:
No canto superior direito, há uma pré-visualização da marca d'água e, abaixo dela, um conjunto de caixas de seleção com as quais você pode definir a visibilidade da marca d'água na pré-visualização, na exportação e na impressão.
Na prática, as marcas d'água representam uma coleção TfrxWatermarks de objetos do tipo TfrxWatermark. O relatório possui 2 dessas coleções:
Na maioria dos casos, essas coleções coincidirão, mas deve-se considerar o caso em que as marcas d'água são construídas ou removidas no script. Além disso, no caso de construção de um relatório composto, TfrxReport.PreviewPages.Watermarks conterá as marcas d'água de todos os relatórios que compõem o composto.
Portanto, se o relatório ainda não foi executado, use TfrxReport.Watermarks. Se for necessário alterar um relatório já construído, use TfrxReport.PreviewPages.Watermarks. O acesso aos objetos desta coleção pode ser feito no código Delphi usando uma construção como:
frxReport1.Watermarks.Items[1].TextSettings.Text := 'Random text';
No script do relatório, apenas a coleção que está em TfrxReport.PreviewPages.Watermarks está disponível. Esta coleção é copiada para lá no início da execução do método PrepareReport(). Pode ser usada no script do relatório assim:
PreviewPages.Watermarks.Items[1].TextSettings.Text := 'Random text';
Uma nova marca d'água pode ser adicionada com o seguinte código, tanto em Delphi quanto no script:
NewWatermark := Watermarks.Add
No script do relatório, mesmo que seja composto, apenas as marcas d'água que estão no relatório atual sendo processado estão disponíveis.
As demais propriedades e métodos da classe TfrxWatermarks coincidem com as mesmas propriedades do objeto Delphi TCollection. Além disso, a classe TfrxWatermarks possui os métodos LoadFromFile, SaveToFile, LoadFromStream e SaveToStream, que permitem ler e gravar a si mesma em um arquivo e em um fluxo, respectivamente.
A classe TfrxWatermark armazena os dados para exibição da marca d'água e possui as seguintes propriedades, que podem ser editadas por meio do formulário de edição de marcas d'água:
| Propriedade | Descrição |
| PagesSetupMode | Define em quais páginas a marca d'água será exibida. Valores possíveis: psmAll, psmDesignPagesName, psmPreviewPagesIndex, psmPreviewPagesFlags |
| PageName | Nome da página (no Designer) na qual a marca d'água será exibida, se PagesSetupMode = psmDesignPagesName |
| PagesIndex | String com os índices das páginas do relatório final nas quais a marca d'água será exibida. Usado se PagesSetupMode = psmPreviewPagesIndex |
| PagesFlags | Tipos de páginas nas quais a marca d'água será exibida, se PagesSetupMode = psmPreviewPagesFlags. Valores possíveis: pfFirstPage, pfLastPage, pfOddPages, pfEvenPages |
| VisibilityTypes | Define a visibilidade da marca d'água, dependendo de onde o relatório é exportado. Pode conter uma combinação dos seguintes valores: vsPreview, vsExport, vsPrint |
| PictureSettings | Propriedades da imagem usada como marca d'água. Descritas abaixo |
| TextSettings | Propriedades do texto usado como marca d'água. Descritas abaixo |
Propriedades do texto usado como marca d'água: TextSettings
| Propriedade | Descrição |
| Text | Contém o texto exibido |
| Font | Fonte usada |
| Rotation | Ângulo de rotação em graus |
| Position | Posição da marca d'água — antes ou depois dos dados impressos |
| Transparency | Define a transparência da marca d'água. O valor pode ser de 0 (opaco) a 100 (transparente) |
Propriedades da imagem usada como marca d'água: PictureSettings
| Propriedade | Descrição |
| Picture | Contém a imagem exibida |
| Center | Se True, a imagem é posicionada no centro da página; caso contrário, no canto superior esquerdo |
| Stretched | Se definido, a imagem é esticada para o tamanho da página; caso contrário, o tamanho original da imagem é usado |
| KeepAspectRatio | Se definido, o esticamento da imagem ocorre mantendo as proporções da imagem |
| Position | Posição da marca d'água — antes ou depois dos dados impressos |
| Transparency | Define a transparência da marca d'água. O valor pode ser de 0 (opaco) a 100 (transparente) |
Como podemos ver, programaticamente, via código, estão disponíveis as mesmas propriedades que no diálogo de configuração da marca d'água. Observe que a classe armazena várias propriedades que definem as páginas nas quais a marca d'água será exibida. No entanto, apenas a propriedade apontada por PagesSetupMode será usada.
Ressaltamos novamente que PictureSettings e TextSettings são propriedades diferentes do objeto Watermark! Embora sejam muito semelhantes, alterar qualquer parâmetro na propriedade PictureSettings não afetará a marca d'água de texto, e vice-versa, alterar TextSettings não levará à alteração dos parâmetros da imagem da marca d'água.
Para ilustrar, vamos pegar o relatório 3.fr3 do Demo Center do FastReport — ele tem muitas páginas, e em cada página colocaremos uma marca d'água de texto contendo o número da página. Para a band Band1 (TfrxPageFooter), criaremos um manipulador OnBeforePrint e colocaremos o seguinte código:
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.
Neste código, ao imprimir o rodapé de cada página, uma marca d'água é criada. Usando a propriedade PagesSetupMode, a marca d'água é definida para ser exibida em uma página específica do relatório final; o número da página é definido usando a propriedade PagesIndex e, em seguida, usando a propriedade TextSettings, as demais propriedades da marca d'água são configuradas no código.
O resultado deve ser um relatório assim:
Este script pode ser usado em outros relatórios. O manipulador Band1OnBeforePrint deve ser atribuído a um elemento que seja impresso uma única vez em cada página, por exemplo, TfrxPageHeader ou TfrxPageFooter.
Métodos semelhantes podem ser usados para construir marcas d'água gráficas. Por exemplo, como uma imagem SVG é essencialmente texto, você pode gerar uma imagem para cada página no script do relatório ou carregar imagens para a marca d'água dependendo do conteúdo da página.
Ao usar marcas d'água, lembre-se de que elas podem não ser visíveis devido à coincidência com a cor de fundo. Por exemplo, uma marca d'água cinza sobre fundo cinza.
Ao usar marcas d'água na exportação, lembre-se de que nem todos os formatos de exportação suportam marcas d'água. Algumas exportações têm suporte parcial a marcas d'água. Suporte completo está disponível apenas para exportações em formatos gráficos: PDF e HTML5. A exportação para documento Microsoft Word tem apenas suporte parcial a marcas d'água — isso é uma característica do próprio Microsoft Word.
Ao exportar para PDF, para obter marcas d'água semitransparentes, não se esqueça de marcar a caixa de seleção “Transparência” no diálogo de exportação.
O artigo abordou detalhadamente a funcionalidade de adição de marcas d'água no FastReport VCL — tanto por meio da interface visual quanto programaticamente, com código Delphi e em scripts de relatórios. Foram descritas as capacidades do editor de marcas d'água: configuração de marcas textuais e gráficas, ajuste de transparência, rotação, posicionamento e visibilidade, bem como regras de renderização — incluindo vinculação a páginas específicas (primeira/última, par/ímpar, por intervalo de números etc.). Um exemplo prático de código foi fornecido para a criação automática de marcas d'água textuais com números de página — que pode ser adaptado para outros relatórios.
Essas ferramentas permitem proteger flexivelmente o conteúdo e marcar relatórios de acordo com os requisitos de negócio. É importante considerar as limitações: nem todos os formatos de exportação suportam marcas d'água completamente. Suporte completo está disponível para PDF e HTML5, enquanto a exportação para Microsoft Word oferece apenas compatibilidade parcial.