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 2013/03/24 14:40:25 UTC
svn commit: r1460370 - in
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox:
pdfviewer/PageDrawer.java
pdmodel/interactive/annotation/PDAppearanceStream.java
Author: lehmi
Date: Sun Mar 24 13:40:25 2013
New Revision: 1460370
URL: http://svn.apache.org/r1460370
Log:
PDFBOX-1538 use a given transformation matrix when rendering an annotation
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceStream.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java?rev=1460370&r1=1460369&r2=1460370&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java Sun Mar 24 13:40:25 2013
@@ -124,7 +124,7 @@ public class PageDrawer extends PDFStrea
PDResources resources = page.findResources();
processStream( page, resources, page.getContents().getStream() );
}
- List annotations = page.getAnnotations();
+ List<PDAnnotation> annotations = page.getAnnotations();
for( int i=0; i<annotations.size(); i++ )
{
PDAnnotation annot = (PDAnnotation)annotations.get( i );
@@ -137,16 +137,24 @@ public class PageDrawer extends PDFStrea
{
appearanceName = "default";
}
- Map appearanceMap = appearDictionary.getNormalAppearance();
+ Map<String, PDAppearanceStream> appearanceMap = appearDictionary.getNormalAppearance();
if (appearanceMap != null)
{
PDAppearanceStream appearance =
(PDAppearanceStream)appearanceMap.get( appearanceName );
if( appearance != null )
{
- g.translate( (int)rect.getLowerLeftX(), (int)-rect.getLowerLeftY() );
+ Point2D point = new Point2D.Float(rect.getLowerLeftX(), rect.getLowerLeftY());
+ Matrix matrix = appearance.getMatrix();
+ if (matrix != null)
+ {
+ // transform the rectangle using the given matrix
+ AffineTransform at = matrix.createAffineTransform();
+ at.transform(point, point);
+ }
+ g.translate( (int)point.getX(), -(int)point.getY() );
processSubStream( page, appearance.getResources(), appearance.getStream() );
- g.translate( (int)-rect.getLowerLeftX(), (int)+rect.getLowerLeftY() );
+ g.translate( -(int)point.getX(), (int)point.getY() );
}
}
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceStream.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceStream.java?rev=1460370&r1=1460369&r2=1460370&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceStream.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceStream.java Sun Mar 24 13:40:25 2013
@@ -16,16 +16,21 @@
*/
package org.apache.pdfbox.pdmodel.interactive.annotation;
+import java.awt.geom.AffineTransform;
+
import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSBase;
import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.cos.COSFloat;
import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.cos.COSNumber;
import org.apache.pdfbox.cos.COSStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.common.COSObjectable;
import org.apache.pdfbox.pdmodel.PDResources;
+import org.apache.pdfbox.util.Matrix;
/**
@@ -76,7 +81,7 @@ public class PDAppearanceStream implemen
public PDRectangle getBoundingBox()
{
PDRectangle box = null;
- COSArray bbox = (COSArray)stream.getDictionaryObject( COSName.getPDFName( "BBox" ) );
+ COSArray bbox = (COSArray)stream.getDictionaryObject( COSName.BBOX );
if( bbox != null )
{
box = new PDRectangle( bbox );
@@ -96,7 +101,7 @@ public class PDAppearanceStream implemen
{
array = rectangle.getCOSArray();
}
- stream.setItem( COSName.getPDFName( "BBox" ), array );
+ stream.setItem( COSName.BBOX, array );
}
/**
@@ -129,4 +134,50 @@ public class PDAppearanceStream implemen
}
stream.setItem( COSName.RESOURCES, dict );
}
+
+ /**
+ * Gets the optional matrix for this appearance. This may return null.
+ *
+ * @return The matrix of this appearance.
+ */
+ public Matrix getMatrix()
+ {
+ Matrix retval = null;
+ COSArray array = (COSArray)stream.getDictionaryObject( COSName.MATRIX );
+ if( array != null )
+ {
+ retval = new Matrix();
+ retval.setValue(0, 0, ((COSNumber) array.get(0)).floatValue());
+ retval.setValue(0, 1, ((COSNumber) array.get(1)).floatValue());
+ retval.setValue(1, 0, ((COSNumber) array.get(2)).floatValue());
+ retval.setValue(1, 1, ((COSNumber) array.get(3)).floatValue());
+ retval.setValue(2, 0, ((COSNumber) array.get(4)).floatValue());
+ retval.setValue(2, 1, ((COSNumber) array.get(5)).floatValue());
+ }
+ return retval;
+ }
+
+ /**
+ * Sets the optional Matrix entry for this appearance.
+ * @param transform the transformation matrix
+ */
+ public void setMatrix(AffineTransform transform)
+ {
+ if (transform != null)
+ {
+ COSArray matrix = new COSArray();
+ double[] values = new double[6];
+ transform.getMatrix(values);
+ for (double v : values)
+ {
+ matrix.add(new COSFloat((float)v));
+ }
+ stream.setItem(COSName.MATRIX, matrix);
+ }
+ else
+ {
+ stream.removeItem(COSName.MATRIX);
+ }
+ }
+
}