FOP-2802: Java 10 PDF/SVG to Image box not shown
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop-pdf-images/trunk@1835226 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2G2D.java b/src/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2G2D.java
index 50a2d0f..379485d 100644
--- a/src/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2G2D.java
+++ b/src/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2G2D.java
@@ -25,6 +25,8 @@
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -58,6 +60,7 @@
import org.apache.xmlgraphics.image.loader.impl.AbstractImageConverter;
import org.apache.xmlgraphics.image.loader.impl.ImageGraphics2D;
import org.apache.xmlgraphics.image.loader.util.ImageUtil;
+import org.apache.xmlgraphics.java2d.AbstractGraphics2D;
import org.apache.xmlgraphics.java2d.GeneralGraphics2DImagePainter;
import org.apache.xmlgraphics.java2d.Graphics2DImagePainter;
import org.apache.xmlgraphics.java2d.ps.PSGraphics2D;
@@ -162,6 +165,7 @@
at.scale(area.getWidth() / mediaBox.getWidth(),
area.getHeight() / mediaBox.getHeight());
g2d.transform(at);
+ normaliseScale(g2d);
new PDFRenderer(pdDocument).renderPageToGraphics(selectedPage, g2d);
}
} catch (UnsupportedOperationException e) {
@@ -173,6 +177,17 @@
}
}
+ private void normaliseScale(Graphics2D g2d) {
+ if (!(g2d instanceof AbstractGraphics2D)) {
+ AffineTransform old = g2d.getTransform();
+ double scaleX = BigDecimal.valueOf(old.getScaleX()).setScale(2, RoundingMode.HALF_UP).doubleValue();
+ double scaleY = BigDecimal.valueOf(old.getScaleY()).setScale(2, RoundingMode.HALF_UP).doubleValue();
+ AffineTransform newat = new AffineTransform(scaleX, old.getShearY(), old.getShearX(), scaleY,
+ old.getTranslateX(), old.getTranslateY());
+ g2d.setTransform(newat);
+ }
+ }
+
private void drawPageAsImage(AffineTransform at, Graphics2D g2d) throws IOException {
PDFRenderer renderer = new PDFRenderer(pdDocument);
BufferedImage bi = renderer.renderImageWithDPI(selectedPage, dpi);
diff --git a/test/java/org/apache/fop/render/pdf/ImageConverterPDF2G2DTestCase.java b/test/java/org/apache/fop/render/pdf/ImageConverterPDF2G2DTestCase.java
index 4ac7321..2683521 100644
--- a/test/java/org/apache/fop/render/pdf/ImageConverterPDF2G2DTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/ImageConverterPDF2G2DTestCase.java
@@ -18,7 +18,10 @@
/* $Id: ImageConverterPDF2G2D.java 1808727 2017-09-18 15:02:56Z ssteiner $ */
package org.apache.fop.render.pdf;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
@@ -97,4 +100,18 @@
return true;
}
}
+
+ @Test
+ public void testPDFToImage() throws IOException, ImageException {
+ PDDocument doc = PDDocument.load(new File(FONTSNOTEMBEDDED));
+ ImageInfo imgi = new ImageInfo(FONTSNOTEMBEDDED, "b");
+ org.apache.xmlgraphics.image.loader.Image img = new ImagePDF(imgi, doc);
+ ImageConverterPDF2G2D imageConverterPDF2G2D = new ImageConverterPDF2G2D();
+ ImageGraphics2D fopGraphics2D = (ImageGraphics2D) imageConverterPDF2G2D.convert(img, null);
+ BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
+ Graphics2D graphics2D = image.createGraphics();
+ fopGraphics2D.getGraphics2DImagePainter().paint(graphics2D, new Rectangle(0, 0, 1000, 1000));
+ doc.close();
+ Assert.assertEquals(graphics2D.getTransform().getScaleX(), 1.63, 0);
+ }
}