You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2014/07/05 05:25:15 UTC

svn commit: r1607971 - /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/AppendRectangleToPath.java

Author: tilman
Date: Sat Jul  5 03:25:15 2014
New Revision: 1607971

URL: http://svn.apache.org/r1607971
Log:
PDFBOX-2185: correct application of rotation and skew to rectangles, as suggested by Petr Slaby

Modified:
    pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/AppendRectangleToPath.java

Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/AppendRectangleToPath.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/AppendRectangleToPath.java?rev=1607971&r1=1607970&r2=1607971&view=diff
==============================================================================
--- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/AppendRectangleToPath.java (original)
+++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/AppendRectangleToPath.java Sat Jul  5 03:25:15 2014
@@ -30,51 +30,48 @@ import org.apache.pdfbox.util.operator.O
  * Implementation of content stream operator for page drawer.
  *
  * @author <a href="mailto:ben@benlitchfield.com">Ben Litchfield</a>
- * 
+ *
  */
 public class AppendRectangleToPath extends OperatorProcessor
 {
 
-
     /**
      * process : re : append rectangle to path.
+     *
      * @param operator The operator that is being executed.
      * @param arguments List
      */
     public void process(PDFOperator operator, List<COSBase> arguments)
     {
-        PageDrawer drawer = (PageDrawer)context;
+        PageDrawer drawer = (PageDrawer) context;
 
-        COSNumber x = (COSNumber)arguments.get( 0 );
-        COSNumber y = (COSNumber)arguments.get( 1 );
-        COSNumber w = (COSNumber)arguments.get( 2 );
-        COSNumber h = (COSNumber)arguments.get( 3 );
+        COSNumber x = (COSNumber) arguments.get(0);
+        COSNumber y = (COSNumber) arguments.get(1);
+        COSNumber w = (COSNumber) arguments.get(2);
+        COSNumber h = (COSNumber) arguments.get(3);
 
         double x1 = x.doubleValue();
         double y1 = y.doubleValue();
-        // create a pair of coordinates for the transformation 
-        double x2 = w.doubleValue()+x1;
-        double y2 = h.doubleValue()+y1;
-
-        Point2D startCoords = drawer.transformedPoint(x1,y1);
-        Point2D endCoords = drawer.transformedPoint(x2,y2);
-
-        float width = (float)(endCoords.getX()-startCoords.getX());
-        float height = (float)(endCoords.getY()-startCoords.getY());
-        float xStart = (float)startCoords.getX();
-        float yStart = (float)startCoords.getY();
-
-        // To ensure that the path is created in the right direction,
-        // we have to create it by combining single lines instead of
-        // creating a simple rectangle
+
+        // create a pair of coordinates for the transformation
+        double x2 = w.doubleValue() + x1;
+        double y2 = h.doubleValue() + y1;
+
+        Point2D p0 = drawer.transformedPoint(x1, y1);
+        Point2D p1 = drawer.transformedPoint(x2, y1);
+        Point2D p2 = drawer.transformedPoint(x2, y2);
+        Point2D p3 = drawer.transformedPoint(x1, y2);
+
+        // to ensure that the path is created in the right direction, we have to create
+        // it by combining single lines instead of creating a simple rectangle
         GeneralPath path = drawer.getLinePath();
-        path.moveTo(xStart, yStart);
-        path.lineTo(xStart+width, yStart);
-        path.lineTo(xStart+width, yStart+height);
-        path.lineTo(xStart, yStart+height);
-        // close the subpath instead of adding the last line
-        // so that a possible set line cap style isn't taken into account
-        // at the "beginning" of the rectangle
+        path.moveTo((float) p0.getX(), (float) p0.getY());
+        path.lineTo((float) p1.getX(), (float) p1.getY());
+        path.lineTo((float) p2.getX(), (float) p2.getY());
+        path.lineTo((float) p3.getX(), (float) p3.getY());
+
+        // close the subpath instead of adding the last line so that a possible set line
+        // cap style isn't taken into account at the "beginning" of the rectangle
         path.closePath();
     }
 }