pdfbox-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From msahy...@apache.org
Subject svn commit: r1759980 - in /pdfbox/branches/2.0/pdfbox/src: main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java test/java/org/apache/pdfbox/pdmodel/interactive/form/TestFields.java
Date Fri, 09 Sep 2016 10:34:47 GMT
Author: msahyoun
Date: Fri Sep  9 10:34:47 2016
New Revision: 1759980

URL: http://svn.apache.org/viewvc?rev=1759980&view=rev
Log:
PDFBOX-3479: remove AP entry for widgets with empty /Rect entry

Modified:
    pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java
    pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestFields.java

Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java?rev=1759980&r1=1759979&r2=1759980&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java
(original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java
Fri Sep  9 10:34:47 2016
@@ -106,6 +106,14 @@ class AppearanceGeneratorHelper
 
         for (PDAnnotationWidget widget : field.getWidgets())
         {
+            PDRectangle rect = widget.getRectangle();
+            if (rect == null)
+            {
+            	widget.getCOSObject().removeItem(COSName.AP);
+                LOG.warn("widget of field " + field.getFullyQualifiedName() + " has no rectangle,
no appearance stream created");
+                continue;
+            }
+        	
             PDFormFieldAdditionalActions actions = field.getActions();
 
             // in case all tests fail the field will be formatted by acrobat
@@ -130,13 +138,6 @@ class AppearanceGeneratorHelper
                 }
                 else
                 {
-                    PDRectangle rect = widget.getRectangle();
-                    if (rect == null)
-                    {
-                        LOG.warn("widget of field " + field.getFullyQualifiedName() + " has
no rectangle, no appearance stream created");
-                        continue;
-                    }
-
                     appearanceStream = new PDAppearanceStream(field.getAcroForm().getDocument());
 
                     // Calculate the entries for the bounding box and the transformation
matrix

Modified: pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestFields.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestFields.java?rev=1759980&r1=1759979&r2=1759980&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestFields.java
(original)
+++ pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestFields.java
Fri Sep  9 10:34:47 2016
@@ -24,6 +24,7 @@ import junit.framework.TestSuite;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSString;
 import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget;
 
 /**
  * This will test the form fields in PDFBox.
@@ -186,6 +187,43 @@ public class TestFields extends TestCase
         }
         finally
         {
+            if( doc != null )
+            {
+                doc.close();
+            }
+        }
+    }
+    
+    /**
+     * This will test the handling of a widget with a missing (required) /Rect entry.
+     *
+     * @throws IOException If there is an error loading the form or the field.
+     */
+    public void testWidgetMissingRect() throws IOException
+    {
+        PDDocument doc = null;
+        
+        try
+        {
+            doc = PDDocument.load(new File(PATH_OF_PDF));
+            
+            PDAcroForm form = doc.getDocumentCatalog().getAcroForm();
+            
+            PDTextField textField = (PDTextField)form.getField("TextField-DefaultValue");
+            PDAnnotationWidget widget = textField.getWidgets().get(0);
+
+            // initially there is an Appearance Entry in the form
+            assertNotNull(widget.getCOSObject().getDictionaryObject(COSName.AP));
+            widget.getCOSObject().removeItem(COSName.RECT);
+            textField.setValue("field value");
+            
+            // There shall be no appearance entry if there is no /Rect to
+            // behave as Adobe Acrobat does
+            assertNull(widget.getCOSObject().getDictionaryObject(COSName.AP));
+             
+        }
+        finally
+        {
             if( doc != null )
             {
                 doc.close();



Mime
View raw message