如何在 C# 中使用 iTextsharp 检查 PDF 文件是否已签名?
How to check if a PDF file is signed or not using iTextsharp in C#?
我有一个 PDF 文件,我想检查它是否经过数字签名。使用 iTextsharp,C# 中的代码。
我建议看一下官方示例。
它们包含例如一个示例 "SignatureInfo",输出 PDF 中嵌入的所有签名的多个信息项;因此,他们特别确定文件是否已签名。
如果你使用的是 iTextSharp 5.5.x,你的关键代码是这个
public void InspectSignatures(String path) {
Console.WriteLine(path);
PdfReader reader = new PdfReader(path);
AcroFields fields = reader.AcroFields;
List<String> names = fields.GetSignatureNames();
SignaturePermissions perms = null;
foreach (String name in names) {
Console.WriteLine("===== " + name + " =====");
perms = InspectSignature(fields, name, perms);
}
Console.WriteLine();
}
(来自 iTextSharp 示例 C5_02_SignatureInfo.cs)
如您所见,AcroFields.GetSignatureNames()
方法为您提供了所有签名字段的名称。如果该列表非空,则 PDF 已签名。
如果您使用 iText 7 for .Net,您的关键代码是:
public virtual void InspectSignatures(String path)
{
// System.out.println(path);
PdfDocument pdfDoc = new PdfDocument(new PdfReader(path));
PdfAcroForm form = PdfAcroForm.GetAcroForm(pdfDoc, false);
SignaturePermissions perms = null;
SignatureUtil signUtil = new SignatureUtil(pdfDoc);
IList<String> names = signUtil.GetSignatureNames();
foreach (String name in names)
{
System.Console.Out.WriteLine("===== " + name + " =====");
perms = InspectSignature(pdfDoc, signUtil, form, name, perms);
}
System.Console.Out.WriteLine();
}
(来自 iText 7 for .Net 示例 C5_02_SignatureInfo.cs)
如您所见,方法 SignatureUtil.GetSignatureNames()
为您提供所有已签名签名字段的名称。如果该列表非空,则 PDF 已签名。
顺便说一下,由于您没有进一步说明,我假设您指的是常规集成 PDF 签名,特别是既不是分离签名也不是 XFA 签名。
我有一个 PDF 文件,我想检查它是否经过数字签名。使用 iTextsharp,C# 中的代码。
我建议看一下官方示例。
它们包含例如一个示例 "SignatureInfo",输出 PDF 中嵌入的所有签名的多个信息项;因此,他们特别确定文件是否已签名。
如果你使用的是 iTextSharp 5.5.x,你的关键代码是这个
public void InspectSignatures(String path) {
Console.WriteLine(path);
PdfReader reader = new PdfReader(path);
AcroFields fields = reader.AcroFields;
List<String> names = fields.GetSignatureNames();
SignaturePermissions perms = null;
foreach (String name in names) {
Console.WriteLine("===== " + name + " =====");
perms = InspectSignature(fields, name, perms);
}
Console.WriteLine();
}
(来自 iTextSharp 示例 C5_02_SignatureInfo.cs)
如您所见,AcroFields.GetSignatureNames()
方法为您提供了所有签名字段的名称。如果该列表非空,则 PDF 已签名。
如果您使用 iText 7 for .Net,您的关键代码是:
public virtual void InspectSignatures(String path)
{
// System.out.println(path);
PdfDocument pdfDoc = new PdfDocument(new PdfReader(path));
PdfAcroForm form = PdfAcroForm.GetAcroForm(pdfDoc, false);
SignaturePermissions perms = null;
SignatureUtil signUtil = new SignatureUtil(pdfDoc);
IList<String> names = signUtil.GetSignatureNames();
foreach (String name in names)
{
System.Console.Out.WriteLine("===== " + name + " =====");
perms = InspectSignature(pdfDoc, signUtil, form, name, perms);
}
System.Console.Out.WriteLine();
}
(来自 iText 7 for .Net 示例 C5_02_SignatureInfo.cs)
如您所见,方法 SignatureUtil.GetSignatureNames()
为您提供所有已签名签名字段的名称。如果该列表非空,则 PDF 已签名。
顺便说一下,由于您没有进一步说明,我假设您指的是常规集成 PDF 签名,特别是既不是分离签名也不是 XFA 签名。