FOP-2694: PDF plugin doesnt show which pdf failed

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop-pdf-images/trunk@1784706 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 4c1e806..8cff264 100644
--- a/src/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2G2D.java
+++ b/src/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2G2D.java
@@ -58,7 +58,8 @@
 
         PDDocument pddoc = imgPDF.getPDDocument();
 
-        Graphics2DImagePainter painter = new Graphics2DImagePainterPDF(pddoc, selectedPage);
+        Graphics2DImagePainter painter =
+                new Graphics2DImagePainterPDF(pddoc, selectedPage, imgPDF.getInfo().getOriginalURI());
 
         ImageGraphics2D g2dImage = new ImageGraphics2D(src.getInfo(), painter);
         return g2dImage;
@@ -85,11 +86,13 @@
         private final PDPage page;
         private final PDDocument pdDocument;
         private int selectedPage;
+        private String uri;
 
-        public Graphics2DImagePainterPDF(PDDocument pddoc, int selectedPage) {
+        public Graphics2DImagePainterPDF(PDDocument pddoc, int selectedPage, String uri) {
             pdDocument = pddoc;
             this.selectedPage = selectedPage;
             page = pdDocument.getPage(selectedPage);
+            this.uri = uri;
         }
 
         /** {@inheritDoc} */
@@ -114,9 +117,8 @@
                         area.getHeight() / mediaBox.getHeight());
                 g2d.transform(at);
                 new PDFRenderer(pdDocument).renderPageToGraphics(selectedPage, g2d);
-            } catch (IOException ioe) {
-                //TODO Better exception handling
-                throw new RuntimeException("I/O error while painting PDF page", ioe);
+            } catch (Throwable t) {
+                throw new RuntimeException("Error while painting PDF page: " + uri, t);
             }
         }
 
diff --git a/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxImageHandler.java b/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxImageHandler.java
index 273e167..de7cd52 100644
--- a/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxImageHandler.java
+++ b/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxImageHandler.java
@@ -55,31 +55,33 @@
         PDFContentGenerator generator = pdfContext.getGenerator();
         assert image instanceof ImagePDF;
         ImagePDF pdfImage = (ImagePDF)image;
+        try {
+            float x = (float)pos.getX() / 1000f;
+            float y = (float)pos.getY() / 1000f;
+            float h = (float)pos.getHeight() / 1000f;
 
-        float x = (float)pos.getX() / 1000f;
-        float y = (float)pos.getY() / 1000f;
-//        float w = (float)pos.getWidth() / 1000f;
-        float h = (float)pos.getHeight() / 1000f;
+            AffineTransform pageAdjust = new AffineTransform();
+            AffineTransform at = generator.getAffineTransform();
+            if (at != null) {
+                pageAdjust.setToTranslation(
+                    (float)(generator.getState().getTransform().getTranslateX()),
+                    (float)(generator.getState().getTransform().getTranslateY() - h - y));
+            }
+            FontInfo fontinfo = (FontInfo)context.getHint("fontinfo");
+            String stream = createStreamForPDF(pdfImage, pdfContext.getPage(), pdfContext.getUserAgent(),
+                    pageAdjust, fontinfo, pos, pdfContext.getPageNumbers(),
+                    pdfContext.getPdfLogicalStructureHandler(), pdfContext.getCurrentSessionStructElem());
 
-        AffineTransform pageAdjust = new AffineTransform();
-        AffineTransform at = generator.getAffineTransform();
-        if (at != null) {
-            pageAdjust.setToTranslation(
-                (float)(generator.getState().getTransform().getTranslateX()),
-                (float)(generator.getState().getTransform().getTranslateY() - h - y));
+            if (stream == null) {
+                return;
+            }
+            if (pageAdjust.getScaleX() != 0) {
+                pageAdjust.translate(x * (1 / pageAdjust.getScaleX()), -y * (1 / -pageAdjust.getScaleY()));
+            }
+            generator.placeImage(pageAdjust, stream);
+        } catch (Throwable t) {
+            throw new RuntimeException("Error on PDF page: " + pdfImage.getInfo().getOriginalURI(), t);
         }
-        FontInfo fontinfo = (FontInfo)context.getHint("fontinfo");
-        String stream = createStreamForPDF(pdfImage, pdfContext.getPage(), pdfContext.getUserAgent(),
-                pageAdjust, fontinfo, pos, pdfContext.getPageNumbers(),
-                pdfContext.getPdfLogicalStructureHandler(), pdfContext.getCurrentSessionStructElem());
-
-        if (stream == null) {
-            return;
-        }
-        if (pageAdjust.getScaleX() != 0) {
-            pageAdjust.translate(x * (1 / pageAdjust.getScaleX()), -y * (1 / -pageAdjust.getScaleY()));
-        }
-        generator.placeImage(pageAdjust, stream);
     }
 
     /** {@inheritDoc} */
diff --git a/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java b/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
index eda1af7..0d387e1 100644
--- a/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
@@ -107,6 +107,7 @@
     private static final String HELLOTagged = "test/resources/taggedWorld.pdf";
     private static final String XFORM = "test/resources/xform.pdf";
     private static final String LOOP = "test/resources/loop.pdf";
+    private static final String ERROR = "test/resources/error.pdf";
 
     private static PDFPage getPDFPage(PDFDocument doc) {
         final Rectangle2D r = new Rectangle2D.Double();
@@ -335,7 +336,7 @@
 
     private ByteArrayOutputStream pdfToPS(String pdf) throws IOException, ImageException {
         ImageConverterPDF2G2D i = new ImageConverterPDF2G2D();
-        ImageInfo imgi = new ImageInfo("a", "b");
+        ImageInfo imgi = new ImageInfo(pdf, "b");
         PDDocument doc = PDDocument.load(new File(pdf));
         org.apache.xmlgraphics.image.loader.Image img = new ImagePDF(imgi, doc);
         ImageGraphics2D ig = (ImageGraphics2D)i.convert(img, null);
@@ -435,4 +436,28 @@
         Assert.assertEquals(strings, 34);
         Assert.assertEquals(objectCachePerFile.size(), 45);
     }
+
+    @Test
+    public void testErrorMsgToPS() throws IOException, ImageException {
+        String msg = "";
+        try {
+            pdfToPS(ERROR);
+        } catch (RuntimeException e) {
+            msg = e.getMessage();
+        }
+        Assert.assertEquals(msg, "Error while painting PDF page: " + ERROR);
+    }
+
+    @Test
+    public void testErrorMsgToPDF() throws IOException {
+        String msg = "";
+        PDFRenderingContext context = new PDFRenderingContext(null, null, null, null);
+        ImagePDF imagePDF = new ImagePDF(new ImageInfo(ERROR, null), null);
+        try {
+            new PDFBoxImageHandler().handleImage(context, imagePDF, null);
+        } catch (RuntimeException e) {
+            msg = e.getMessage();
+        }
+        Assert.assertEquals(msg, "Error on PDF page: " + ERROR);
+    }
 }
diff --git a/test/resources/error.pdf b/test/resources/error.pdf
new file mode 100644
index 0000000..30fe35c
--- /dev/null
+++ b/test/resources/error.pdf
Binary files differ