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);
     }
     
     /**