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/12/12 23:08:53 UTC
svn commit: r1884366 - in /pdfbox/trunk/pdfbox/src:
main/java/org/apache/pdfbox/pdmodel/fixup/processor/AcroFormOrphanWidgetsProcessor.java
test/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroFormFromAnnotsTest.java
Author: msahyoun
Date: Sat Dec 12 23:08:52 2020
New Revision: 1884366
URL: http://svn.apache.org/viewvc?rev=1884366&view=rev
Log:
PDFBOX-3891: avoid UnsupportedOperationException by creating fields from scratch
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fixup/processor/AcroFormOrphanWidgetsProcessor.java
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroFormFromAnnotsTest.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fixup/processor/AcroFormOrphanWidgetsProcessor.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fixup/processor/AcroFormOrphanWidgetsProcessor.java?rev=1884366&r1=1884365&r2=1884366&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fixup/processor/AcroFormOrphanWidgetsProcessor.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fixup/processor/AcroFormOrphanWidgetsProcessor.java Sat Dec 12 23:08:52 2020
@@ -17,6 +17,7 @@
package org.apache.pdfbox.pdmodel.fixup.processor;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -79,7 +80,7 @@ public class AcroFormOrphanWidgetsProces
LOG.debug("rebuilding fields from widgets");
- List<PDField> fields = acroForm.getFields();
+ List<PDField> fields = new ArrayList<>();
for (PDPage page : document.getPages())
{
@@ -125,7 +126,11 @@ public class AcroFormOrphanWidgetsProces
}
else
{
- fields.add(PDFieldFactory.createField(acroForm, annot.getCOSObject(), null));
+ PDField field = PDFieldFactory.createField(acroForm, annot.getCOSObject(), null);
+ if (field != null)
+ {
+ fields.add(field);
+ }
}
}
}
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=1884366&r1=1884365&r2=1884366&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 Dec 12 23:08:52 2020
@@ -16,6 +16,7 @@
*/
package org.apache.pdfbox.pdmodel.interactive.form;
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -283,6 +284,25 @@ class PDAcroFormFromAnnotsTest
}
}
+ /**
+ * PDFBOX-3891 null PDFieldFactory.createField
+ *
+ * @throws IOException
+ */
+ @Test
+ void testFromAnnots3891NullField() throws IOException
+ {
+ String sourceUrl = "https://issues.apache.org/jira/secure/attachment/13016993/poppler-14433-0.pdf";
+
+ try (PDDocument testPdf = Loader.loadPDF(new URL(sourceUrl).openStream()))
+ {
+ PDDocumentCatalog catalog = testPdf.getDocumentCatalog();
+ assertDoesNotThrow(() -> catalog.getAcroForm(new CreateFieldsFixup(testPdf)), "Getting the AcroForm shall not throw an exception");
+ }
+ }
+
+
+
/*
* Create fields from widget annotations
*/