You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2011/06/08 15:15:47 UTC
svn commit: r1133388 - in
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox:
filter/CCITTFaxDecodeFilter.java pdmodel/graphics/xobject/PDCcitt.java
Author: lehmi
Date: Wed Jun 8 13:15:47 2011
New Revision: 1133388
URL: http://svn.apache.org/viewvc?rev=1133388&view=rev
Log:
PDFBOX-1033: fixed calculation of the height if only one value is given
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxDecodeFilter.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxDecodeFilter.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxDecodeFilter.java?rev=1133388&r1=1133387&r2=1133388&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxDecodeFilter.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxDecodeFilter.java Wed Jun 8 13:15:47 2011
@@ -77,6 +77,11 @@ public class CCITTFaxDecodeFilter implem
// ensure that rows doesn't contain implausible data, see PDFBOX-771
rows = Math.min(rows, height);
}
+ else
+ {
+ // at least one of the values has to have a valid value
+ rows = Math.max(rows, height);
+ }
int k = decodeParms.getInt(COSName.K);
int arraySize = (cols + 7) / 8 * rows;
byte[] decompressed = new byte[arraySize];
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=1133388&r1=1133387&r2=1133388&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 Wed Jun 8 13:15:47 2011
@@ -107,29 +107,41 @@ public class PDCcitt extends PDXObjectIm
*/
public BufferedImage getRGBImage() throws IOException
{
- BufferedImage retval = null;
COSStream stream = getCOSStream();
COSBase decodeP = stream.getDictionaryObject(COSName.DECODE_PARMS);
COSDictionary decodeParms = null;
if (decodeP instanceof COSDictionary)
+ {
decodeParms = (COSDictionary)decodeP;
+ }
else if (decodeP instanceof COSArray)
+ {
decodeParms = (COSDictionary)((COSArray)decodeP).get(0);
+ }
int cols = decodeParms.getInt(COSName.COLUMNS, 1728);
int rows = decodeParms.getInt(COSName.ROWS, 0);
- int height = stream.getInt(COSName.HEIGHT);
+ int height = stream.getInt(COSName.HEIGHT, 0);
if (rows > 0 && height > 0)
{
// ensure that rows doesn't contain implausible data, see PDFBOX-771
rows = Math.min(rows, height);
}
+ else
+ {
+ // at least one of the values has to have a valid value
+ rows = Math.max(rows, height);
+ }
boolean blackIsOne = decodeParms.getBoolean(COSName.BLACK_IS_1, false);
byte[] map;
if (blackIsOne)
+ {
map = new byte[] {(byte)0x00, (byte)0xff};
+ }
else
+ {
map = new byte[] {(byte)0xff};
+ }
ColorModel cm = new IndexColorModel(1, map.length, map, map, map, Transparency.OPAQUE);
WritableRaster raster = cm.createCompatibleWritableRaster( cols, rows );
DataBufferByte buffer = (DataBufferByte)raster.getDataBuffer();
@@ -139,16 +151,14 @@ public class PDCcitt extends PDXObjectIm
int bytesRead;
byte[] data = new byte[16384];
InputStream unfilteredStream = stream.getUnfilteredStream();
- while ((bytesRead = unfilteredStream.read(data, 0, data.length)) != -1) {
+ while ((bytesRead = unfilteredStream.read(data, 0, data.length)) != -1)
+ {
baos.write(data, 0, bytesRead);
}
baos.flush();
- byte[] decompressed = baos.toByteArray();
- System.arraycopy( decompressed, 0,bufferData, 0,
- (decompressed.length<bufferData.length?decompressed.length: bufferData.length) );
- retval = new BufferedImage(cm, raster, false, null);
-
- return retval;
+ System.arraycopy( baos.toByteArray(), 0,bufferData, 0,
+ (baos.size() < bufferData.length ? baos.size() : bufferData.length) );
+ return new BufferedImage(cm, raster, false, null);
}
/**