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