You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2010/03/23 19:39:12 UTC

svn commit: r926714 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox: pdmodel/graphics/PDGraphicsState.java util/PDFStreamEngine.java util/operator/pagedrawer/BeginInlineImage.java util/operator/pagedrawer/Invoke.java

Author: lehmi
Date: Tue Mar 23 18:39:11 2010
New Revision: 926714

URL: http://svn.apache.org/viewvc?rev=926714&view=rev
Log:
PDFBOX-632: ensure that the current clipping path is never null

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDGraphicsState.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/BeginInlineImage.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/Invoke.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDGraphicsState.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDGraphicsState.java?rev=926714&r1=926713&r2=926714&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDGraphicsState.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDGraphicsState.java Tue Mar 23 18:39:11 2010
@@ -16,9 +16,12 @@
  */
 package org.apache.pdfbox.pdmodel.graphics;
 
+import java.awt.Dimension;
+import java.awt.Rectangle;
 import java.awt.Shape;
 import java.awt.geom.GeneralPath;
 
+import org.apache.pdfbox.pdmodel.common.PDRectangle;
 import org.apache.pdfbox.pdmodel.graphics.color.PDColorState;
 import org.apache.pdfbox.pdmodel.text.PDTextState;
 import org.apache.pdfbox.util.Matrix;
@@ -65,6 +68,21 @@ public class PDGraphicsState implements 
     private GeneralPath currentClippingPath;
 
     /**
+     * Default constructor.
+     */
+    public PDGraphicsState() 
+    {
+    }    
+
+    /**
+     * Constructor with a given pagesize to initialize the clipping path.
+     * @param page the size of the page
+     */
+    public PDGraphicsState(PDRectangle page) 
+    {
+        currentClippingPath = new GeneralPath(new Rectangle(page.createDimension()));
+    }
+    /**
      * Get the value of the CTM.
      *
      * @return The current transformation matrix.

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java?rev=926714&r1=926713&r2=926714&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java Tue Mar 23 18:39:11 2010
@@ -198,7 +198,7 @@ public class PDFStreamEngine
      */
     public void processStream( PDPage aPage, PDResources resources, COSStream cosStream ) throws IOException
     {
-        graphicsState = new PDGraphicsState();
+        graphicsState = new PDGraphicsState(aPage.findCropBox());
         textMatrix = null;
         textLineMatrix = null;
         graphicsStack.clear();

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/BeginInlineImage.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/BeginInlineImage.java?rev=926714&r1=926713&r2=926714&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/BeginInlineImage.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/BeginInlineImage.java Tue Mar 23 18:39:11 2010
@@ -16,10 +16,7 @@
  */
 package org.apache.pdfbox.util.operator.pagedrawer;
 
-import java.awt.Dimension;
 import java.awt.Graphics2D;
-import java.awt.Rectangle;
-import java.awt.Shape;
 import java.awt.geom.AffineTransform;
 import java.awt.image.BufferedImage;
 import java.io.IOException;
@@ -60,7 +57,6 @@ public class BeginInlineImage extends Op
     {
         PageDrawer drawer = (PageDrawer)context;
         PDPage page = drawer.getPage();
-        Dimension pageSize = drawer.getPageSize();
         Graphics2D graphics = drawer.getGraphics();
         //begin inline image object
         ImageParameters params = operator.getImageParameters();
@@ -76,7 +72,7 @@ public class BeginInlineImage extends Op
         }
         int imageWidth = awtImage.getWidth();
         int imageHeight = awtImage.getHeight();
-        double pageHeight = pageSize.getHeight();
+        double pageHeight = drawer.getPageSize().getHeight();
         
         Matrix ctm = drawer.getGraphicsState().getCurrentTransformationMatrix();
         int pageRotation = page.findRotation();
@@ -101,15 +97,7 @@ public class BeginInlineImage extends Op
                 rotationMatrix.getValue(1,0), rotationMatrix.getValue( 1, 1),
                 rotationMatrix.getValue(2,0),rotationMatrix.getValue(2,1)
                 );
-        Shape clip = context.getGraphicsState().getCurrentClippingPath();
-        // If the pdf is printed, sometimes a NPE occurs, see PDFBOX-552 for details
-        // As a workaround we have to replace a possible null-value with a rectangle having 
-        // the same dimension than the page to be printed
-        if (clip == null)
-        {
-            clip = new Rectangle(pageSize);
-        }
-        graphics.setClip(clip);
+        graphics.setClip(context.getGraphicsState().getCurrentClippingPath());
         graphics.drawImage( awtImage, at, null );
     }
 }
\ No newline at end of file

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/Invoke.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/Invoke.java?rev=926714&r1=926713&r2=926714&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/Invoke.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/Invoke.java Tue Mar 23 18:39:11 2010
@@ -16,10 +16,7 @@
  */
 package org.apache.pdfbox.util.operator.pagedrawer;
 
-import java.awt.Dimension;
 import java.awt.Graphics2D;
-import java.awt.Rectangle;
-import java.awt.Shape;
 import java.awt.geom.AffineTransform;
 import java.awt.image.BufferedImage;
 import java.io.IOException;
@@ -65,7 +62,6 @@ public class Invoke extends OperatorProc
     {
         PageDrawer drawer = (PageDrawer)context;
         PDPage page = drawer.getPage();
-        Dimension pageSize = drawer.getPageSize();
         Graphics2D graphics = drawer.getGraphics();
         COSName objectName = (COSName)arguments.get( 0 );
         Map xobjects = drawer.getResources().getXObjects();
@@ -84,7 +80,7 @@ public class Invoke extends OperatorProc
                 }
                 int imageWidth = awtImage.getWidth();
                 int imageHeight = awtImage.getHeight();
-                double pageHeight = pageSize.getHeight();
+                double pageHeight = drawer.getPageSize().getHeight();
 
                 log.info("imageWidth: " + imageWidth + "\t\timageHeight: " + imageHeight);
         
@@ -112,15 +108,7 @@ public class Invoke extends OperatorProc
                         rotationMatrix.getValue(1,0), rotationMatrix.getValue( 1, 1),
                         rotationMatrix.getValue(2,0),rotationMatrix.getValue(2,1)
                     );
-                Shape clip = context.getGraphicsState().getCurrentClippingPath();
-                // If the pdf is printed, sometimes a NPE occurs, see PDFBOX-552 for details
-                // As a workaround we have to replace a possible null-value with a rectangle having 
-                // the same dimension than the page to be printed
-                if (clip == null)
-                {
-                    clip = new Rectangle(pageSize);
-                }
-                graphics.setClip(clip);
+                graphics.setClip(context.getGraphicsState().getCurrentClippingPath());
                 graphics.drawImage( awtImage, at, null );
             }
             catch( Exception e )