在PDF中插入文本水印

C#/VB.NET:在PDF文档中插入文本水印

水印是显示在文档中现有内容前面或后面的文本或图像。它通常用于防止文档被非法使用。接下来,我将介绍如何使用 Spire.PDF for .NET  C#VB.NET 程序中为PDF文档添加单行或多行文本水印

 

 

安装 Spire.PDF for .NET

首先,我们需要将 Spire.PDF for .NET 包中包含的 DLL 文件添加为 .NET 项目中的引用。可以从此链接下载 DLL 文件,也可以通过 NuGet 安装 DLL 文件。

 

PM> Install-Package Spire.PDF

 

为PDF添加单行文本水印

C#

using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
 
namespace AddTextWatermarkToPdf
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建PdfDocument类的对象
            PdfDocument pdf = new PdfDocument();
 
            //加载一个PDF文档实例
            pdf.LoadFromFile(@"sample.pdf");
 
            //创建PdfTrueTypeFont类的对象
            PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋体", 55f), true);
 
            //设置水印的文本内容
            string text = "请勿盗用";
 
            //设置文本水印大小
            SizeF textSize = font.MeasureString(text);
 
            //计算两个偏移变量的值,用于计算坐标系的平移量
            float offset1 = (float)(textSize.Width * System.Math.Sqrt(2) / 4);
            float offset2 = (float)(textSize.Height * System.Math.Sqrt(2) / 4);
 
            //遍历文档中所有页面
            foreach (PdfPageBase page in pdf.Pages)
            {
                //设置页面透明度
                page.Canvas.SetTransparency(0.8f);
 
                //将坐标系统平移到右下角
                page.Canvas.TranslateTransform(page.Canvas.Size.Width / 2 - offset1 - offset2, page.Canvas.Size.Height / 2 + offset1 - offset2);
 
                //将坐标系逆时针旋转45度
                page.Canvas.RotateTransform(-45);
 
                //在页面上绘制文本水印
                page.Canvas.DrawString(text, font, PdfBrushes.DarkGray, 0, 0);
            }
 
            //保存更改到另一个文件
            pdf.SaveToFile("TextWatermark.pdf");
        }
    }
}

VB.NET

Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System.Drawing
  
Namespace AddTextWatermarkToPdf
    Class Program
        Shared  Sub Main(ByVal args() As String)
            '创建PdfDocument类的对象
            Dim pdf As PdfDocument =  New PdfDocument() 
  
            '加载一个PDF文档实例
            pdf.LoadFromFile("C: sample.pdf")
  
            '创建PdfTrueTypeFont类的对象
            Dim font As PdfTrueTypeFont =  New PdfTrueTypeFont(New Font("宋体",55f),True) 
  
            '设置水印的文本内容
            Dim text As String =  "请勿盗用"
  
            '设置文本水印大小
            Dim textSize As SizeF =  font.MeasureString(text) 
  
            '计算两个偏移变量的值,用于计算坐标系的平移量
            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)
  
            '遍历文档中所有页面
            Dim page As PdfPageBase
            For Each page In pdf.Pages
                '设置页面透明度
                page.Canvas.SetTransparency(0.8f)
  
                '将坐标系统平移到右下角
                page.Canvas.TranslateTransform(page.Canvas.Size.Width / 2 - offset1 - offset2, page.Canvas.Size.Height / 2 + offset1 - offset2)
  
                '将坐标系逆时针旋转45度
                page.Canvas.RotateTransform(-45)
  
                '在页面上添绘制文本水印
                page.Canvas.DrawString(text, font, PdfBrushes.DarkGray, 0, 0)
            Next
  
            '保存更改到另一个文件
            pdf.SaveToFile("TextWatermark.pdf")
        End Sub
    End Class
End Namespace

PDF添加多行文本水印

C#

using System;
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
 
