目录
使用工具
C# 在PDF文档中添加水印注释
C# 在PDF文档中删除水印注释
PDF中的水印注释是一种独特的注释类型,它通常以透明的文本或图片形式叠加在页面内容之上,为文档添加标识或信息提示。与传统的静态水印不同,水印注释并不会永久嵌入到PDF页面的内容中,而是以独立注释对象的形式存在。这种设计结合了水印的标记功能与注释的灵活性,使用户能够方便地删除水印,而无需影响文档的核心内容。非常适合标记 “草稿” 或 “保密” 文件,或为文档添加临时说明等场景。这篇博客将探讨如何使用C# 在PDF文档中添加和删除水印注释。
- C# 在PDF文档中添加水印注释
- C# 在PDF文档中删除水印注释
使用工具
要使用C# 在PDF文档中添加和删除水印注释,需要用到合适的PDF文档处理库。本文所使用的是Spire.PDF for .NET库。该库主要用于在 .NET 应用程序中创建、读取、编辑、转换 和打印PDF 文档。
安装 Spire.PDF for .NET
你可以在 NuGet 包管理器中运行以下命令安装 Spire.PDF for .NET:
PM> Install-Package Spire.PDF
C# 在PDF文档中添加水印注释
Spire.PDF for .NET中的PdfWatermarkAnnotation类用于创建水印注释。创建后,你可以将其添加到你的PDF文档的页面中。以下是将水印注释添加到PDF文档的具体步骤:
- 加载PDF文档: 创建PdfDocument对象,并使用LoadFromFile方法加载目标PDF文件。
- 设置水印文本的字体: 创建一个PdfTrueTypeFont对象,设置所需的字体、大小和样式(例如,宋体、22pt、常规)。此字体将用于呈现水印文本。
- 生成水印外观模板: 使用PdfTemplate对象定义一个与页面大小匹配的画布。在此模板上,使用PdfTilingBrush对象绘制水印文本。
- 遍历页面并应用水印: 遍历PDF文档的所有页面。对于每一页:
- 使用RectangleF对象定义水印注释的区域,确保其覆盖整个页面。
- 创建PdfWatermarkAnnotation对象,并为其指定区域。
- 设置水印注释的外观为预定义的模板。
- 将水印注释添加到页面的Annotations集合中。
- 保存修改后的PDF: 使用SaveToFile方法将添加水印注释后的PDF文档保存为新文件。
以下代码展示了如何使用C#为PDF文档添加水印注释:
using Spire.Pdf;
using Spire.Pdf.Annotations;
using Spire.Pdf.Annotations.Appearance;
using Spire.Pdf.Graphics;
using System.Drawing;namespace WatermarkAnnotation
{internal class Program{static void Main(string[] args){// 创建PdfDocument对象PdfDocument pdf = new PdfDocument();// 加载PDF文档pdf.LoadFromFile("测试.pdf");// 创建PdfTrueTypeFont对象,用于渲染水印文本PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋体", 22.0f, FontStyle.Regular), true);// 遍历所有页面for (int i = 0; i < pdf.Pages.Count; i++){PdfPageBase page = pdf.Pages[i];// 创建与页面大小匹配的PdfTemplate对象PdfTemplate template = new PdfTemplate(page.GetClientSize().Width, page.GetClientSize().Height);// 调用函数将水印文本插入模板InsertWatermark(template, font, "保密");// 定义页面上应用水印注释的区域RectangleF loRect = new RectangleF(0.0f, 0.0f, page.GetClientSize().Width, page.GetClientSize().Height);// 创建水印注释PdfWatermarkAnnotation watermarkAnnotation = new PdfWatermarkAnnotation(loRect);// 设置水印注释的外观PdfAppearance appearance = new PdfAppearance(watermarkAnnotation);appearance.Normal = template;watermarkAnnotation.Appearance = appearance;watermarkAnnotation.Text = "ID_0";// 设置矩阵变换以控制水印的位置和缩放watermarkAnnotation.SetMatrix(new float[] { 1, 0, 0, 1, 0, 0 });// 设置水平偏移量watermarkAnnotation.SetHorizontalTranslation(0.5f);// 设置垂直偏移量watermarkAnnotation.SetVerticalTranslation(0.5f);// 将水印注释添加到当前页面page.Annotations.Add(watermarkAnnotation);}// 保存更新后的PDF文档pdf.SaveToFile("添加水印注释.pdf");pdf.Dispose();}// 定义一个静态方法用于在PDF模板中绘制水印static void InsertWatermark(PdfTemplate template, PdfTrueTypeFont font, string watermark){// 创建一个SizeF对象,用于设置水印刷子的大小SizeF size = new SizeF(template.Width / 2, template.Height / 3);// 创建PdfTilingBrush对象,用于重复绘制水印图案PdfTilingBrush brush = new PdfTilingBrush(size);// 设置水印透明度brush.Graphics.SetTransparency(0.3f);// 保存当前Graphic状态brush.Graphics.Save();// 平移Graphic,使其中心与水印刷子的中心对齐brush.Graphics.TranslateTransform(brush.Size.Width / 2, brush.Size.Height / 2);// 旋转Graphic,目的是使水印倾斜45度brush.Graphics.RotateTransform(-45);// 在Graphic上绘制水印文字,使用指定的字体、颜色和居中对齐方式brush.Graphics.DrawString(watermark, font, PdfBrushes.Violet, 0, 0, new PdfStringFormat(PdfTextAlignment.Center));brush.Graphics.Restore();// 重置水印透明度为1brush.Graphics.SetTransparency(1f);// 将水印图案绘制到整个模板区域RectangleF loRect = new RectangleF(0.0f, 0.0f, template.Size.Width, template.Size.Height);template.Graphics.DrawRectangle(brush, loRect);}}
}
C# 在PDF文档中删除水印注释
在某些情况下,你可能需要从PDF文档中删除水印注释,特别是在准备最终版本文档时,或者当水印不再需要时。以下是从PDF文档中删除水印注释的具体步骤:
- 加载PDF文档: 创建PdfDocument对象,并使用LoadFromFile方法加载包含水印注释的PDF文件。
- 遍历页面: 使用for循环遍历PDF文档中的所有页面。对于每一页:
- 访问页面的Annotations集合,该集合包含所有应用于页面的注释。
- 识别并删除水印注释: 在每页的注释集合中:
- 循环遍历集合中的注释。
- 检查当前注释是否为PdfWatermarkAnnotation类型(水印注释)。
- 如果注释是PdfWatermarkAnnotation类型,则从页面的Annotations集合中删除它。
- 保存更新后的PDF: 使用SaveToFile方法将删除水印注释后的PDF文档保存为新文件。
以下代码展示了如何使用C#从PDF文档中删除水印注释:
using Spire.Pdf;
using Spire.Pdf.Annotations;namespace RemoveWatermarkAnnotation
{internal class Program{static void Main(string[] args){// 创建PdfDocument对象PdfDocument pdf = new PdfDocument();// 加载包含水印注释的PDF文档pdf.LoadFromFile("添加水印注释.pdf");// 遍历所有页面for (int i = 0; i < pdf.Pages.Count; i++){var annotations = pdf.Pages[i].Annotations;// 遍历所有注释for (int j = annotations.Count - 1; j >= 0; j--){// 如果是水印注释,则移除if (annotations[j] is PdfWatermarkAnnotation){annotations.Remove(annotations[j]);}}}// 保存更新后的PDF文档pdf.SaveToFile("删除水印注释.pdf");pdf.Dispose();}}
}
以上就是使用C# 在PDF中添加和删除水印注释的全部内容。感谢阅读!