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 )


Reply via email to