C# 如何移除PDF文档的数字签名
和密码保护一样,数字签名也是保护PDF文档的一种方式,通常添加了数字签名的PDF文档只能浏览而不能打印和编辑,那如果我们要打印或编辑的话,首先需要做的就是移除文档内的数字签名。本篇文章的目的在于分享如何使用C#以编程的方式移除PDF的数字签名,在该项目中使用了一个免费版本的PDF组件-Free Spire.PDF,如果需要可以从E-iceblue官网或Nuget下载并安装。
以下是原PDF文件截图,可以看到该PDF文件中含有一个数字签名:
准备工作
安装Free Spire.PDF后,在visual studio中创建一个新的C#项目,从安装文件夹下添加Spire.Pdf.dll作为项目引用。
代码实现
1.添加完引用后,使用如下命名空间。
using Spire.Pdf;
using Spire.Pdf.Widget;
2.加载PDF文档。
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("测试.pdf");
3. 遍历PDF文档的所有表格域,找到签名域并将其移除。
PdfFormWidget widgets = pdf.Form as PdfFormWidget;
for (int i = 0; i <widgets.FieldsWidget.List.Count; i++)
{
PdfFieldWidget widget = widgets.FieldsWidget.List[i] as PdfFieldWidget;
if (widget is PdfSignatureFieldWidget)
{
widgets.FieldsWidget.RemoveAt(i);
}
}
4. 保存文档。
pdf.SaveToFile("移除签名.pdf");
运行代码得到的pdf文档已经没有签名了:
完整代码
using Spire.Pdf;
using Spire.Pdf.Widget;
namespace 移除PDF数字签名
{
class Program
{
static void Main(string[] args)
{
PdfDocument pdf = newPdfDocument();
pdf.LoadFromFile("测试.pdf");
PdfFormWidget widgets = pdf.Form as PdfFormWidget;
for (int i = 0; i< widgets.FieldsWidget.List.Count; i++)
{
PdfFieldWidget widget =widgets.FieldsWidget.List[i] as PdfFieldWidget;
if (widget isPdfSignatureFieldWidget)
{
widgets.FieldsWidget.RemoveAt(i);
}
}
pdf.SaveToFile("移除签名.pdf");
System.Diagnostics.Process.Start("移除签名.pdf");
}
}
}