C#/VB.NET: Adicionar marcas d'água de texto ao PDF

2023-08-24 08:53:06

Para evitar que seu documento PDF seja usado de maneira não autorizada, você pode colocar uma marca d'água no documento com texto ou imagem. Neste artigo, você aprenderá como programaticamente adicione marcas d'água de texto (marcas d'água de linha única e multilinha) a PDF em C# e VB.NET usando Spire.PDF for .NET.

Instalar o Spire.PDF for .NET

Para começar, você precisa adicionar os arquivos DLL incluídos no pacote Spire.PDF for.NET como referências em seu projeto .NET. Os arquivos DLLs podem ser baixados deste link ou instalado via NuGet.

  • Package Manager
PM> Install-Package Spire.PDF 

Adicionar uma marca d'água de texto ao PDF

O Spire.PDF não fornece uma interface ou uma classe para lidar com marcas d'água em arquivos PDF. Você pode, no entanto, desenhar texto como "confidencial", "uso interno" ou "rascunho" em cada página para imitar o efeito da marca d'água. A seguir estão as principais etapas para adicionar uma marca d'água de texto a todas as páginas de um documento PDF.

  • Crie um objeto PdfDocument e carregue um documento PDF de amostra usando o método PdfDocument.LoadFromFile().
  • Crie um objeto PdfTrueTypeFont, especifique o texto da marca d'água e meça o tamanho do texto usando o método PdfFontBase.MeasureString().
  • Atravesse todas as páginas do documento.
  • Traduza o sistema de coordenadas de uma determinada página por coordenadas especificadas usando o método PdfPageBase.Canvas.TraslateTransform() e gire o sistema de coordenadas 45 graus no sentido anti-horário usando o método PdfPageBase.Canvas.RotateTransform(). Isso garante que a marca d'água apareça no meio da página em um ângulo de 45 graus.
  • Desenhe o texto da marca d'água na página usando o método PdfPageBase.Canvas.DrawString().
  • Salve o documento em um arquivo PDF diferente usando o método PdfDocument.SaveToFile().
  • C#
  • VB.NET
using Spire.Pdf;
    using Spire.Pdf.Graphics;
    using System.Drawing;
    
    namespace AddTextWatermarkToPdf
    {
        class Program
        {
            static void Main(string[] args)
            {
                //Create a PdfDocument object
                PdfDocument pdf = new PdfDocument();
    
                //Load a sample PDF document
                pdf.LoadFromFile(@"C:\Users\Administrator\Desktop\sample.pdf");
    
                //Create a PdfTrueTypeFont object
                PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", 50f), true);
    
                //Set the watermark text
                string text = "CONFIDENTIAL";
    
                //Measure the text size
                SizeF textSize = font.MeasureString(text);
    
                //Calculate the values of two offset variables,
                //which will be used to calculate the translation amount of the coordinate system
                float offset1 = (float)(textSize.Width * System.Math.Sqrt(2) / 4);
                float offset2 = (float)(textSize.Height * System.Math.Sqrt(2) / 4);
    
                //Traverse all the pages in the document
                foreach (PdfPageBase page in pdf.Pages)
                {
                    //Set the page transparency
                    page.Canvas.SetTransparency(0.8f);
    
                    //Translate the coordinate system by specified coordinates
                    page.Canvas.TranslateTransform(page.Canvas.Size.Width / 2 - offset1 - offset2, page.Canvas.Size.Height / 2 + offset1 - offset2);
    
                    //Rotate the coordinate system 45 degrees counterclockwise
                    page.Canvas.RotateTransform(-45);
    
                    //Draw watermark text on the page
                    page.Canvas.DrawString(text, font, PdfBrushes.DarkGray, 0, 0);
                }
    
                //Save the changes to another file
                pdf.SaveToFile("TextWatermark.pdf");
            }
        }
    }
Imports Spire.Pdf
    Imports Spire.Pdf.Graphics
    Imports System.Drawing
    
    Namespace AddTextWatermarkToPdf
        Class Program
            Shared  Sub Main(ByVal args() As String)
                'Create a PdfDocument object
                Dim pdf As PdfDocument =  New PdfDocument()
    
                'Load a sample PDF document
                pdf.LoadFromFile("C:\Users\Administrator\Desktop\sample.pdf")
    
                'Create a PdfTrueTypeFont object
                Dim font As PdfTrueTypeFont =  New PdfTrueTypeFont(New Font("Arial",50f),True)
    
                'Set the watermark text
                Dim text As String =  "CONFIDENTIAL"
    
                'Measure the text size
                Dim textSize As SizeF =  font.MeasureString(text)
    
                'Calculate the values of two offset variables,
                'which will be used to calculate the translation amount of the coordinate system
                Dim offset1 As single = CType((textSize.Width * System.Math.Sqrt(2) / 4), single)
                Dim offset2 As single = CType((textSize.Height * System.Math.Sqrt(2) / 4), single)
    
                'Traverse all the pages in the document
                Dim page As PdfPageBase
                For Each page In pdf.Pages
                    'Set the page transparency
                    page.Canvas.SetTransparency(0.8f)
    
                    'Translate the coordinate system by specified coordinates
                    page.Canvas.TranslateTransform(page.Canvas.Size.Width / 2 - offset1 - offset2, page.Canvas.Size.Height / 2 + offset1 - offset2)
    
                    'Rotate the coordinate system 45 degrees counterclockwise
                    page.Canvas.RotateTransform(-45)
    
                    'Draw watermark text on the page
                    page.Canvas.DrawString(text, font, PdfBrushes.DarkGray, 0, 0)
                Next
    
                'Save the changes to another file
                pdf.SaveToFile("TextWatermark.pdf")
            End Sub
        End Class
    End Namespace

C#/VB.NET: Add Text Watermarks to PDF

Adicionar marcas d'água de texto de várias linhas ao PDF

Há momentos em que você pode querer adicionar mais de uma linha de marcas d'água de texto ao seu documento. Para obter o efeito de marca d'água lado a lado, você pode usar a classe PdfTilingBrush, que produz um padrão lado a lado que é repetido para preencher uma área de gráficos. A seguir estão as principais etapas para adicionar marcas d'água de várias linhas a um documento PDF.

  • Crie um objeto PdfDocument e carregue um documento PDF de amostra usando o método PdfDocument.LoadFromFile().
  • Crie um método personalizado InsertMultiLineTextWatermark(PdfPageBase page, String watermarkText, fonte PdfTrueTypeFont, int rowNum, int columnNum) para adicionar marcas d'água de texto de várias linhas a uma página PDF. Os parâmetros rowNum e columnNum especificam o número da linha e da coluna das marcas d'água lado a lado.
  • Percorra todas as páginas do documento e chame o método personalizado InsertMultiLineTextWatermark() para aplicar marcas d'água a cada página.
  • Salve o documento em outro arquivo usando o método PdfDocument.SaveToFile().
  • C#
  • VB.NET
using System;
    using Spire.Pdf;
    using Spire.Pdf.Graphics;
    using System.Drawing;
    
    namespace AddMultiLineTextWatermark
    {
        class Program
        {
            static void Main(string[] args)
            {
                //Create a PdfDocument instance
                PdfDocument pdf = new PdfDocument();
    
                //Load a sample PDF document
                pdf.LoadFromFile(@"C:\Users\Administrator\Desktop\sample.pdf");
    
                //Create a PdfTrueTypeFont object
                PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", 20f), true);
    
                //Traverse all the pages
                for (int i = 0; i < pdf.Pages.Count; i++)
                {
                    //Call InsertMultiLineTextWatermark() method to add text watermarks to the specified page
                    InsertMultiLineTextWatermark(pdf.Pages[i], "E-ICEBLUE CO LTD", font, 3, 3);
                }
    
                //Save the document to another file
                pdf.SaveToFile("MultiLineTextWatermark.pdf");
            }
    
            //Create a custom method to insert multi-line text watermarks to a page
            static void InsertMultiLineTextWatermark(PdfPageBase page, String watermarkText, PdfTrueTypeFont font, int rowNum, int columnNum)
            {
                //Measure the text size
                SizeF textSize = font.MeasureString(watermarkText);
    
                //Calculate the values of two offset variables, which will be used to calculate the translation amount of coordinate system
                float offset1 = (float)(textSize.Width * System.Math.Sqrt(2) / 4);
                float offset2 = (float)(textSize.Height * System.Math.Sqrt(2) / 4);
    
                //Create a tile brush
                PdfTilingBrush brush = new PdfTilingBrush(new SizeF(page.ActualSize.Width / columnNum, page.ActualSize.Height / rowNum));
                brush.Graphics.SetTransparency(0.3f);
                brush.Graphics.Save();
                brush.Graphics.TranslateTransform(brush.Size.Width / 2 - offset1 - offset2, brush.Size.Height / 2 + offset1 - offset2);
                brush.Graphics.RotateTransform(-45);
    
                //Draw watermark text on the tile brush
                brush.Graphics.DrawString(watermarkText, font, PdfBrushes.Violet, 0, 0);
                brush.Graphics.Restore();
    
                //Draw a rectangle (that covers the whole page) using the tile brush
                page.Canvas.DrawRectangle(brush, new RectangleF(new PointF(0, 0), page.ActualSize));
            }
        }
    }
Imports System
    Imports Spire.Pdf
    Imports Spire.Pdf.Graphics
    Imports System.Drawing
    
    Namespace AddMultiLineTextWatermark
        Class Program
            Shared  Sub Main(ByVal args() As String)
                'Create a PdfDocument instance
                Dim pdf As PdfDocument =  New PdfDocument()
    
                'Load a sample PDF document
                pdf.LoadFromFile("C:\Users\Administrator\Desktop\sample.pdf")
    
                'Create a PdfTrueTypeFont object
                Dim font As PdfTrueTypeFont =  New PdfTrueTypeFont(New Font("Arial",20f),True)
    
                'Traverse all the pages
                Dim i As Integer
                For  i = 0 To  pdf.Pages.Count- 1  Step  i + 1
                    'Call InsertMultiLineTextWatermark() method to add text watermarks to the specified page
                    InsertMultiLineTextWatermark(pdf.Pages(i), "E-ICEBLUE CO LTD", font, 3, 3)
                Next
    
                'Save the document to another file
                pdf.SaveToFile("MultiLineTextWatermark.pdf")
            End Sub
    
            'Create a custom method to insert multi-line text watermarks to a page
            Shared  Sub InsertMultiLineTextWatermark(ByVal page As PdfPageBase, ByVal watermarkText As String, ByVal font As PdfTrueTypeFont, ByVal rowNum As Integer, ByVal columnNum As Integer)
                'Measure the text size
                Dim textSize As SizeF =  font.MeasureString(watermarkText)
    
                'Calculate the values of two offset variables, which will be used to calculate the translation amount of coordinate system
                Dim offset1 As single = CType((textSize.Width * System.Math.Sqrt(2) / 4), single)
                Dim offset2 As single = CType((textSize.Height * System.Math.Sqrt(2) / 4), single)
    
                'Create a tile brush
                Dim brush As PdfTilingBrush =  New PdfTilingBrush(New SizeF(page.ActualSize.Width / columnNum,page.ActualSize.Height / rowNum))
                brush.Graphics.SetTransparency(0.3f)
                brush.Graphics.Save()
                brush.Graphics.TranslateTransform(brush.Size.Width / 2 - offset1 - offset2, brush.Size.Height / 2 + offset1 - offset2)
                brush.Graphics.RotateTransform(-45)
    
                'Draw watermark text on the tile brush
                brush.Graphics.DrawString(watermarkText, font, PdfBrushes.Violet, 0, 0)
                brush.Graphics.Restore()
    
                'Draw a rectangle (that covers the whole page) using the tile brush
                page.Canvas.DrawRectangle(brush, New RectangleF(New PointF(0, 0), page.ActualSize))
            End Sub
        End Class
    End Namespace

C#/VB.NET: Add Text Watermarks to PDF

Solicitar uma licença temporária

Se você deseja remover a mensagem de avaliação dos documentos gerados ou se livrar das limitações de função, por favor solicite uma licença de teste de 30 dias para você mesmo.

Veja também