【问题标题】:How to check if a PDF file is signed or not using iTextsharp in C#?如何在 C# 中使用 iTextsharp 检查 PDF 文件是否已签名?
【发布时间】:2016-09-04 14:06:40
【问题描述】:

我有一个 PDF 文件,我想检查它是否有数字签名。使用 iTextsharp,C# 中的代码。

【问题讨论】:

  • 您使用的是什么代码,您遇到了什么具体问题?

标签: c# asp.net asp.net-mvc-4 itext sign


【解决方案1】:

我建议你看看官方的例子。

它们包含例如一个示例“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 签名。

【讨论】:

  • 这应该被标记为解决方案!这对我很有用。
  • 你(作为提问的人)可以做到这一点:点击答案左上角的勾号。
  • 我知道这是旧的,但我正在尝试获取 XFA 签名。这甚至可能吗?
  • 你用什么xfa?
猜你喜欢
  • 1970-01-01
  • 2017-12-24
  • 2011-09-29
  • 2020-12-15
  • 2019-05-24
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多