You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ja...@apache.org on 2014/02/21 00:10:06 UTC
svn commit: r1570386 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java
Author: jahewson
Date: Thu Feb 20 23:10:06 2014
New Revision: 1570386
URL: http://svn.apache.org/r1570386
Log:
Fixed missing JBIG2 file in PDFBOX-1893
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java?rev=1570386&r1=1570385&r2=1570386&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java Thu Feb 20 23:10:06 2014
@@ -28,6 +28,7 @@ import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
+import javax.imageio.stream.ImageInputStream;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -59,6 +60,22 @@ public class JBIG2Filter implements Filt
public void decode(InputStream compressedData, OutputStream result, COSDictionary options,
int filterIndex) throws IOException
{
+ // find suitable image reader
+ Iterator readers = ImageIO.getImageReadersByFormatName("JBIG2");
+ ImageReader reader = null;
+ while(readers.hasNext()) {
+ reader = (ImageReader)readers.next();
+ if(reader.canReadRaster()) {
+ break;
+ }
+ }
+
+ if (reader == null)
+ {
+ throw new MissingImageReaderException("Cannot read JBIG2 image: " +
+ "jbig2-imageio is not installed");
+ }
+
COSInteger bits = (COSInteger) options.getDictionaryObject(COSName.BITS_PER_COMPONENT);
COSDictionary params = (COSDictionary) options.getDictionaryObject(COSName.DECODE_PARMS);
@@ -68,21 +85,28 @@ public class JBIG2Filter implements Filt
globals = (COSStream) params.getDictionaryObject(COSName.JBIG2_GLOBALS);
}
- BufferedImage image;
if (globals != null)
{
- image = ImageIO.read(new SequenceInputStream(globals.getFilteredStream(),
- compressedData));
+ ImageInputStream iis = ImageIO.createImageInputStream(
+ new SequenceInputStream(globals.getFilteredStream(),
+ compressedData));
+ reader.setInput(iis);
}
else
{
- image = ImageIO.read(compressedData);
+ ImageInputStream iis = ImageIO.createImageInputStream(compressedData);
+ reader.setInput(iis);
}
- if (image == null)
+ BufferedImage image;
+ try
{
- throw new MissingImageReaderException("Cannot read JBIG2 image: " +
- "jbig2-imageio is not installed");
+ image = reader.read(0);
+ }
+ catch (Exception e)
+ {
+ // wrap and rethrow any exceptions
+ throw new IOException("Could not read JBIG2 image", e);
}
// I am assuming since JBIG2 is always black and white