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/06/26 20:03:07 UTC
svn commit: r1605864 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/Invoke.java
Author: tilman
Date: Thu Jun 26 18:03:07 2014
New Revision: 1605864
URL: http://svn.apache.org/r1605864
Log:
PDFBOX-1875: use BBox for clipping when rendering a form xobject
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/Invoke.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/Invoke.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/Invoke.java?rev=1605864&r1=1605863&r2=1605864&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/Invoke.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/Invoke.java Thu Jun 26 18:03:07 2014
@@ -17,6 +17,9 @@
package org.apache.pdfbox.util.operator.pagedrawer;
import java.awt.geom.AffineTransform;
+import java.awt.geom.Area;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Point2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.List;
@@ -30,11 +33,13 @@ import org.apache.pdfbox.cos.COSStream;
import org.apache.pdfbox.filter.MissingImageReaderException;
import org.apache.pdfbox.rendering.PageDrawer;
import org.apache.pdfbox.pdmodel.PDResources;
+import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.graphics.color.PDColor;
import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace;
import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.pdfbox.pdmodel.graphics.PDXObject;
+import org.apache.pdfbox.pdmodel.graphics.state.PDGraphicsState;
import org.apache.pdfbox.util.Matrix;
import org.apache.pdfbox.util.operator.PDFOperator;
import org.apache.pdfbox.util.operator.OperatorProcessor;
@@ -118,6 +123,34 @@ public final class Invoke extends Operat
context.getGraphicsState().getCurrentTransformationMatrix());
context.getGraphicsState().setCurrentTransformationMatrix(xobjectCTM);
}
+ if (form.getBBox() != null)
+ {
+ PDGraphicsState graphicsState = context.getGraphicsState();
+ PDRectangle bBox = form.getBBox();
+
+ float x1 = bBox.getLowerLeftX();
+ float y1 = bBox.getLowerLeftY();
+ float x2 = bBox.getUpperRightX();
+ float y2 = bBox.getUpperRightY();
+
+ Point2D p0 = drawer.transformedPoint(x1, y1);
+ Point2D p1 = drawer.transformedPoint(x2, y1);
+ Point2D p2 = drawer.transformedPoint(x2, y2);
+ Point2D p3 = drawer.transformedPoint(x1, y2);
+
+ GeneralPath bboxPath = new GeneralPath();
+ bboxPath.moveTo((float) p0.getX(), (float) p0.getY());
+ bboxPath.lineTo((float) p1.getX(), (float) p1.getY());
+ bboxPath.lineTo((float) p2.getX(), (float) p2.getY());
+ bboxPath.lineTo((float) p3.getX(), (float) p3.getY());
+ bboxPath.closePath();
+
+ Area resultClippingArea = new Area(graphicsState.getCurrentClippingPath());
+ Area newArea = new Area(bboxPath);
+ resultClippingArea.intersect(newArea);
+
+ graphicsState.setCurrentClippingPath(resultClippingArea);
+ }
getContext().processSubStream(pdResources, formContentStream);
// restore the graphics state