在 PDF 中添加文本水印是一种常见的文档保护和标识方法。通过添加包含版权信息、所有者名称等内容的文本水印,可以明确文档的版权归属,避免未经授权的用途。对于含有敏感信息的 PDF 文档,添加“机密”等字样的文本水印,能够提醒阅读者注意文档的保密性,防止信息泄露。本文将介绍如何使用 Spire.PDF for .NET 通过 C# 在 PDF 中添加文本水印。
安装 Spire.PDF for .NET
首先,您需要添加 Spire.PDF for .NET 包中包含的 DLL 文件作为 .NET 项目中的引用。DLL 文件可以从此链接下载或通过 NuGet 安装。
PM> Install-Package Spire.PDF
C# 在 PDF 中添加单行文本水印
Spire.PDF 没有提供直接操作 PDF 水印的接口或类。不过,您可以在每一页上绘制所需的水印文本并设置旋转、透明度等,以模仿水印效果。以下是在 PDF 文档的所有页面上添加文本水印的具体步骤:
- 创建 PdfDocument 类的对象。
- 使用 PdfDocument.LoadFromFile() 方法加载 PDF 文件。
- 创建 PdfTrueTypeFont 类的对象,指定水印文本,并使用 PdfFontBase.MeasureString() 方法测量文本大小。
- 遍历文档中的所有页面。
- 使用 PdfPageBase.Canvas.SetTransparency() 方法设置透明度。
- 使用 PdfPageBase.Canvas.TraslateTransform() 方法平移每一页的坐标系到指定位置,
- 使用 PdfPageBase.Canvas.RotateTransform() 方法将坐标系逆时针旋转45度。这样就能确保水印以45度角出现在页面中央。
- 使用 PdfPageBase.Canvas.DrawString() 方法在页面上绘制水印文本。
- 使用 PdfDocument.SaveToFile() 方法保存结果文档。
- 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("考核.pdf");
// 创建PdfTrueTypeFont对象
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋体", 60f), 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.SkyBlue, 0, 0);
}
// 保存结果文件
pdf.SaveToFile("PDF文本水印.pdf");
}
}
}
C# 在 PDF 中添加多行文本水印
有时,你可能想在文档中添加多行文字水印。Spire.PDF 提供的 PdfTilingBrush 类可以生成重复填充图形区域的平铺图案,从而实现平铺水印效果。以下是在 PDF 文档中添加多行水印的具体步骤:
- 创建 PdfDocument 对象。
- 使用 PdfDocument.LoadFromFile() 方法加载 PDF 文件。
- 创建自定义方法 InsertMultiLineTextWatermark(PdfPageBase page, String watermarkText, PdfTrueTypeFont font, int rowNum, int columnNum),为 PDF 页面添加多行文本水印。其中的参数 rowNum 和 columnNum 指定了平铺水印的行数和列数。
- 遍历文档中的所有页面,并调用自定义方法 InsertMultiLineTextWatermark() 将水印应用到每一页。
- 使用 PdfDocument.SaveToFile() 方法保存结果文档。
- 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("考核.pdf");
// 创建PdfTrueTypeFont对象
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋体", 30f), true);
// 遍历文档中的所有页面
for (int i = 0; i < pdf.Pages.Count; i++)
{
// 调用 InsertMultiLineTextWatermark() 方法为指定页面添加多行文本水印
InsertMultiLineTextWatermark(pdf.Pages[i], "机密", font, 4, 4);
}
// 保存结果文件
pdf.SaveToFile("PDF多行文本水印.pdf");
}
// 创建在页面上插入多行文字水印的自定义方法
static void InsertMultiLineTextWatermark(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.6f);
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));
}
}
}
申请临时 License
如果您需要去除生成文档中的评估提示或解除功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。