You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ja...@apache.org on 2014/10/28 18:29:42 UTC
svn commit: r1634925 - in /pdfbox/trunk:
pdfbox/src/main/java/org/apache/pdfbox/contentstream/
pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/
pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/
pdfbox/src/main/java/org/apache/pdfbox/...
Author: jahewson
Date: Tue Oct 28 17:29:41 2014
New Revision: 1634925
URL: http://svn.apache.org/r1634925
Log:
PDFBOX-2423: Fix content stream rectangle clipping
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDRectangle.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDGraphicsState.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrinter.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/gui/PDFPagePanel.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java?rev=1634925&r1=1634924&r2=1634925&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java Tue Oct 28 17:29:41 2014
@@ -299,21 +299,17 @@ public class PDFStreamEngine
// transform the CTM using the stream's matrix
getGraphicsState().getCurrentTransformationMatrix().concatenate(contentStream.getMatrix());
- // bounding box (for clipping)
+ // clip to bounding box
PDRectangle bbox = contentStream.getBBox();
- if (patternBBox !=null)
+ if (patternBBox != null)
{
bbox = patternBBox;
}
if (bbox != null)
{
- Area clip = new Area(new GeneralPath(new Rectangle(bbox.createDimension())));
-
- // content stream space to user space
- clip.transform(contentStream.getMatrix().createAffineTransform());
-
- // CTM transform (user space => device space)
+ Area clip = new Area(new GeneralPath(bbox.toRectangle2D()));
clip.transform(getGraphicsState().getCurrentTransformationMatrix().createAffineTransform());
+ getGraphicsState().intersectClippingPath(clip);
}
// fixme: stream matrix
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDRectangle.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDRectangle.java?rev=1634925&r1=1634924&r2=1634925&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDRectangle.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDRectangle.java Tue Oct 28 17:29:41 2014
@@ -17,6 +17,7 @@
package org.apache.pdfbox.pdmodel.common;
import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSBase;
import org.apache.pdfbox.cos.COSFloat;
@@ -280,30 +281,8 @@ public class PDRectangle implements COSO
}
/**
- * A convenience method to create a dimension object for AWT operations.
- *
- * @return A dimension that matches the width and height of this rectangle.
+ * Returns a copy of this rectangle which has been transformed using the given matrix.
*/
- public Dimension createDimension()
- {
- return new Dimension( (int)getWidth(), (int)getHeight() );
- }
-
- /**
- * This will move the rectangle the given relative amount.
- *
- * @param horizontalAmount positive values will move rectangle to the right, negative's to the left.
- * @param verticalAmount positive values will move the rectangle up, negative's down.
- */
- public void move(float horizontalAmount, float verticalAmount)
- {
- setUpperRightX(getUpperRightX() + horizontalAmount);
- setLowerLeftX(getLowerLeftX() + horizontalAmount);
- setUpperRightY(getUpperRightY() + verticalAmount);
- setLowerLeftY(getLowerLeftY() + verticalAmount);
- }
-
- // todo: new
public PDRectangle transform(Matrix matrix)
{
Point2D.Float lowerLeft = matrix.transformPoint(getLowerLeftX(), getLowerLeftY());
@@ -327,6 +306,13 @@ public class PDRectangle implements COSO
return rectArray;
}
+ /**
+ * Returns a new Rectangle2D which is equivalent to this PDRectangle.
+ */
+ public Rectangle2D toRectangle2D()
+ {
+ return new Rectangle2D.Float(getLowerLeftX(), getLowerLeftY(), getWidth(), getHeight());
+ }
/**
* This will return a string representation of this rectangle.
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDGraphicsState.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDGraphicsState.java?rev=1634925&r1=1634924&r2=1634925&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDGraphicsState.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDGraphicsState.java Tue Oct 28 17:29:41 2014
@@ -75,7 +75,7 @@ public class PDGraphicsState implements
*/
public PDGraphicsState(PDRectangle page)
{
- clippingPath = new Area(new GeneralPath(new Rectangle(page.createDimension())));
+ clippingPath = new Area(new GeneralPath(page.toRectangle2D()));
if (page.getLowerLeftX() != 0 || page.getLowerLeftY() != 0)
{
//Compensate for offset
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrinter.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrinter.java?rev=1634925&r1=1634924&r2=1634925&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrinter.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrinter.java Tue Oct 28 17:29:41 2014
@@ -307,7 +307,7 @@ public class PDFPrinter
// auto portrait/landscape
if (orientation == Orientation.AUTO)
{
- Dimension cropBox = getRotatedCropBox(page).createDimension();
+ PDRectangle cropBox = getRotatedCropBox(page);
if (cropBox.getWidth() > cropBox.getHeight())
{
format.setOrientation(PageFormat.LANDSCAPE);
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java?rev=1634925&r1=1634924&r2=1634925&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java Tue Oct 28 17:29:41 2014
@@ -109,9 +109,9 @@ public class PDFRenderer
{
PDPage page = document.getPage(pageIndex);
- PDRectangle adjustedCropBox = page.getCropBox();
- float widthPt = adjustedCropBox.getWidth();
- float heightPt = adjustedCropBox.getHeight();
+ PDRectangle cropbBox = page.getCropBox();
+ float widthPt = cropbBox.getWidth();
+ float heightPt = cropbBox.getHeight();
int widthPx = Math.round(widthPt * scale);
int heightPx = Math.round(heightPt * scale);
int rotationAngle = page.getRotation();
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java?rev=1634925&r1=1634924&r2=1634925&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java Tue Oct 28 17:29:41 2014
@@ -772,6 +772,13 @@ public class PageDrawer extends PDFGraph
}
@Override
+ public void showAnnotation(PDAnnotation annotation) throws IOException
+ {
+ lastClip = null;
+ super.showAnnotation(annotation);
+ }
+
+ @Override
public void showTransparencyGroup(PDFormXObject form) throws IOException
{
TransparencyGroup group = createTransparencyGroup(form);
Modified: pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/gui/PDFPagePanel.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/gui/PDFPagePanel.java?rev=1634925&r1=1634924&r2=1634925&view=diff
==============================================================================
--- pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/gui/PDFPagePanel.java (original)
+++ pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/gui/PDFPagePanel.java Tue Oct 28 17:29:41 2014
@@ -60,7 +60,7 @@ public class PDFPagePanel extends JPanel
this.pageNum = pageNum;
PDRectangle cropBox = page.getCropBox();
- drawDimension = cropBox.createDimension();
+ drawDimension = new Dimension((int)cropBox.getWidth(), (int)cropBox.getHeight());
int rotation = page.getRotation();
if (rotation == 90 || rotation == 270)
{