You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2014/02/11 20:29:34 UTC
svn commit: r1567317 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java
Author: tilman
Date: Tue Feb 11 19:29:33 2014
New Revision: 1567317
URL: http://svn.apache.org/r1567317
Log:
PDFBOX-1909: Close open streams
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java?rev=1567317&r1=1567316&r2=1567317&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java Tue Feb 11 19:29:33 2014
@@ -44,14 +44,13 @@ import org.apache.pdfbox.pdmodel.graphic
/**
* An image class for CCITT Fax.
- *
+ *
* @author <a href="ben@benlitchfield.com">Ben Litchfield</a>
* @author paul king
- *
+ *
*/
public class PDCcitt extends PDXObjectImage
{
-
private static final List<String> FAX_FILTERS = new ArrayList<String>();
static
@@ -62,7 +61,7 @@ public class PDCcitt extends PDXObjectIm
/**
* Standard constructor.
- *
+ *
* @param ccitt The PDStream that already contains all ccitt information.
*/
public PDCcitt(PDStream ccitt)
@@ -73,12 +72,11 @@ public class PDCcitt extends PDXObjectIm
/**
* Construct from a tiff file.
- *
+ *
* @param doc The document to create the image as part of.
* @param raf The random access TIFF file which contains a suitable CCITT compressed image
* @throws IOException If there is an error reading the tiff data.
*/
-
public PDCcitt(PDDocument doc, RandomAccess raf) throws IOException
{
super(new PDStream(doc), "tiff");
@@ -103,7 +101,7 @@ public class PDCcitt extends PDXObjectIm
/**
* Returns an image of the CCITT Fax, or null if TIFFs are not supported. (Requires additional JAI Image filters )
- *
+ *
* {@inheritDoc}
*/
public BufferedImage getRGBImage() throws IOException
@@ -182,7 +180,9 @@ public class PDCcitt extends PDXObjectIm
WritableRaster raster = colorModel.createCompatibleWritableRaster(cols, rows);
DataBufferByte buffer = (DataBufferByte) raster.getDataBuffer();
bufferData = buffer.getData();
- IOUtils.populateBuffer(stream.getUnfilteredStream(), bufferData);
+ InputStream is = stream.getUnfilteredStream();
+ IOUtils.populateBuffer(is, bufferData);
+ IOUtils.closeQuietly(is);
BufferedImage image = new BufferedImage(colorModel, raster, false, null);
if (!blackIsOne)
{
@@ -221,7 +221,7 @@ public class PDCcitt extends PDXObjectIm
/**
* This writes a tiff to out.
- *
+ *
* {@inheritDoc}
*/
public void write2OutputStream(OutputStream out) throws IOException
@@ -229,11 +229,12 @@ public class PDCcitt extends PDXObjectIm
// We should use another format than TIFF to get rid of the TiffWrapper
InputStream data = new TiffWrapper(getPDStream().getPartiallyFilteredStream(FAX_FILTERS), getCOSStream());
IOUtils.copy(data, out);
+ IOUtils.closeQuietly(data);
}
/**
* Extract the ccitt stream from the tiff file.
- *
+ *
* @param raf - TIFF File
* @param os - Stream to write raw ccitt data two
* @param parms - COSDictionary which the encoding parameters are added to
@@ -296,102 +297,102 @@ public class PDCcitt extends PDXObjectIm
{
switch (type)
{
- case 1:
- {
- val = val >> 24;
- break; // byte value
+ 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 3:
+ }
+ switch (tag)
+ {
+ case 256:
{
- val = val >> 16;
- break; // short value
+ parms.setInt(COSName.COLUMNS, val);
+ break;
}
- case 4:
+ case 257:
{
- break; // long value
+ parms.setInt(COSName.ROWS, val);
+ break;
}
- default:
+ case 259:
{
- // do nothing
- }
+ if (val == 4)
+ {
+ k = -1;
+ }
+ if (val == 3)
+ {
+ k = 0;
+ }
+ break; // T6/T4 Compression
}
- }
- switch (tag)
- {
- case 256:
- {
- parms.setInt(COSName.COLUMNS, val);
- break;
- }
- case 257:
- {
- parms.setInt(COSName.ROWS, val);
- break;
- }
- case 259:
- {
- if (val == 4)
+ case 262:
{
- k = -1;
+ if (val == 1)
+ {
+ parms.setBoolean(COSName.BLACK_IS_1, true);
+ }
+ break;
}
- if (val == 3)
+ case 273:
{
- k = 0;
- }
- break; // T6/T4 Compression
- }
- case 262:
- {
- if (val == 1)
- {
- parms.setBoolean(COSName.BLACK_IS_1, true);
+ if (count == 1)
+ {
+ dataoffset = val;
+ }
+ break;
}
- break;
- }
- case 273:
- {
- if (count == 1)
+ case 279:
{
- dataoffset = val;
+ if (count == 1)
+ {
+ datalength = val;
+ }
+ break;
}
- break;
- }
- case 279:
- {
- if (count == 1)
+ case 292:
{
- datalength = val;
+ if (val == 1)
+ {
+ k = 50; // T4 2D - arbitary K value
+ }
+ break;
}
- break;
- }
- case 292:
- {
- if (val == 1)
+ case 324:
{
- k = 50; // T4 2D - arbitary K value
+ if (count == 1)
+ {
+ dataoffset = val;
+ }
+ break;
}
- break;
- }
- case 324:
- {
- if (count == 1)
+ case 325:
{
- dataoffset = val;
+ if (count == 1)
+ {
+ datalength = val;
+ }
+ break;
}
- break;
- }
- case 325:
- {
- if (count == 1)
+ default:
{
- datalength = val;
+ // do nothing
}
- break;
- }
- default:
- {
- // do nothing
- }
}
}
@@ -444,11 +445,10 @@ public class PDCcitt extends PDXObjectIm
/**
* Extends InputStream to wrap the data from the CCITT Fax with a suitable TIFF Header. For details see
* www.tiff.org, which contains useful information including pointers to the TIFF 6.0 Specification
- *
+ *
*/
private class TiffWrapper extends InputStream
{
-
private int currentOffset; // When reading, where in the tiffheader are we.
private byte[] tiffheader; // Byte array to store tiff header data
private InputStream datastream; // Original InputStream
@@ -478,8 +478,9 @@ public class PDCcitt extends PDXObjectIm
}
/**
- * For simple read, take a byte from the tiffheader array or pass through.
- *
+ * For simple read, take a byte from the tiffheader array or pass
+ * through.
+ *
* {@inheritDoc}
*/
public int read() throws IOException
@@ -494,7 +495,7 @@ public class PDCcitt extends PDXObjectIm
/**
* For read methods only return as many bytes as we have left in the header if we've exhausted the header, pass
* through to the InputStream of the raw CCITT data.
- *
+ *
* {@inheritDoc}
*/
public int read(byte[] data) throws IOException
@@ -516,9 +517,10 @@ public class PDCcitt extends PDXObjectIm
}
/**
- * For read methods only return as many bytes as we have left in the header if we've exhausted the header, pass
- * through to the InputStream of the raw CCITT data.
- *
+ * For read methods only return as many bytes as we have left in the
+ * header if we've exhausted the header, pass through to the InputStream
+ * of the raw CCITT data.
+ *
* {@inheritDoc}
*/
public int read(byte[] data, int off, int len) throws IOException
@@ -542,7 +544,7 @@ public class PDCcitt extends PDXObjectIm
/**
* When skipping if any header data not yet read, only allow to skip what we've in the buffer Otherwise just
* pass through.
- *
+ *
* {@inheritDoc}
*/
public long skip(long n) throws IOException
@@ -571,7 +573,7 @@ public class PDCcitt extends PDXObjectIm
final int numOfTags = 10; // The maximum tags we'll fill
final int maxAdditionalData = 24; // The maximum amount of additional data
- // outside the IFDs. (bytes)
+ // outside the IFDs. (bytes)
// The length of the header will be the length of the basic header (10)
// plus 12 bytes for each IFD, 4 bytes as a pointer to the next IFD (will be 0)
@@ -621,7 +623,7 @@ public class PDCcitt extends PDXObjectIm
COSDictionary dic = (COSDictionary) parmsArray.getObject(i);
if (dic != null
&& (dic.getDictionaryObject(COSName.COLUMNS) != null || dic
- .getDictionaryObject(COSName.ROWS) != null))
+ .getDictionaryObject(COSName.ROWS) != null))
{
decodeParms = dic;
}