[
https://issues.apache.org/jira/browse/PDFBOX-1799?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13869229#comment-13869229
]
adam brin commented on PDFBOX-1799:
-----------------------------------
[[email protected]] [~tilman] is probably right that your issue and mine
[PDFBOX-1841] are related. I'm going to try and deregister the
CLibJPEGImageWriter from the registr. Have you tried this, or is it something
that would work for you?
IIORegistry.getDefaultInstance().deregisterServiceProvider(CLibJPEGImageWriterSpi.class);
> NullPointerException when constructing a PDJPeg using a BufferedImage
> ---------------------------------------------------------------------
>
> Key: PDFBOX-1799
> URL: https://issues.apache.org/jira/browse/PDFBOX-1799
> Project: PDFBox
> Issue Type: Bug
> Components: Utilities
> Affects Versions: 1.8.3
> Environment: Windows 2008 R2 Standard
> Reporter: Puhong You
>
> In pdfbox 1.8.2 and 1.8.3, the constructor of PDJPeg class that takes a
> BufferedImage throws java.lang.NullPointerException:
> BufferedImage bi =
> ImageIO.read(this.getClass().getClassLoader().getResourceAsStream("images/icon.png"));
>
> PDJpeg icon = new PDJpeg(pdf, bi);
> The stack trace is:
> java.lang.NullPointerException
> at
> org.apache.pdfbox.util.ImageIOUtil.addResolution(ImageIOUtil.java:211)
> at
> org.apache.pdfbox.util.ImageIOUtil.createMetadata(ImageIOUtil.java:204)
> at org.apache.pdfbox.util.ImageIOUtil.writeImage(ImageIOUtil.java:158)
> at
> org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg.createImageStream(PDJpeg.java:171)
> at
> org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg.<init>(PDJpeg.java:133)
> The culprit is in this method in the ImageIOUtil:
> private static IIOMetadata createMetadata(RenderedImage image,
> ImageWriter imageWriter,
> ImageWriteParam writerParams, int resolution)
> {
> .....
> IIOMetadata meta = imageWriter.getDefaultImageMetadata( type,
> writerParams );
> return (addResolution(meta, resolution) ? meta : null);
> }
> One of the JPG image writer in our environment is
> com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageWriter, its
> implementation of getDefaultImageMetadata() returns null:
> public IIOMetadata getDefaultImageMetadata(ImageTypeSpecifier imageType,
> ImageWriteParam param) {
> return null;
> }
> this causes the NullPointerException at the first line of the addResolution()
> method:
> if (!meta.isReadOnly() && meta.isStandardMetadataFormatSupported())
> I suggest that null checks be added at the following places:
> 1. ImageIOUtil.addResolution():
> if (!meta.isReadOnly() && meta.isStandardMetadataFormatSupported())
> ==>
> if (meta != null && meta.isReadOnly() &&
> meta.isStandardMetadataFormatSupported())
> 2. ImageIOUtil.writeImage():
> IIOMetadata meta = createMetadata( image, imageWriter,
> writerParams, resolution);
> imageWriter.setOutput( output );
> imageWriter.write( null, new IIOImage( image, null, meta ),
> writerParams );
> foundWriter = true;
> ==>
> IIOMetadata meta = createMetadata( image, imageWriter,
> writerParams, resolution);
> if (meta != null) {
> imageWriter.setOutput( output );
> imageWriter.write( null, new IIOImage( image, null,
> meta ), writerParams );
> foundWriter = true;
> }
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)