Author: tilman Date: Thu Mar 13 16:37:31 2014 New Revision: 1577233 URL: http://svn.apache.org/r1577233 Log: PDFBOX-1983: fix CCITTFactory; some code formatting
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/CCITTFactory.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/CCITTFactory.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/CCITTFactory.java?rev=1577233&r1=1577232&r2=1577233&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/CCITTFactory.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/CCITTFactory.java Thu Mar 13 16:37:31 2014 @@ -16,8 +16,9 @@ */ package org.apache.pdfbox.pdmodel.graphics.image; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.io.InputStream; import java.io.OutputStream; import org.apache.pdfbox.cos.COSDictionary; @@ -40,18 +41,22 @@ public final class CCITTFactory /** * Creates a new CCITT Fax compressed Image XObject from a TIFF file. + * * @param document the document to create the image as part of. * @param reader the random access TIFF file which contains a suitable CCITT compressed image + * @return a new Image XObject * @throws IOException if there is an error reading the TIFF data. */ public static PDImageXObject createFromRandomAccess(PDDocument document, RandomAccess reader) throws IOException { - PDImageXObject pdImage = new PDImageXObject(document); - COSDictionary decodeParms = new COSDictionary(); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + extractFromTiff(reader, bos, decodeParms); + ByteArrayInputStream byteStream = new ByteArrayInputStream(bos.toByteArray()); + PDImageXObject pdImage = new PDImageXObject(new PDStream(document, byteStream, true), null); + COSDictionary dict = pdImage.getCOSStream(); - extractFromTiff(reader, pdImage.getCOSStream().createFilteredStream(), decodeParms); dict.setItem(COSName.FILTER, COSName.CCITTFAX_DECODE); dict.setItem(COSName.SUBTYPE, COSName.IMAGE); @@ -106,7 +111,6 @@ public final class CCITTFactory // Other point us to where to find the data stream // The only parm which might change as a result of other options is K, so // We'll deal with that as a special; - int k = -1000; // Default Non CCITT compression int dataoffset = 0; int datalength = 0; @@ -126,102 +130,102 @@ public final class CCITTFactory { switch (type) { - case 1: - { - val = val >> 24; - break; // byte value - } - case 3: - { - val = val >> 16; - break; // short value - } - case 4: - { - break; // long value - } - default: - { - // do nothing - } + case 1: + { + val = val >> 24; + break; // byte value + } + case 3: + { + val = val >> 16; + break; // short value + } + case 4: + { + break; // long value + } + default: + { + // do nothing + } } } switch (tag) { - case 256: - { - params.setInt(COSName.COLUMNS, val); - break; - } - case 257: - { - params.setInt(COSName.ROWS, val); - break; - } - case 259: - { - if (val == 4) + case 256: { - k = -1; + params.setInt(COSName.COLUMNS, val); + break; } - if (val == 3) + case 257: { - k = 0; + params.setInt(COSName.ROWS, val); + break; + } + case 259: + { + if (val == 4) + { + k = -1; + } + if (val == 3) + { + k = 0; + } + break; // T6/T4 Compression + } + case 262: + { + if (val == 1) + { + params.setBoolean(COSName.BLACK_IS_1, true); + } + break; + } + case 273: + { + if (count == 1) + { + dataoffset = val; + } + break; + } + case 279: + { + if (count == 1) + { + datalength = val; + } + break; + } + case 292: + { + if (val == 1) + { + k = 50; // T4 2D - arbitary K value + } + break; + } + case 324: + { + if (count == 1) + { + dataoffset = val; + } + break; + } + case 325: + { + if (count == 1) + { + datalength = val; + } + break; } - break; // T6/T4 Compression - } - case 262: - { - if (val == 1) - { - params.setBoolean(COSName.BLACK_IS_1, true); - } - break; - } - case 273: - { - if (count == 1) - { - dataoffset = val; - } - break; - } - case 279: - { - if (count == 1) - { - datalength = val; - } - break; - } - case 292: - { - if (val == 1) - { - k = 50; // T4 2D - arbitary K value - } - break; - } - case 324: - { - if (count == 1) - { - dataoffset = val; - } - break; - } - case 325: - { - if (count == 1) + default: { - datalength = val; + // do nothing } - break; - } - default: - { - // do nothing - } } } Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java?rev=1577233&r1=1577232&r2=1577233&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java Thu Mar 13 16:37:31 2014 @@ -17,7 +17,6 @@ package org.apache.pdfbox.pdmodel.graphics.image; import java.awt.image.BufferedImage; -import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.IOException; @@ -54,10 +53,12 @@ public final class JPEGFactory extends I /** * Creates a new JPEG Image XObject from an input stream containing JPEG data. + * * The input stream data will be preserved and embedded in the PDF file without modification. * @param document the document where the image will be created * @param stream a stream of JPEG data * @return a new Image XObject + * * @throws IOException if the input stream cannot be read */ public static PDImageXObject createFromStream(PDDocument document, InputStream stream) @@ -93,9 +94,11 @@ public final class JPEGFactory extends I // find suitable image reader Iterator readers = ImageIO.getImageReadersByFormatName("JPEG"); ImageReader reader = null; - while(readers.hasNext()) { - reader = (ImageReader)readers.next(); - if(reader.canReadRaster()) { + while (readers.hasNext()) + { + reader = (ImageReader) readers.next(); + if (reader.canReadRaster()) + { break; } }