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 )