You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ms...@apache.org on 2020/10/31 16:50:53 UTC

svn commit: r1883024 - /pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroFormFromAnnotsTest.java

Author: msahyoun
Date: Sat Oct 31 16:50:52 2020
New Revision: 1883024

URL: http://svn.apache.org/viewvc?rev=1883024&view=rev
Log:
PDFBOX-3891: add currently failing test to ensure rebuild matches Acrobat result; test disabled

Modified:
    pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroFormFromAnnotsTest.java

Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroFormFromAnnotsTest.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroFormFromAnnotsTest.java?rev=1883024&r1=1883023&r2=1883024&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroFormFromAnnotsTest.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroFormFromAnnotsTest.java Sat Oct 31 16:50:52 2020
@@ -27,7 +27,9 @@ import org.apache.pdfbox.cos.COSDictiona
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDDocumentCatalog;
+import org.apache.pdfbox.pdmodel.fixup.AbstractFixup;
 import org.apache.pdfbox.pdmodel.fixup.AcroFormDefaultFixup;
+import org.apache.pdfbox.pdmodel.fixup.processor.AcroFormOrphanWidgetsProcessor;
 import org.junit.Test;
 
 /**
@@ -159,7 +161,55 @@ public class PDAcroFormFromAnnotsTest
         }
     }
 
+    /**
+     * PDFBOX-3891 AcroForm with empty fields entry
+     * 
+     * Special fixup to create fields
+     * 
+     * @throws IOException
+     */
+    // @Test
+    public void testFromAnnots3891CreateFields() throws IOException
+    {
 
+        String sourceUrl = "https://issues.apache.org/jira/secure/attachment/12881055/merge-test.pdf";
+        String acrobatSourceUrl = "https://issues.apache.org/jira/secure/attachment/13014447/merge-test-na-acrobat.pdf";
 
+        int numFormFieldsByAcrobat = 0;
 
+        try (PDDocument testPdf = Loader.loadPDF(new URL(acrobatSourceUrl).openStream()))
+        {
+            PDDocumentCatalog catalog = testPdf.getDocumentCatalog();
+            PDAcroForm acroForm = catalog.getAcroForm(null);
+            numFormFieldsByAcrobat = acroForm.getFields().size();
+        }
+
+        try (PDDocument testPdf = Loader.loadPDF(new URL(sourceUrl).openStream()))
+        {
+            PDDocumentCatalog catalog = testPdf.getDocumentCatalog();
+            // need to do a low level cos access as the PDModel access will build the AcroForm
+            COSDictionary cosAcroForm = (COSDictionary) catalog.getCOSObject().getDictionaryObject(COSName.ACRO_FORM);
+            COSArray cosFields = (COSArray) cosAcroForm.getDictionaryObject(COSName.FIELDS);
+            assertEquals("Initially there shall be 0 fields", 0, cosFields.size());
+            PDAcroForm acroForm = catalog.getAcroForm(new CreateFieldsFixup(testPdf));
+            assertEquals("After rebuild there shall be " + numFormFieldsByAcrobat + " fields", numFormFieldsByAcrobat, acroForm.getFields().size());
+        }
+    }
+
+    /*
+     * Create fields from widget annotations
+     */
+    class CreateFieldsFixup extends AbstractFixup
+    {
+        CreateFieldsFixup(PDDocument document)
+        { 
+            super(document); 
+        }
+
+        @Override
+        public void apply() {
+            new AcroFormOrphanWidgetsProcessor(document).process();
+
+        }        
+    }
 }