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 2009/09/13 12:19:38 UTC
svn commit: r814296 -
/incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/BeginInlineImage.java
Author: lehmi
Date: Sun Sep 13 10:19:38 2009
New Revision: 814296
URL: http://svn.apache.org/viewvc?rev=814296&view=rev
Log:
PDFBOX529: adding page rotation handling to inline image operator. Patch from Andrew Duffy (aduffy at simiolus dot com)
Modified:
incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/BeginInlineImage.java
Modified: incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/BeginInlineImage.java
URL: http://svn.apache.org/viewvc/incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/BeginInlineImage.java?rev=814296&r1=814295&r2=814296&view=diff
==============================================================================
--- incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/BeginInlineImage.java (original)
+++ incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/BeginInlineImage.java Sun Sep 13 10:19:38 2009
@@ -16,6 +16,7 @@
*/
package org.apache.pdfbox.util.operator.pagedrawer;
+import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
@@ -23,6 +24,7 @@
import java.util.List;
import org.apache.pdfbox.pdfviewer.PageDrawer;
+import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.graphics.xobject.PDInlinedImage;
import org.apache.pdfbox.util.ImageParameters;
import org.apache.pdfbox.util.Matrix;
@@ -48,6 +50,8 @@
public void process(PDFOperator operator, List arguments) throws IOException
{
PageDrawer drawer = (PageDrawer)context;
+ PDPage page = drawer.getPage();
+ Dimension pageSize = drawer.getPageSize();
Graphics2D graphics = drawer.getGraphics();
//begin inline image object
ImageParameters params = operator.getImageParameters();
@@ -56,20 +60,39 @@
image.setImageData( operator.getImageData() );
BufferedImage awtImage = image.createImage( context.getColorSpaces() );
+ if (awtImage == null)
+ {
+ logger().warn("BeginInlineImage.process(): createImage returned NULL");
+ return;
+ }
+ int imageWidth = awtImage.getWidth();
+ int imageHeight = awtImage.getHeight();
+ double pageHeight = pageSize.getHeight();
+
Matrix ctm = drawer.getGraphicsState().getCurrentTransformationMatrix();
+ int pageRotation = page.findRotation();
- int width = awtImage.getWidth();
- int height = awtImage.getHeight();
-
-
+ AffineTransform ctmAT = ctm.createAffineTransform();
+ ctmAT.scale(1f/imageWidth, 1f/imageHeight);
+ Matrix rotationMatrix = new Matrix();
+ rotationMatrix.setFromAffineTransform( ctmAT );
+ if (pageRotation == 0 || pageRotation == 180)
+ {
+ rotationMatrix.setValue(2,1,(float)pageHeight-ctm.getYPosition()-ctm.getYScale());
+ }
+ else if (pageRotation == 90 || pageRotation == 270)
+ {
+ rotationMatrix.setValue(2,0,(float)ctm.getXPosition()-ctm.getYScale());
+ rotationMatrix.setValue(2,1,(float)pageHeight-ctm.getYPosition());
+ }
+ rotationMatrix.setValue(0, 1, (-1)*rotationMatrix.getValue(0, 1));
+ rotationMatrix.setValue(1, 0, (-1)*rotationMatrix.getValue(1, 0));
AffineTransform at = new AffineTransform(
- ctm.getValue(0,0)/width,
- ctm.getValue(0,1),
- ctm.getValue(1,0),
- ctm.getValue(1,1)/height,
- ctm.getValue(2,0),
- ctm.getValue(2,1)
- );
+ rotationMatrix.getValue(0,0),rotationMatrix.getValue(0,1),
+ rotationMatrix.getValue(1,0), rotationMatrix.getValue( 1, 1),
+ rotationMatrix.getValue(2,0),rotationMatrix.getValue(2,1)
+ );
+
graphics.setClip(context.getGraphicsState().getCurrentClippingPath());
graphics.drawImage( awtImage, at, null );
}