You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by ss...@apache.org on 2017/09/18 15:02:57 UTC
svn commit: r1808727 - in /xmlgraphics/fop-pdf-images/trunk: lib/
src/java/org/apache/fop/render/pdf/pdfbox/
test/java/org/apache/fop/render/pdf/ test/resources/
Author: ssteiner
Date: Mon Sep 18 15:02:56 2017
New Revision: 1808727
URL: http://svn.apache.org/viewvc?rev=1808727&view=rev
Log:
FOP-2739: Avoid rastering PDF with Smask to image
Added:
xmlgraphics/fop-pdf-images/trunk/test/resources/smask.pdf (with props)
Modified:
xmlgraphics/fop-pdf-images/trunk/lib/xmlgraphics-commons-svn-trunk.jar
xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2G2D.java
xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PSPDFGraphics2D.java
xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
Modified: xmlgraphics/fop-pdf-images/trunk/lib/xmlgraphics-commons-svn-trunk.jar
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/lib/xmlgraphics-commons-svn-trunk.jar?rev=1808727&r1=1808726&r2=1808727&view=diff
==============================================================================
Binary files - no diff available.
Modified: xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2G2D.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2G2D.java?rev=1808727&r1=1808726&r2=1808727&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2G2D.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2G2D.java Mon Sep 18 15:02:56 2017
@@ -39,7 +39,6 @@ import org.apache.pdfbox.pdmodel.PDResou
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.graphics.PDXObject;
import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject;
-import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.pdfbox.pdmodel.graphics.shading.PDShading;
import org.apache.pdfbox.rendering.PDFRenderer;
@@ -202,11 +201,6 @@ public class ImageConverterPDF2G2D exten
&& pageHasTransparency(formRes)) {
return true;
}
- } else if (pdxObject instanceof PDImageXObject) {
- if (pdxObject.getCOSStream().containsKey(COSName.SMASK)
- || ((PDImageXObject) pdxObject).isStencil()) {
- return true;
- }
}
}
}
Modified: xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PSPDFGraphics2D.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PSPDFGraphics2D.java?rev=1808727&r1=1808726&r2=1808727&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PSPDFGraphics2D.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PSPDFGraphics2D.java Mon Sep 18 15:02:56 2017
@@ -27,7 +27,10 @@ import java.awt.Image;
import java.awt.Paint;
import java.awt.PaintContext;
import java.awt.Rectangle;
+import java.awt.TexturePaint;
import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.DataBufferInt;
@@ -148,9 +151,43 @@ public class PSPDFGraphics2D extends PSG
handleIOException(ioe);
}
}
+ } else if (paint.getClass().getSimpleName().equals("TilingPaint")) {
+ try {
+ Field f = paint.getClass().getDeclaredField("paint");
+ f.setAccessible(true);
+ TexturePaint texturePaint = (TexturePaint) f.get(paint);
+ f = paint.getClass().getDeclaredField("patternMatrix");
+ f.setAccessible(true);
+ Matrix matrix = (Matrix) f.get(paint);
+ Rectangle2D rect = getTransformedRect(matrix, texturePaint.getAnchorRect());
+ texturePaint = new TexturePaint(texturePaint.getImage(), rect);
+ super.applyPaint(texturePaint, fill);
+ } catch (NoSuchFieldException e) {
+ throw new RuntimeException(e);
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
}
}
+ private static Rectangle2D getTransformedRect(Matrix matrix, Rectangle2D anchorRect) {
+ double x = anchorRect.getX();
+ double y = anchorRect.getY();
+ double width = anchorRect.getWidth();
+ double height = anchorRect.getHeight();
+ AffineTransform at = matrix.createAffineTransform();
+ Point2D p1 = new Point2D.Double(x, y);
+ Point2D p2 = new Point2D.Double(x + width, y + height);
+ at.transform(p1, p1);
+ at.transform(p2, p2);
+ Rectangle2D rectangle = new Rectangle2D.Float(
+ (float) Math.min(p1.getX(), p2.getX()),
+ (float) Math.min(p1.getY(), p2.getY()),
+ (float) Math.abs(width),
+ (float) Math.abs(height));
+ return rectangle;
+ }
+
private void transformCoords(float[] coords, Paint paint, boolean axialShading) {
try {
Field f = paint.getClass().getDeclaredField("matrix");
Modified: xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java?rev=1808727&r1=1808726&r2=1808727&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java Mon Sep 18 15:02:56 2017
@@ -112,6 +112,7 @@ public class PDFBoxAdapterTestCase {
private static final String LOOP = "test/resources/loop.pdf";
private static final String ERROR = "test/resources/error.pdf";
private static final String LIBREOFFICE = "test/resources/libreoffice.pdf";
+ private static final String SMASK = "test/resources/smask.pdf";
private static PDFPage getPDFPage(PDFDocument doc) {
final Rectangle2D r = new Rectangle2D.Double();
@@ -299,7 +300,7 @@ public class PDFBoxAdapterTestCase {
pdfToPS(TTSubset3);
pdfToPS(TTSubset5);
stream = pdfToPS(CFFCID1);
- Assert.assertEquals(countString(stream.toString("UTF-8"), "%AXGBeginBitmap:"), 1);
+ Assert.assertEquals(countString(stream.toString("UTF-8"), "%AXGBeginBitmap:"), 2);
pdfToPS(CFFCID2);
pdfToPS(Type1Subset1);
pdfToPS(Type1Subset2);
@@ -360,6 +361,13 @@ public class PDFBoxAdapterTestCase {
}
@Test
+ public void testSmask() throws IOException, ImageException {
+ ByteArrayOutputStream ps = pdfToPS(SMASK);
+ Assert.assertTrue(ps.toString("UTF-8").contains("/Pattern"));
+ Assert.assertTrue(ps.toString("UTF-8").contains("{<\nf1f1f1"));
+ }
+
+ @Test
public void testPCL() throws IOException, ImageException {
String ex = "";
try {
Added: xmlgraphics/fop-pdf-images/trunk/test/resources/smask.pdf
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/test/resources/smask.pdf?rev=1808727&view=auto
==============================================================================
Binary file - no diff available.
Propchange: xmlgraphics/fop-pdf-images/trunk/test/resources/smask.pdf
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org