namespace AddMultiLineTextWatermark
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建PdfDocument类的对象
            PdfDocument pdf = new PdfDocument();
 
            //加载一个PDF文档
            pdf.LoadFromFile(@"sample.pdf");
 
            //创建PdfTrueTypeFont类的对象
            PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋体", 20f), true);
 
            //遍历文档页面
            for (int i = 0; i < pdf.Pages.Count; i++)
            {
                //在特定页面上添加文本水印
                InsertTextWatermark(pdf.Pages[i], "请勿复制", font, 3, 3);
            }
 
            //保存文件
            pdf.SaveToFile("MultiLineTextWaterMark.pdf");
            System.Diagnostics.Process.Start("MultiLineTextWaterMark.pdf");
        }
 
        static void InsertTextWatermark(PdfPageBase page, String watermarkText, PdfTrueTypeFont font, int rowNum, int columnNum)
        {
 
            //设置文本水印大小
            SizeF textSize = font.MeasureString(watermarkText);
 
            //计算两个偏移变量的值,用于计算坐标系的平移量
            float offset1 = (float)(textSize.Width * System.Math.Sqrt(2) / 4);
            float offset2 = (float)(textSize.Height * System.Math.Sqrt(2) / 4);
 
            //创建平铺画刷
            PdfTilingBrush brush = new PdfTilingBrush(new SizeF(page.ActualSize.Width / columnNum, page.ActualSize.Height / rowNum));
            brush.Graphics.SetTransparency(0.5f);
            brush.Graphics.Save();
            brush.Graphics.TranslateTransform(brush.Size.Width / 2 - offset1 - offset2, brush.Size.Height / 2 + offset1 - offset2);
            brush.Graphics.RotateTransform(-45);
 
            //在平铺画刷绘制文本水印
            brush.Graphics.DrawString(watermarkText, font, PdfBrushes.Violet, 0, 0);
            brush.Graphics.Restore();
  
            //使用平铺画刷绘制一个覆盖整个页面的矩形
            page.Canvas.DrawRectangle(brush, new RectangleF(new PointF(0, 0), page.ActualSize));
        }
    }
}

VB.NET

Imports System
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System.Drawing
  
Namespace AddMultiLineTextWatermark
    Class Program
        Shared  Sub Main(ByVal args() As String)
            '创建PdfDocument类的对象
            Dim pdf As PdfDocument =  New PdfDocument() 
  
            '加载一个PDF文档
            pdf.LoadFromFile("sample.pdf")
  
            '创建PdfTrueTypeFont类的对象
            Dim font As PdfTrueTypeFont =  New PdfTrueTypeFont(New Font("宋体",20f),True) 
  
            '遍历文档页面
            Dim i As Integer
            For  i = 0 To  pdf.Pages.Count- 1  Step  i + 1
                '在特定页面上添加文本水印
                InsertTextWatermark(pdf.Pages(i), "请勿复制", font, 3, 3)
            Next
  
            '保存文件
            pdf.SaveToFile("MultiLineTextWaterMark.pdf")
            System.Diagnostics.Process.Start("MultiLineTextWaterMark.pdf")
        End Sub
  
        Shared  Sub InsertTextWatermark(ByVal page As PdfPageBase, ByVal watermarkText As String, ByVal font As PdfTrueTypeFont, ByVal rowNum As Integer, ByVal columnNum As Integer)
  
            '设置文本水印大小
            Dim textSize As SizeF =  font.MeasureString(watermarkText) 
  
            '计算两个偏移变量的值,用于计算坐标系的平移量            
float offset1 = (float)(textSize.Width * System.Math.Sqrt(2) / 4);
            float offset2 = (float)(textSize.Height * System.Math.Sqrt(2) / 4);
  
            '创建一个平铺画刷
            Dim brush As PdfTilingBrush =  New PdfTilingBrush(New SizeF(page.ActualSize.Width / columnNum,page.ActualSize.Height / rowNum)) 
            brush.Graphics.SetTransparency(0.5f)
            brush.Graphics.Save()
            brush.Graphics.TranslateTransform(brush.Size.Width / 2 - offset1 - offset2, brush.Size.Height / 2 + offset1 - offset2)
            brush.Graphics.RotateTransform(-45)
  
            '在平铺画刷上绘制文本水印

            brush.Graphics.DrawString(watermarkText, font, PdfBrushes.Violet, 0, 0)
            brush.Graphics.Restore()
  
            '使用平铺画刷绘制一个覆盖整个页面的矩形
            page.Canvas.DrawRectangle(brush, New RectangleF(New PointF(0, 0), page.ActualSize))
        End Sub
    End Class
End Namespace

 

posted @ 2022-07-28 16:14  Gia-  阅读(332)  评论(1编辑  收藏  举报