本文整理匯總了Java中com.itextpdf.text.pdf.PdfReader.getAcroFields方法的典型用法代碼示例。如果您正苦於以下問題:Java PdfReader.getAcroFields方法的具體用法?Java PdfReader.getAcroFields怎麽用?Java PdfReader.getAcroFields使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類com.itextpdf.text.pdf.PdfReader
的用法示例。
在下文中一共展示了PdfReader.getAcroFields方法的13個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Java代碼示例。
示例1: testRemoveSignatureFromPDFSignedFirmaCerta
import com.itextpdf.text.pdf.PdfReader; //導入方法依賴的package包/類
/**
* <a href="http://itext.2136553.n4.nabble.com/trying-to-remove-a-signature-from-pdf-file-tt4660983.html">
* trying to remove a signature from pdf file
* </a>
* <br/>
* <a href="http://itext.2136553.n4.nabble.com/attachment/4660983/0/PDFSignedFirmaCerta.pdf">
* PDFSignedFirmaCerta.pdf
* </a>
* <p>
* Indeed, this code fails with a {@link NullPointerException}. The cause is that a dubious construct
* created by the signature software then is processed by iText code not sufficiently defensively programmed:
* The signature claims to have an annotation on a page but that page does claim not to have any anotations
* at all.
* </p>
*/
@Test
public void testRemoveSignatureFromPDFSignedFirmaCerta() throws IOException, GeneralSecurityException, DocumentException
{
try ( InputStream inputStream = getClass().getResourceAsStream("PDFSignedFirmaCerta.pdf");
OutputStream outputStream = new FileOutputStream(new File(RESULT_FOLDER, "PDFSignedFirmaCerta-withoutSig.pdf")))
{
Provider provider = new BouncyCastleProvider();
Security.addProvider(provider);
PdfReader reader = new PdfReader(inputStream, null);
AcroFields af = reader.getAcroFields();
ArrayList<String> names = af.getSignatureNames();
for (String name : names) {
System.out.println("Signature name: " + name);
System.out.println("Signature covers whole document: " + af.signatureCoversWholeDocument(name));
PdfPKCS7 pk = af.verifySignature(name, provider.getName());
System.out.println("SignatureDate: " + pk.getSignDate());
System.out.println("Certificate: " + pk.getSigningCertificate());
System.out.println("Document modified: " + !pk.verify());
af.removeField(name);
}
PdfStamper stamper = new PdfStamper(reader, outputStream, '\0');
stamper.close();
}
}
示例2: testVerifyTestSigned1
import com.itextpdf.text.pdf.PdfReader; //導入方法依賴的package包/類
/**
* <a href="https://stackoverflow.com/questions/45027712/invalid-signature-when-signing-an-existing-sigrature-field-with-cosign-sapi">
* Invalid signature when signing an existing sigrature field with CoSign SAPI
* </a>
* <br/>
* <a href="https://www.dropbox.com/s/j6eme53lleaok13/test_signed.pdf?dl=0">
* test_signed-1.pdf
* </a>
* <p>
* Validation shows verification success while both Adobe and SD DSS fail.
* Embedded certificates have issues (emailAddress RDN is typed PrintableString
* which is wrong - specified is IA5String - and does not even make sense as
* there is no '@' in PrintableString), but does this explain it?
* </p>
*/
@Test
public void testVerifyTestSigned1() throws IOException, GeneralSecurityException
{
System.out.println("\n\ntest_signed-1.pdf\n===================");
try ( InputStream resource = getClass().getResourceAsStream("test_signed-1.pdf") )
{
PdfReader reader = new PdfReader(resource);
AcroFields acroFields = reader.getAcroFields();
List<String> names = acroFields.getSignatureNames();
for (String name : names) {
System.out.println("Signature name: " + name);
System.out.println("Signature covers whole document: " + acroFields.signatureCoversWholeDocument(name));
System.out.println("Document revision: " + acroFields.getRevision(name) + " of " + acroFields.getTotalRevisions());
PdfPKCS7 pk = acroFields.verifySignature(name);
System.out.println("Subject: " + CertificateInfo.getSubjectFields(pk.getSigningCertificate()));
System.out.println("Document verifies: " + pk.verify());
}
}
System.out.println();
}
示例3: testReadFieldsFromMultiview
import com.itextpdf.text.pdf.PdfReader; //導入方法依賴的package包/類
/**
* <a href="https://stackoverflow.com/questions/46730760/no-fields-were-printed-on-console-after-verifying-if-form-is-using-acroform-or-x">
* No fields were printed on console after verifying if form is using Acroform or XFA technology?
* </a>
* <br/>
* <a href="http://blogs.adobe.com/formfeed/files/formfeed/Samples/multiview.pdf">
* multiview.pdf
* </a>
* from
* <a href="http://blogs.adobe.com/formfeed/2011/02/multiple-top-level-subforms.html">
* Multiple Top Level Subforms
* </a>
* <p>
* The OP's observation can be reproduced using this sample PDF.
* </p>
*/
@Test
public void testReadFieldsFromMultiview() throws IOException {
try ( InputStream resource = getClass().getResourceAsStream("multiview.pdf") ) {
PdfReader reader = new PdfReader(resource);
AcroFields form = reader.getAcroFields();
XfaForm xfa = form.getXfa();
System.out.println(xfa.isXfaPresent() ? "XFA form" : "AcroForm");
Set<String> fields = form.getFields().keySet();
for (String key : fields) {
System.out.println(key);
}
System.out.flush();
System.out.close();
reader.close();
}
}
示例4: testVerifySignedOutput
import com.itextpdf.text.pdf.PdfReader; //導入方法依賴的package包/類
/**
* <a href="http://stackoverflow.com/questions/37726215/why-does-my-signature-revision-number-increment-by-2-in-itext-after-detached-s">
* Why does my signature revision number increment by 2 (in itext) after detached signing?
* </a>
* <br/>
* <a href="https://onedrive.live.com/redir?resid=2F03BFDA84B77A41!113&authkey=!ABPGZ7pxuxoE8A0&ithint=file%2Cpdf">
* signedoutput.pdf
* </a>
* <p>
* The issue cannot be reproduced. In particular the PDF contains only a single revision.
* </p>
*/
@Test
public void testVerifySignedOutput() throws IOException, GeneralSecurityException
{
System.out.println("\n\nsignedoutput.pdf\n================");
try ( InputStream resource = getClass().getResourceAsStream("signedoutput.pdf") )
{
PdfReader reader = new PdfReader(resource);
AcroFields acroFields = reader.getAcroFields();
List<String> names = acroFields.getSignatureNames();
for (String name : names) {
System.out.println("Signature name: " + name);
System.out.println("Signature covers whole document: " + acroFields.signatureCoversWholeDocument(name));
System.out.println("Document revision: " + acroFields.getRevision(name) + " of " + acroFields.getTotalRevisions());
PdfPKCS7 pk = acroFields.verifySignature(name);
System.out.println("Subject: " + CertificateInfo.getSubjectFields(pk.getSigningCertificate()));
System.out.println("Document verifies: " + pk.verify());
}
}
System.out.println();
}
示例5: testVerifyBabyloveSigned
import com.itextpdf.text.pdf.PdfReader; //導入方法依賴的package包/類
/**
* <a href="http://stackoverflow.com/questions/42824577/itext-can-not-verify-signed-pdf-docs-edited-by-nitro-pro-10-11">
* itext can not verify signed pdf docs edited by nitro pro 10/11
* </a>
* <br/>
* <a href="https://alimail.fadada.com/signed.pdf">
* babylove_signed.pdf
* </a>
* <p>
* Validation correctly shows verification success for a single
* signature that does cover the whole document.
* </p>
*/
@Test
public void testVerifyBabyloveSigned() throws IOException, GeneralSecurityException
{
System.out.println("\n\nbabylove_signed.pdf\n===================");
try ( InputStream resource = getClass().getResourceAsStream("babylove_signed.pdf") )
{
PdfReader reader = new PdfReader(resource);
AcroFields acroFields = reader.getAcroFields();
List<String> names = acroFields.getSignatureNames();
for (String name : names) {
System.out.println("Signature name: " + name);
System.out.println("Signature covers whole document: " + acroFields.signatureCoversWholeDocument(name));
System.out.println("Document revision: " + acroFields.getRevision(name) + " of " + acroFields.getTotalRevisions());
PdfPKCS7 pk = acroFields.verifySignature(name);
System.out.println("Subject: " + CertificateInfo.getSubjectFields(pk.getSigningCertificate()));
System.out.println("Document verifies: " + pk.verify());
}
}
System.out.println();
}
示例6: testVerifyBabyloveSignedAndModifyByNitro
import com.itextpdf.text.pdf.PdfReader; //導入方法依賴的package包/類
/**
* <a href="http://stackoverflow.com/questions/42824577/itext-can-not-verify-signed-pdf-docs-edited-by-nitro-pro-10-11">
* itext can not verify signed pdf docs edited by nitro pro 10/11
* </a>
* <br/>
* <a href="https://alimail.fadada.com/signed&modify_by_nitro.pdf">
* babylove_signed&modify_by_nitro.pdf
* </a>
* <p>
* Validation correctly shows verification success for a single
* signature that does <b>not</b> cover the whole document.
* </p>
*/
@Test
public void testVerifyBabyloveSignedAndModifyByNitro() throws IOException, GeneralSecurityException
{
System.out.println("\n\nbabylove_signed&modify_by_nitro.pdf\n===================");
try ( InputStream resource = getClass().getResourceAsStream("babylove_signed&modify_by_nitro.pdf") )
{
PdfReader reader = new PdfReader(resource);
AcroFields acroFields = reader.getAcroFields();
List<String> names = acroFields.getSignatureNames();
for (String name : names) {
System.out.println("Signature name: " + name);
System.out.println("Signature covers whole document: " + acroFields.signatureCoversWholeDocument(name));
System.out.println("Document revision: " + acroFields.getRevision(name) + " of " + acroFields.getTotalRevisions());
PdfPKCS7 pk = acroFields.verifySignature(name);
System.out.println("Subject: " + CertificateInfo.getSubjectFields(pk.getSigningCertificate()));
System.out.println("Document verifies: " + pk.verify());
}
}
System.out.println();
}
示例7: testVerifyTestDsp
import com.itextpdf.text.pdf.PdfReader; //導入方法依賴的package包/類
/**
* <a href="https://stackoverflow.com/questions/46346144/digital-signature-verification-with-itext-not-working">
* Digital Signature Verification with itext not working
* </a>
* <br/>
* <a href="https://drive.google.com/open?id=0B1XKjvoeoyPZWnk5bzc5T3VSQUk">
* test_dsp.pdf
* </a>
* <p>
* The issue is that the signature uses ECDSA and iText 5 does not (yet)
* support ECDSA. "Support" here actually means that iText cannot find
* the name ECDSA for the OID 1.2.840.10045.4.3.2 (SHA256withECDSA) to
* build a proper algorithm name to use for verification.
* </p>
* <p>
* Adding a mapping "1.2.840.10045.4.3.2" to "ECDSA" resolves the issue.
* </p>
* @see #testVerify20180115an_signed_original()
*/
@Test
public void testVerifyTestDsp() throws IOException, GeneralSecurityException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException
{
Field algorithmNamesField = EncryptionAlgorithms.class.getDeclaredField("algorithmNames");
algorithmNamesField.setAccessible(true);
@SuppressWarnings("unchecked")
HashMap<String, String> algorithmNames = (HashMap<String, String>) algorithmNamesField.get(null);
algorithmNames.put("1.2.840.10045.4.3.2", "ECDSA");
System.out.println("\n\ntest_dsp.pdf\n===================");
try ( InputStream resource = getClass().getResourceAsStream("test_dsp.pdf") )
{
PdfReader reader = new PdfReader(resource);
AcroFields acroFields = reader.getAcroFields();
List<String> names = acroFields.getSignatureNames();
for (String name : names) {
System.out.println("Signature name: " + name);
System.out.println("Signature covers whole document: " + acroFields.signatureCoversWholeDocument(name));
System.out.println("Document revision: " + acroFields.getRevision(name) + " of " + acroFields.getTotalRevisions());
PdfPKCS7 pk = acroFields.verifySignature(name);
System.out.println("Subject: " + CertificateInfo.getSubjectFields(pk.getSigningCertificate()));
System.out.println("Document verifies: " + pk.verify());
}
}
System.out.println();
}
示例8: testVerifyPdfSampleSigned
import com.itextpdf.text.pdf.PdfReader; //導入方法依賴的package包/類
/**
* <a href="https://stackoverflow.com/questions/48285453/verifying-certificate-of-signed-and-secured-pdf-in-itext-pdf-java">
* Verifying certificate of signed and secured PDF in iText PDF Java
* </a>
* <br/>
* <a href="https://drive.google.com/drive/folders/1KAqHUh-Iij0I4WXJUCx-rMd8FQFq5tCe?usp=sharing">
* pdf-sample-signed.pdf
* </a>
* <p>
* The PDF is both signed and encrypted. Apparently iText "decrypts" the
* values of the <b>Contents</b> key in signature dictionaries even though
* this is an explicit exception. The parsing of this "decrypted" signature
* container obviously fails.
* </p>
*/
@Test
public void testVerifyPdfSampleSigned() throws IOException, GeneralSecurityException
{
System.out.println("\n\npdf-sample-signed.pdf\n===================");
try ( InputStream resource = getClass().getResourceAsStream("pdf-sample-signed.pdf") )
{
PdfReader reader = new PdfReader(resource, "password".getBytes());
AcroFields acroFields = reader.getAcroFields();
List<String> names = acroFields.getSignatureNames();
for (String name : names) {
System.out.println("Signature name: " + name);
System.out.println("Signature covers whole document: " + acroFields.signatureCoversWholeDocument(name));
System.out.println("Document revision: " + acroFields.getRevision(name) + " of " + acroFields.getTotalRevisions());
PdfPKCS7 pk = acroFields.verifySignature(name);
System.out.println("Subject: " + CertificateInfo.getSubjectFields(pk.getSigningCertificate()));
System.out.println("Document verifies: " + pk.verify());
}
}
System.out.println();
}
示例9: testDocumentTimestampLikeRadekKantor
import com.itextpdf.text.pdf.PdfReader; //導入方法依賴的package包/類
/**
* <a href="https://stackoverflow.com/questions/48211757/itext-pdf-timestamp-validation-returns-false-why">
* iText pdf timestamp validation returns false, why?
* </a>
* <br/>
* <a href="https://drive.google.com/file/d/1skI3NM9cqw2m6eW9jKXaJXKzvCjyQMib/view">
* testpdf_timestamp.pdf
* </a>
* <p>
* The code the OP used for inspiration was for retrieving information
* from a signature which may include a signature time stamp. The PDF
* of the OP, on the other hand, contains a document time stamp. The
* call `pkcs7.verifyTimestampImprint()` checks the time stamp as a
* signature time stamp and, therefore, fails.
* </p>
*/
@Test
public void testDocumentTimestampLikeRadekKantor() throws IOException, GeneralSecurityException {
try ( InputStream resource = getClass().getResourceAsStream("testpdf_timestamp.pdf") )
{
PdfReader reader = new PdfReader(resource);
AcroFields fields = reader.getAcroFields();
ArrayList<String> names = fields.getSignatureNames();
for (String name : names) {
System.out.println("===== " + name + " =====");
System.out.println("Signature covers whole document: " + fields.signatureCoversWholeDocument(name));
System.out.println("Document revision: " + fields.getRevision(name) + " of " + fields.getTotalRevisions());
PdfPKCS7 pkcs7 = fields.verifySignature(name);
System.out.println("Integrity check OK? " + pkcs7.verify());
SimpleDateFormat date_format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SS");
System.out.println("Signed on: " + date_format.format(pkcs7.getSignDate().getTime()));
if (pkcs7.getTimeStampDate() != null) {
System.out.println("TimeStamp: " + date_format.format(pkcs7.getTimeStampDate().getTime()));
TimeStampToken ts = pkcs7.getTimeStampToken();
System.out.println("TimeStamp service: " + ts.getTimeStampInfo().getTsa());
// Why pkcs7.verifyTimestampImprint() returns FLASE?
System.out.println("Timestamp verified? " + pkcs7.verifyTimestampImprint());
}
}
}
}
示例10: testShowPdfExampleStates
import com.itextpdf.text.pdf.PdfReader; //導入方法依賴的package包/類
/**
* <a href="http://stackoverflow.com/questions/39450688/itext-pdf-checkboxon-off-not-appearing-for-some-pdf">
* IText Pdf - Checkbox(On/Off) not appearing for some pdf
* </a>
* <br/>
* <a href="http://www.filedropper.com/pdfexample_1">
* PDF example.pdf
* </a>
* <p>
* The observations of the OP cannot be reproduced.
* </p>
*/
@Test
public void testShowPdfExampleStates() throws IOException
{
String resourceName = "PDF example.pdf";
try ( InputStream resource = getClass().getResourceAsStream(resourceName) )
{
PdfReader reader = new PdfReader(resource);
AcroFields form = reader.getAcroFields();
String[] values = form.getAppearanceStates("claimsType");
System.out.printf("\n%s\nThe appearance states of claimsType are %s.\n", resourceName, Arrays.asList(values));
}
}
示例11: testShowPdfTest2States
import com.itextpdf.text.pdf.PdfReader; //導入方法依賴的package包/類
/**
* <a href="http://stackoverflow.com/questions/39450688/itext-pdf-checkboxon-off-not-appearing-for-some-pdf">
* IText Pdf - Checkbox(On/Off) not appearing for some pdf
* </a>
* <br/>
* <a href="http://www.filedropper.com/pdftest2">
* PDF test 2.pdf
* </a>
* <p>
* The observations of the OP cannot be reproduced.
* </p>
*/
@Test
public void testShowPdfTest2States() throws IOException
{
String resourceName = "PDF test 2.pdf";
try ( InputStream resource = getClass().getResourceAsStream(resourceName) )
{
PdfReader reader = new PdfReader(resource);
AcroFields form = reader.getAcroFields();
String[] values = form.getAppearanceStates("claimsType");
System.out.printf("\n%s\nThe appearance states of claimsType are %s.\n", resourceName, Arrays.asList(values));
}
}
示例12: testVerify20180115an_signed_original
import com.itextpdf.text.pdf.PdfReader; //導入方法依賴的package包/類
/**
* <a href="https://github.com/itext/itextpdf/pull/36">
* Adding Support for OID 1.2.840.113549.1.1.10 #36
* </a>
* <br/>
* <a href="https://github.com/itext/itextpdf/files/1641593/2018.01.15.an_signed_original.pdf">
* 2018.01.15.an_signed_original.pdf
* </a>
* <p>
* Support for RSASSA-PSS can also be injected using reflection as done here.
* </p>
* @see #testVerifyTestDsp()
*/
@Test
public void testVerify20180115an_signed_original() throws IOException, GeneralSecurityException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException
{
Field algorithmNamesField = EncryptionAlgorithms.class.getDeclaredField("algorithmNames");
algorithmNamesField.setAccessible(true);
@SuppressWarnings("unchecked")
HashMap<String, String> algorithmNames = (HashMap<String, String>) algorithmNamesField.get(null);
algorithmNames.put("1.2.840.113549.1.1.10", "RSAandMGF1");
System.out.println("\n\n2018.01.15.an_signed_original.pdf\n===================");
try ( InputStream resource = getClass().getResourceAsStream("2018.01.15.an_signed_original.pdf") )
{
PdfReader reader = new PdfReader(resource);
AcroFields acroFields = reader.getAcroFields();
List<String> names = acroFields.getSignatureNames();
for (String name : names) {
System.out.println("Signature name: " + name);
System.out.println("Signature covers whole document: " + acroFields.signatureCoversWholeDocument(name));
System.out.println("Document revision: " + acroFields.getRevision(name) + " of " + acroFields.getTotalRevisions());
PdfPKCS7 pk = acroFields.verifySignature(name);
System.out.println("Subject: " + CertificateInfo.getSubjectFields(pk.getSigningCertificate()));
System.out.println("Document verifies: " + pk.verify());
}
}
System.out.println();
}
示例13: test
import com.itextpdf.text.pdf.PdfReader; //導入方法依賴的package包/類
/**
* <a href="http://stackoverflow.com/questions/32455178/itextsharp-acrofields-unable-to-cast-object-of-type-itextsharp-text-pdf-pdf">
* iTextsharp : AcroFields - Unable to cast object of type 'iTextSharp.text.pdf.PdfDictionary' to type 'iTextSharp.text.pdf.PdfArray'
* </a>
* <br/>
* <a href="https://drive.google.com/file/d/0B3W8aJry8ZMERnJubHpMdVk5SmM/view?usp=sharing">
* Sample.PDF
* </a>
* <p>
* Indeed, parsing the form definition results in a class cast error. The cause for
* that exception is that the AcroForm PDF form description in your sample PDF is
* invalid: In the AcroForm interactive form dictionary the value of the Fields key
* is a dictionary object but that value must be an array.
* </p>
*/
@Test
public void test() throws IOException
{
try ( InputStream resource = getClass().getResourceAsStream("Sample.PDF") )
{
PdfReader reader = new PdfReader(resource);
reader.getAcroFields();
}
}