关于c#:CVBNET向PDF文档添加文本水印

9次阅读

共计 5238 个字符,预计需要花费 14 分钟才能阅读完成。

水印是呈现在文档中现有内容后面或前面的文本或图像。它通常用于避免文档被非法应用。在下文中,我将介绍如何应用 Spire.PDF for .NET 在 C# 和 VB.NET 程序中向 PDF 增加单行或多行文本水印。

• 增加单行文本水印到 PDF
• 增加多行文本水印到 PDF

装置 Spire.PDF
首先,你须要从这个链接下载 Spire.PDF 的最新版本,并手动将 DLL 文件增加到你的应用程序中作为援用。或者,你能够通过 NuGet 间接装置它。

示例 1 增加单行文本水印到 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(@"C:\Users\Administrator\Desktop\sample.pdf");
 
            // 创立一个 PdfTrueTypeFont 对象
            PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", 55f), true);
 
            // 设置水印文本
            string text = "Internal Use";
 
            // 测量文本大小
            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:\Users\Administrator\Desktop\sample.pdf")
  
            ' 创立一个 PdfTrueTypeFont 对象
            Dim font As PdfTrueTypeFont =  New PdfTrueTypeFont(New Font("Arial",55f),True) 
  
            ' 设置水印文本
            Dim text As String =  "Internal Use"
  
            ' 测量文本大小
            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


示例 2 增加多行文本水印到 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(@"C:\Users\Administrator\Desktop\sample.pdf");
 
            // 创立一个 PdfTrueTypeFont 对象
            PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", 20f), true);
 
            // 遍历文档中的所有页面
            for (int i = 0; i < pdf.Pages.Count; i++)
            {
                // 向指定页面增加文本水印
                InsertTextWatermark(pdf.Pages[i], "DotNetFiles", 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 对象
            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);
 
            // 在画刷上绘制水印文本
            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("C:\Users\Administrator\Desktop\sample.pdf")
  
            ' 创立一个 PdfTrueTypeFont 对象
            Dim font As PdfTrueTypeFont =  New PdfTrueTypeFont(New Font("Arial",20f),True) 
  
            ' 遍历文档中的所有页面
            Dim i As Integer
            For  i = 0 To  pdf.Pages.Count- 1  Step  i + 1
                ' 向指定页面增加文本水印
                InsertTextWatermark(pdf.Pages(i), "DotNetFiles", 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) 
  
            ' 计算两个偏移变量的值,用于计算坐标系的平移量
            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)
  
            ' 创立一个 PdfTilingBrush 对象
            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)
  
            ' 在画刷上绘制水印文本
            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

正文完
 0