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 2016/12/12 05:53:47 UTC

svn commit: r1773739 - /pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java

Author: msahyoun
Date: Mon Dec 12 05:53:47 2016
New Revision: 1773739

URL: http://svn.apache.org/viewvc?rev=1773739&view=rev
Log:
PDFBOX-3396: dont applay a transformation if the PDFormXObject has a BBox not starting at 0,0

Modified:
    pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java

Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java?rev=1773739&r1=1773738&r2=1773739&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java Mon Dec 12 05:53:47 2016
@@ -709,7 +709,38 @@ public final class PDAcroForm implements
      */
     private boolean resolveNeedsTranslation(PDAppearanceStream appearanceStream)
     {
-        // TODO: implement special cases for files in PDFBOX-3396
+boolean needsTranslation = false;
+        
+        PDResources resources = appearanceStream.getResources();
+        if (resources != null && resources.getXObjectNames().iterator().hasNext())
+        {           
+            
+            Iterator<COSName> xObjectNames = resources.getXObjectNames().iterator();
+            
+            while (xObjectNames.hasNext())
+            {
+                try
+                {
+                    // if the BBox of the PDFormXObject does not start at 0,0
+                    // there is no need do translate as this is done by the BBox definition.
+                    PDFormXObject xObject = (PDFormXObject) resources.getXObject(xObjectNames.next());
+                    PDRectangle bbox = xObject.getBBox();
+                    float llX = bbox.getLowerLeftX();
+                    float llY = bbox.getLowerLeftY();
+                    if (llX == 0 && llY == 0)
+                    {
+                        needsTranslation = true;
+                    }
+                }
+                catch (IOException e)
+                {
+                    // we can safely ignore the exception here
+                    // as this might only cause a misplacement
+                }
+            }
+            return needsTranslation;
+        }
+        
         return true;
     }