2013-03-05 2 views
1

Я пытаюсь проверить наличие метки времени для данной подписи PDF-файла. До сих пор я пришел к этому коду:Проверка метки времени с помощью iText 2.1.7

RandomAccessFileOrArray random = 
    new RandomAccessFileOrArray(new File("temp.pdf").getAbsolutePath()); 

PdfReader reader = new PdfReader(random, null); 
AcroFields af = reader.getAcroFields(); 
ArrayList<?> names = af.getSignatureNames(); 

//this are the signatures? 
for (Object o : names){ 

    AcroFields.Item item = (Item) af.getFields().get((String)o); 

    //this is the class for verifying the signature, 
    //how do I get it from the item? 
    PdfPKCS7 pdfPKCS7 = null; //XYZ ??? 

    Calendar signingDate = pdfPKCS7.getTimeStampDate(); 
} 

я, видимо, получил доступ к подписи, но я должен идти в класс PdfPKCS7 для проверки подписи. Кто-нибудь знает, как я могу туда добраться?

ответ

1

Вы должны использовать метод AcroFieldsverifySignature(String name), который возвращает объект PdfPKCS7 для продолжения проверки.

В JavaDocs этого метода показан пример его использования:

KeyStore kall = PdfPKCS7.loadCacertsKeyStore(); 
PdfReader reader = new PdfReader("my_signed_doc.pdf"); 
AcroFields af = reader.getAcroFields(); 
ArrayList names = af.getSignatureNames(); 
for (int k = 0; k < names.size(); ++k) { 
    String name = (String)names.get(k); 
    System.out.println("Signature name: " + name); 
    System.out.println("Signature covers whole document: " + af.signatureCoversWholeDocument(name)); 
    PdfPKCS7 pk = af.verifySignature(name); 
    Calendar cal = pk.getSignDate(); 
    Certificate pkc[] = pk.getCertificates(); 
    System.out.println("Subject: " + PdfPKCS7.getSubjectFields(pk.getSigningCertificate())); 
    System.out.println("Document modified: " + !pk.verify()); 
    Object fails[] = PdfPKCS7.verifyCertificates(pkc, kall, null, cal); 
    if (fails == null) 
     System.out.println("Certificates verified against the KeyStore"); 
    else 
     System.out.println("Certificate failed: " + fails[1]); 
} 

Здесь вы можете легко добавить дополнительный код, используя экземпляр PdfPKCS7.

Ceterum censeo ... если вы не связаны с этой древней версией iText (например, из-за совместимости или проблем с лицензией), вы должны рассмотреть возможность обновления до текущей версии.

+0

У меня было это решение раньше, но оно не скомпилировалось. Я загрузил версию itext и выяснил, что af.verifySignature (имя) работает. Это была версия третьей стороны, которую я использовал, которая была изменена. Благодарю. – mrcaramori

Смежные вопросы