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);
+    }
 }