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)
         {