Как получить информацию о цифровой подписи (имя, дата, ...) с помощью ItextSharp - PullRequest
4 голосов
/ 22 марта 2012

У меня есть PDF, который был подписан 2 людьми (Eid).

Я пытаюсь получить эту информацию, но пока не могу.

Вот чтоПока у меня есть:

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 поля, которые указывают на сигнатуры, но я не могу видеть какую-либо конкретную информацию об этих сигнатурах.

1 Ответ

9 голосов
/ 22 марта 2012

Краткий пример:

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