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 2022/02/14 14:54:33 UTC
svn commit: r1898074 - in /xmlgraphics/fop/trunk: fop-core/src/main/java/org/apache/fop/render/intermediate/ fop-core/src/main/java/org/apache/fop/render/ps/ fop-core/src/test/java/org/apache/fop/render/afp/ fop-core/src/test/java/org/apache/fop/render...
Author: ssteiner
Date: Mon Feb 14 14:54:33 2022
New Revision: 1898074
URL: http://svn.apache.org/viewvc?rev=1898074&view=rev
Log:
FOP-3055: Use a event for a draw image error
Modified:
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/intermediate/AbstractIFPainter.java
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSGraphics2DAdapter.java
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSImageHandlerGraphics2D.java
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/ResourceHandler.java
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/afp/AFPPainterTestCase.java
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/pdf/PDFPainterTestCase.java
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/ps/PSPainterTestCase.java
xmlgraphics/fop/trunk/fop/lib/xmlgraphics-commons-svn-trunk.jar
Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/intermediate/AbstractIFPainter.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/intermediate/AbstractIFPainter.java?rev=1898074&r1=1898073&r2=1898074&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/intermediate/AbstractIFPainter.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/intermediate/AbstractIFPainter.java Mon Feb 14 14:54:33 2022
@@ -51,6 +51,7 @@ import org.apache.fop.fonts.FontInfo;
import org.apache.fop.fonts.FontTriplet;
import org.apache.fop.fonts.MultiByteFont;
import org.apache.fop.fonts.truetype.SVGGlyphData;
+import org.apache.fop.pdf.PDFConformanceException;
import org.apache.fop.render.ImageHandler;
import org.apache.fop.render.ImageHandlerRegistry;
import org.apache.fop.render.ImageHandlerUtil;
@@ -171,10 +172,12 @@ public abstract class AbstractIFPainter<
try {
drawImage(img, rect, context);
- } catch (IOException ioe) {
+ } catch (PDFConformanceException e) {
+ throw e;
+ } catch (Exception e) {
ResourceEventProducer eventProducer = ResourceEventProducer.Provider.get(
getUserAgent().getEventBroadcaster());
- eventProducer.imageWritingError(this, ioe);
+ eventProducer.imageWritingError(this, e);
}
}
Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSGraphics2DAdapter.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSGraphics2DAdapter.java?rev=1898074&r1=1898073&r2=1898074&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSGraphics2DAdapter.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSGraphics2DAdapter.java Mon Feb 14 14:54:33 2022
@@ -106,25 +106,27 @@ public class PSGraphics2DAdapter extends
// scale to viewbox
transform.translate(fx, fy);
gen.getCurrentState().concatMatrix(transform);
- if (paintAsBitmap) {
- //Fallback solution: Paint to a BufferedImage
- int resolution = Math.round(context.getUserAgent().getTargetResolution());
- RendererContextWrapper ctx = RendererContext.wrapRendererContext(context);
- BufferedImage bi = paintToBufferedImage(painter, ctx, resolution, false, false);
+ try {
+ if (paintAsBitmap) {
+ //Fallback solution: Paint to a BufferedImage
+ int resolution = Math.round(context.getUserAgent().getTargetResolution());
+ RendererContextWrapper ctx = RendererContext.wrapRendererContext(context);
+ BufferedImage bi = paintToBufferedImage(painter, ctx, resolution, false, false);
- float scale = PDFFactory.DEFAULT_PDF_RESOLUTION
- / context.getUserAgent().getTargetResolution();
- graphics.drawImage(bi, new AffineTransform(scale, 0, 0, scale, 0, 0), null);
- } else {
- if (painter instanceof GeneralGraphics2DImagePainter) {
- PSFontUtils.addFallbackFonts(fontInfo, (GeneralGraphics2DImagePainter) painter);
+ float scale = PDFFactory.DEFAULT_PDF_RESOLUTION
+ / context.getUserAgent().getTargetResolution();
+ graphics.drawImage(bi, new AffineTransform(scale, 0, 0, scale, 0, 0), null);
+ } else {
+ if (painter instanceof GeneralGraphics2DImagePainter) {
+ PSFontUtils.addFallbackFonts(fontInfo, (GeneralGraphics2DImagePainter) painter);
+ }
+ Rectangle2D area = new Rectangle2D.Double(0.0, 0.0, imw, imh);
+ painter.paint(graphics, area);
}
- Rectangle2D area = new Rectangle2D.Double(0.0, 0.0, imw, imh);
- painter.paint(graphics, area);
+ } finally {
+ gen.restoreGraphicsState();
+ gen.commentln("%FOPEndGraphics2D");
}
-
- gen.restoreGraphicsState();
- gen.commentln("%FOPEndGraphics2D");
}
}
Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSImageHandlerGraphics2D.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSImageHandlerGraphics2D.java?rev=1898074&r1=1898073&r2=1898074&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSImageHandlerGraphics2D.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSImageHandlerGraphics2D.java Mon Feb 14 14:54:33 2022
@@ -98,9 +98,12 @@ public class PSImageHandlerGraphics2D im
if (painter instanceof GeneralGraphics2DImagePainter) {
PSFontUtils.addFallbackFonts(psContext.getFontInfo(), (GeneralGraphics2DImagePainter) painter);
}
- painter.paint(graphics, area);
- gen.restoreGraphicsState();
- gen.commentln("%FOPEndGraphics2D");
+ try {
+ painter.paint(graphics, area);
+ } finally {
+ gen.restoreGraphicsState();
+ gen.commentln("%FOPEndGraphics2D");
+ }
}
/** {@inheritDoc} */
@@ -161,9 +164,12 @@ public class PSImageHandlerGraphics2D im
gen.writeln(" /Filter /SubFileDecode");
gen.writeln(" /DecodeParms << /EODCount 0 /EODString (%FOPEndOfData) >>");
gen.writeln(">> /ReusableStreamDecode filter");
- paintImageG2D(imageG2D, dimensionsMpt, gen, fontInfo);
- gen.writeln("%FOPEndOfData");
- gen.writeln("def");
+ try {
+ paintImageG2D(imageG2D, dimensionsMpt, gen, fontInfo);
+ } finally {
+ gen.writeln("%FOPEndOfData");
+ gen.writeln("def");
+ }
}
@Override
Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/ResourceHandler.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/ResourceHandler.java?rev=1898074&r1=1898073&r2=1898074&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/ResourceHandler.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/ResourceHandler.java Mon Feb 14 14:54:33 2022
@@ -327,6 +327,10 @@ public class ResourceHandler implements
userAgent.getEventBroadcaster());
eventProducer.imageError(resTracker, (info != null ? info.toString() : uri),
ie, null);
+ } catch (Exception e) {
+ ResourceEventProducer eventProducer = ResourceEventProducer.Provider.get(
+ userAgent.getEventBroadcaster());
+ eventProducer.imageWritingError(this, e);
}
}
Modified: xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/afp/AFPPainterTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/afp/AFPPainterTestCase.java?rev=1898074&r1=1898073&r2=1898074&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/afp/AFPPainterTestCase.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/afp/AFPPainterTestCase.java Mon Feb 14 14:54:33 2022
@@ -46,7 +46,9 @@ import static org.mockito.Mockito.verify
import static org.mockito.Mockito.when;
import org.apache.xmlgraphics.image.loader.Image;
+import org.apache.xmlgraphics.image.loader.ImageException;
import org.apache.xmlgraphics.image.loader.ImageFlavor;
+import org.apache.xmlgraphics.image.loader.ImageInfo;
import org.apache.xmlgraphics.image.loader.ImageManager;
import org.apache.xmlgraphics.image.loader.impl.DefaultImageContext;
import org.apache.xmlgraphics.image.loader.impl.DefaultImageSessionContext;
@@ -62,7 +64,9 @@ import org.apache.fop.afp.fonts.OutlineF
import org.apache.fop.afp.fonts.RasterFont;
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.FopFactory;
+import org.apache.fop.events.Event;
import org.apache.fop.events.EventBroadcaster;
+import org.apache.fop.events.EventListener;
import org.apache.fop.fo.Constants;
import org.apache.fop.fo.expr.PropertyException;
import org.apache.fop.fonts.Font;
@@ -383,4 +387,38 @@ public class AFPPainterTestCase {
+ "END PAGE_GROUP PGP00001\n"
+ "END DOCUMENT DOC00001\n");
}
+
+ @Test
+ public void testEventOnImageParseException() throws Exception {
+ FOUserAgent ua = FopFactory.newInstance(new File(".").toURI()).newFOUserAgent();
+ AFPDocumentHandler dh = new AFPDocumentHandler(new IFContext(ua));
+ dh.setResult(new StreamResult(new ByteArrayOutputStream()));
+ dh.startDocument();
+ dh.startPage(0, "", "", new Dimension());
+ MyAFPPainter afpPainter = new MyAFPPainter(dh);
+ ImageInfo info = new ImageInfo("test/resources/fop/image/logo.jpg", "image/jpeg") {
+ public Image getOriginalImage() {
+ throw new RuntimeException();
+ }
+ };
+ final Event[] event = new Event[1];
+ ua.getEventBroadcaster().addEventListener(new EventListener() {
+ public void processEvent(Event e) {
+ event[0] = e;
+ }
+ });
+ afpPainter.drawImageUsingImageHandler(info, new Rectangle());
+ Assert.assertEquals(event[0].getEventKey(), "imageWritingError");
+ }
+
+ static class MyAFPPainter extends AFPPainter {
+ MyAFPPainter(AFPDocumentHandler documentHandler) {
+ super(documentHandler);
+ }
+
+ protected void drawImageUsingImageHandler(ImageInfo info, Rectangle rect)
+ throws ImageException, IOException {
+ super.drawImageUsingImageHandler(info, rect);
+ }
+ }
}
Modified: xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/pdf/PDFPainterTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/pdf/PDFPainterTestCase.java?rev=1898074&r1=1898073&r2=1898074&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/pdf/PDFPainterTestCase.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/pdf/PDFPainterTestCase.java Mon Feb 14 14:54:33 2022
@@ -45,8 +45,14 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import org.apache.xmlgraphics.image.loader.Image;
+import org.apache.xmlgraphics.image.loader.ImageException;
+import org.apache.xmlgraphics.image.loader.ImageInfo;
+
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.FopFactory;
+import org.apache.fop.events.Event;
+import org.apache.fop.events.EventListener;
import org.apache.fop.fo.Constants;
import org.apache.fop.fonts.FontInfo;
import org.apache.fop.fonts.FontTriplet;
@@ -139,9 +145,9 @@ public class PDFPainterTestCase {
assertEquals(pdfPainter.renderingContext.getHints().get("page-number"), 3);
}
- class MyPDFPainter extends PDFPainter {
- protected RenderingContext renderingContext;
- public MyPDFPainter(PDFDocumentHandler documentHandler, PDFLogicalStructureHandler logicalStructureHandler) {
+ static class MyPDFPainter extends PDFPainter {
+ RenderingContext renderingContext;
+ MyPDFPainter(PDFDocumentHandler documentHandler, PDFLogicalStructureHandler logicalStructureHandler) {
super(documentHandler, logicalStructureHandler);
}
@@ -149,6 +155,10 @@ public class PDFPainterTestCase {
renderingContext = super.createRenderingContext();
return renderingContext;
}
+
+ protected void drawImageUsingImageHandler(ImageInfo info, Rectangle rect) throws ImageException, IOException {
+ super.drawImageUsingImageHandler(info, rect);
+ }
}
@Test
@@ -394,4 +404,27 @@ public class PDFPainterTestCase {
pdfPainter.generator.getStream().output(bos);
return bos.toString();
}
+
+ @Test
+ public void testEventOnImageParseException() throws Exception {
+ FOUserAgent ua = FopFactory.newInstance(new File(".").toURI()).newFOUserAgent();
+ PDFDocumentHandler dh = new PDFDocumentHandler(new IFContext(ua));
+ dh.setResult(new StreamResult(new ByteArrayOutputStream()));
+ dh.startDocument();
+ dh.startPage(0, "", "", new Dimension());
+ MyPDFPainter pdfPainter = new MyPDFPainter(dh, null) {
+ protected void drawImage(Image image, Rectangle rect, RenderingContext context) {
+ throw new RuntimeException();
+ }
+ };
+ ImageInfo info = new ImageInfo("test/resources/fop/image/logo.jpg", "image/jpeg");
+ final Event[] event = new Event[1];
+ ua.getEventBroadcaster().addEventListener(new EventListener() {
+ public void processEvent(Event e) {
+ event[0] = e;
+ }
+ });
+ pdfPainter.drawImageUsingImageHandler(info, new Rectangle());
+ Assert.assertEquals(event[0].getEventKey(), "imageWritingError");
+ }
}
Modified: xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/ps/PSPainterTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/ps/PSPainterTestCase.java?rev=1898074&r1=1898073&r2=1898074&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/ps/PSPainterTestCase.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/ps/PSPainterTestCase.java Mon Feb 14 14:54:33 2022
@@ -45,11 +45,15 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import org.apache.xmlgraphics.image.loader.ImageInfo;
+import org.apache.xmlgraphics.image.loader.ImageSize;
import org.apache.xmlgraphics.ps.PSGenerator;
import org.apache.xmlgraphics.ps.dsc.ResourceTracker;
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.FopFactory;
+import org.apache.fop.events.Event;
+import org.apache.fop.events.EventListener;
import org.apache.fop.fo.Constants;
import org.apache.fop.fonts.EmbeddingMode;
import org.apache.fop.fonts.Font;
@@ -280,4 +284,26 @@ public class PSPainterTestCase {
Assert.assertTrue(bos.toString().contains("[0.00012 0 0 0.00012 0 0] CT"));
Assert.assertTrue(bos.toString().contains("1 0 0 RC"));
}
+
+ @Test
+ public void testEventOnImageParseException() throws Exception {
+ FOUserAgent ua = FopFactory.newInstance(new File(".").toURI()).newFOUserAgent();
+ PSDocumentHandler dh = new PSDocumentHandler(new IFContext(ua));
+ dh.setResult(new StreamResult(new ByteArrayOutputStream()));
+ PSPainter psPainter = new PSPainter(dh);
+ dh.startDocument();
+ ImageInfo info = new ImageInfo("test/resources/fop/image/logo.jpg", "image/jpeg") {
+ public ImageSize getSize() {
+ throw new RuntimeException();
+ }
+ };
+ final Event[] event = new Event[1];
+ ua.getEventBroadcaster().addEventListener(new EventListener() {
+ public void processEvent(Event e) {
+ event[0] = e;
+ }
+ });
+ psPainter.drawImageUsingImageHandler(info, new Rectangle());
+ Assert.assertEquals(event[0].getEventKey(), "imageWritingError");
+ }
}
Modified: xmlgraphics/fop/trunk/fop/lib/xmlgraphics-commons-svn-trunk.jar
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop/lib/xmlgraphics-commons-svn-trunk.jar?rev=1898074&r1=1898073&r2=1898074&view=diff
==============================================================================
Binary files - no diff available.
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org