如何使用ItextSharp检索数字签名信息(名称、日期等)

本文关键字:名称 日期 信息 何使用 ItextSharp 检索 数字签名 | 更新日期: 2023-09-27 18:28:34

我有一个PDF,已经有两个人签名了(到开斋节)。

我正在试图检索这些信息,但到目前为止我还不能。

这就是我目前所拥有的:

namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                string workingFolder = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
                string inputFile = Path.Combine(workingFolder, "Tax Return.pdf");            
                PdfReader reader = new PdfReader(inputFile);
                Console.ReadLine();
            }
        }
    }

如果我在运行时检查"reader",我可以看到AcroForm有两个指向签名的字段,但我看不到关于这些签名的任何特定信息。

如何使用ItextSharp检索数字签名信息(名称、日期等)

简短示例:

StringBuilder sb = new StringBuilder();
PdfReader reader = new PdfReader(pdf);
AcroFields af = reader.AcroFields;
ArrayList  names = af.GetSignatureNames();
for (int i = 0; i < names.Count; ++i) {
  String name = (string)names[i];
  PdfPKCS7 pk = af.VerifySignature(name);
  sb.AppendFormat("Signature field name: {0}'n", name);
  sb.AppendFormat("Signature signer name: {0}'n", pk.SignName);
  sb.AppendFormat("Signature date: {0}'n", pk.SignDate);
  sb.AppendFormat("Signature country: {0}'n",  
    PdfPKCS7.GetSubjectFields(pk.SigningCertificate).GetField("C")
  );
  sb.AppendFormat("Signature organization: {0}'n",  
    PdfPKCS7.GetSubjectFields(pk.SigningCertificate).GetField("O")
  );
  sb.AppendFormat("Signature unit: {0}'n",  
    PdfPKCS7.GetSubjectFields(pk.SigningCertificate).GetField("OU")
  );
}