Hi,
We use FOP 1.0 for converting documents to PDF. In certain cases when the
document contains an image that returns null from GraphicsUtil.getAlphaRaster,
this results in a NPE shown below:
2014-06-19 10:08:12,932 [http-nio-8080-exec-4] [1:admin:REGULAR] ERROR
org.apache.fop.area.AreaTreeModel - Error while rendering page 1
java.lang.NullPointerException: Parameter alpha must not be null
at org.apache.fop.pdf.AlphaRasterImage.<init>(AlphaRasterImage.java:53)
at org.apache.fop.pdf.AlphaRasterImage.<init>(AlphaRasterImage.java:67)
at
org.apache.fop.render.pdf.ImageRenderedAdapter.setup(ImageRenderedAdapter.java:125)
at org.apache.fop.pdf.PDFDocument.addImage(PDFDocument.java:828)
at
org.apache.fop.render.pdf.PDFImageHandlerRenderedImage.handleImage(PDFImageHandlerRenderedImage.java:80)
at
org.apache.fop.render.intermediate.AbstractIFPainter.drawImage(AbstractIFPainter.java:227)
at
org.apache.fop.render.intermediate.AbstractIFPainter.drawImage(AbstractIFPainter.java:183)
at
org.apache.fop.render.intermediate.AbstractIFPainter.drawImageUsingImageHandler(AbstractIFPainter.java:148)
at
org.apache.fop.render.intermediate.AbstractIFPainter.drawImageUsingURI(AbstractIFPainter.java:270)
at org.apache.fop.render.pdf.PDFPainter.drawImage(PDFPainter.java:146)
at org.apache.fop.render.intermediate.IFRenderer.drawImage(IFRenderer.java:1171)
at
org.apache.fop.render.intermediate.IFRenderer.renderImage(IFRenderer.java:1158)
at
org.apache.fop.render.AbstractRenderer.renderViewport(AbstractRenderer.java:741)
at
org.apache.fop.render.AbstractPathOrientedRenderer.renderViewport(AbstractPathOrientedRenderer.java:709)
at
org.apache.fop.render.intermediate.IFRenderer.renderViewport(IFRenderer.java:860)
at
org.apache.fop.render.AbstractRenderer.renderInlineArea(AbstractRenderer.java:634)
at
org.apache.fop.render.intermediate.IFRenderer.renderInlineArea(IFRenderer.java:912)
I have a possible fix patch for the org.apache.fop.pdf.AlphaRasterImage (line
~58) here:
/**
* Create a alpha channel image.
* Extracts the alpha channel from the RenderedImage and creates a new
bitmap image
* with the given data.
*
* @param k the key to be used to lookup the image
* @param image the image (must have an alpha channel)
*/
public AlphaRasterImage(String k, RenderedImage image) {
this(k, getAlphaRaster(image));
}
private static java.awt.image.Raster getAlphaRaster(RenderedImage image) {
java.awt.image.Raster raster = GraphicsUtil.getAlphaRaster(image);
if (raster == null && image.getColorModel() instanceof IndexColorModel)
{
int width = image.getWidth();
int height = image.getHeight();
WritableRaster writableRaster =
image.getColorModel().createCompatibleWritableRaster(width, height);
image.copyData(writableRaster);
return writableRaster;
}
return raster;
}
This fixes the NPE but results in a muted image in the resulting PDF file. I’d
like feedback on the possible fix as well as any ideas as to why the resulting
image is muted.
Thanks in advance!
-- Shane