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

Reply via email to