【问题标题】:How to retrieve digital signature information (name, date, ...) with ItextSharp如何使用 ItextSharp 检索数字签名信息(姓名、日期等)
【发布时间】:2012-04-07 01:42:12
【问题描述】:

我有一份由 2 人(开斋节)签署的 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();
            }
        }
    }

如果我在运行时检查“阅读器”,我可以看到 AcroForm 有 2 个指向签名的字段,但我看不到有关这些签名的任何具体信息。

【问题讨论】:

    标签: c# .net pdf itext digital-signature


    【解决方案1】:

    简短示例:

    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")
      );
    }
    

    【讨论】:

    • PdfPKCS7 显然在某些时候发生了变化,所以如果您需要 GetSubjectFields,它现在是 CertificateInfo.GetSubjectFields。
    猜你喜欢
    • 1970-01-01
    • 2018-03-07
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 2015-09-18
    相关资源
    最近更新 更多