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 2012/10/14 14:35:44 UTC

svn commit: r1398069 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPage.java

Author: lehmi
Date: Sun Oct 14 12:35:43 2012
New Revision: 1398069

URL: http://svn.apache.org/viewvc?rev=1398069&view=rev
Log:
PDFBOX-1427: fixed page rotation as proposed by Ravi Hegde

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPage.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPage.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPage.java?rev=1398069&r1=1398068&r2=1398069&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPage.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPage.java Sun Oct 14 12:35:43 2012
@@ -708,8 +708,17 @@ public class PDPage implements COSObject
         //TODO The following reduces accuracy. It should really be a Dimension2D.Float.
         Dimension pageDimension = new Dimension( (int)widthPt, (int)heightPt );
         BufferedImage retval = null;
-        float rotation = (float)Math.toRadians(findRotation());
-        if (rotation != 0)
+        int rotationAngle = findRotation();
+        // normalize the rotation angle
+        if (rotationAngle < 0)
+        {
+            rotationAngle += 360;
+        }
+        else if (rotationAngle >= 360)
+        {
+            rotationAngle -= 360;
+        }
+        if (rotationAngle != 0)
         {
             retval = new BufferedImage( heightPx, widthPx, imageType );
         }
@@ -720,10 +729,27 @@ public class PDPage implements COSObject
         Graphics2D graphics = (Graphics2D)retval.getGraphics();
         graphics.setBackground( TRANSPARENT_WHITE );
         graphics.clearRect( 0, 0, retval.getWidth(), retval.getHeight() );
-        if (rotation != 0)
+        if (rotationAngle != 0)
         {
-            graphics.translate(retval.getWidth(), 0.0f);
-            graphics.rotate(rotation);
+            int translateX = 0;
+            int translateY = 0;
+            switch(rotationAngle) 
+            {
+                case 90:
+                    translateX = retval.getWidth();
+                    break;
+                case 270:
+                    translateY = retval.getHeight();
+                    break;
+                case 180:
+                    translateX = retval.getWidth();
+                    translateY = retval.getHeight();
+                    break;
+                default:
+                    break;
+            }
+            graphics.translate(translateX,translateY);
+            graphics.rotate((float)Math.toRadians(rotationAngle));
         }
         graphics.scale( scaling, scaling );
         PageDrawer drawer = new PageDrawer();
@@ -801,6 +827,7 @@ public class PDPage implements COSObject
 
     /**
      * @deprecated Use the {@link PDPageable} adapter class
+     * {@inheritDoc}
      */
     public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)
         throws PrinterException