Author: lehmi Date: Mon Apr 5 17:22:14 2010 New Revision: 930910 URL: http://svn.apache.org/viewvc?rev=930910&view=rev Log: PDFBOX-672: take the decode array of an XObjectImage into amount when calculating "BlackIs1" value of a tiff, some more COSName constants.
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.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/cos/COSName.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java?rev=930910&r1=930909&r2=930910&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java Mon Apr 5 17:22:14 2010 @@ -131,7 +131,12 @@ public final class COSName extends COSBa /** * A common COSName value. */ + public static final COSName BLACK_IS_1 = new COSName( "BlackIs1" ); + /** + * A common COSName value. + */ public static final COSName BLACK_POINT = new COSName( "BlackPoint" ); + /** * A common COSName value. */ @@ -205,6 +210,10 @@ public final class COSName extends COSBa */ public static final COSName COLORSPACE = new COSName( "ColorSpace" ); /** + * A common COSName value. + */ + public static final COSName COLUMNS = new COSName( "Columns" ); + /** * A common COSName value. */ public static final COSName CONTENTS = new COSName( "Contents" ); @@ -678,6 +687,10 @@ public final class COSName extends COSBa */ public static final COSName ROTATE = new COSName( "Rotate" ); /** + * A common COSName value. + */ + public static final COSName ROWS = new COSName( "Rows" ); + /** * A common COSName value. */ public static final COSName RUN_LENGTH_DECODE = new COSName( "RunLengthDecode" ); 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=930910&r1=930909&r2=930910&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 Mon Apr 5 17:22:14 2010 @@ -53,7 +53,7 @@ public class PDCcitt extends PDXObjectIm */ private static final Log log = LogFactory.getLog(PDCcitt.class); - private static final List FAX_FILTERS = new ArrayList(); + private static final List<String> FAX_FILTERS = new ArrayList<String>(); static { @@ -94,12 +94,12 @@ public class PDCcitt extends PDXObjectIm dic.setItem( COSName.FILTER, COSName.CCITTFAX_DECODE); dic.setItem( COSName.SUBTYPE, COSName.IMAGE); dic.setItem( COSName.TYPE, COSName.XOBJECT ); - dic.setItem( "DecodeParms", decodeParms); + dic.setItem( COSName.DECODE_PARMS, decodeParms); setBitsPerComponent( 1 ); setColorSpace( new PDDeviceGray() ); - setWidth( decodeParms.getInt("Columns") ); - setHeight( decodeParms.getInt("Rows") ); + setWidth( decodeParms.getInt(COSName.COLUMNS) ); + setHeight( decodeParms.getInt(COSName.ROWS) ); } @@ -238,12 +238,12 @@ public class PDCcitt extends PDXObjectIm { case 256: { - parms.setInt("Columns",val); + parms.setInt(COSName.COLUMNS,val); break; } case 257: { - parms.setInt("Rows",val); + parms.setInt(COSName.ROWS,val); break; } case 259: @@ -262,7 +262,7 @@ public class PDCcitt extends PDXObjectIm { if (val == 1) { - parms.setBoolean("BlackIs1", true); + parms.setBoolean(COSName.BLACK_IS_1, true); } break; } @@ -322,7 +322,7 @@ public class PDCcitt extends PDXObjectIm throw new IOException("First image in tiff is not a single tile/strip"); } - parms.setInt("K",k); + parms.setInt(COSName.K,k); raf.seek(dataoffset); @@ -513,7 +513,14 @@ public class PDCcitt extends PDXObjectIm short comptype = 3; // T4 compression long t4options = 0; // Will set if 1d or 2d T4 - COSBase dicOrArrayParms = options.getDictionaryObject("DecodeParms"); + COSArray decode = getDecode(); + // we have to invert the b/w-values, + // if the Decode array exists and consists of (1,0) + if (decode != null && decode.getInt(0) == 1) + { + blackis1 = 1; + } + COSBase dicOrArrayParms = options.getDictionaryObject(COSName.DECODE_PARMS); COSDictionary decodeParms = null; if( dicOrArrayParms instanceof COSDictionary ) { @@ -533,8 +540,8 @@ public class PDCcitt extends PDXObjectIm { COSDictionary dic = (COSDictionary)parmsArray.getObject( i ); if (dic != null && - ( dic.getDictionaryObject( "Columns" ) != null || - dic.getDictionaryObject( "Rows" ) != null)) + ( dic.getDictionaryObject(COSName.COLUMNS) != null || + dic.getDictionaryObject(COSName.ROWS) != null)) { decodeParms = dic; } @@ -544,13 +551,13 @@ public class PDCcitt extends PDXObjectIm if (decodeParms != null) { - cols = (short) decodeParms.getInt("Columns", cols); - rows = (short) decodeParms.getInt("Rows", rows); - if (decodeParms.getBoolean("BlackIs1", false)) + cols = (short) decodeParms.getInt(COSName.COLUMNS, cols); + rows = (short) decodeParms.getInt(COSName.ROWS, rows); + if (decodeParms.getBoolean(COSName.BLACK_IS_1, false)) { blackis1 = 1; } - int k = decodeParms.getInt("K"); // Mandatory parm + int k = decodeParms.getInt(COSName.K); // Mandatory parm if (k < 0) { //T6 @@ -568,7 +575,7 @@ public class PDCcitt extends PDXObjectIm // If we couldn't get the number of rows, use the main item from XObject if (rows == 0) { - rows = (short) options.getInt("Height", rows); + rows = (short) options.getInt(COSName.HEIGHT, rows); } // Now put the tags into the tiffheader @@ -580,7 +587,7 @@ public class PDCcitt extends PDXObjectIm addTag(259, comptype); // T6 addTag(262, blackis1); // Photometric Interpretation addTag(273, tiffheader.length); // Offset to start of image data - updated below - addTag(279, options.getInt("Length")); // Length of image data + addTag(279, options.getInt(COSName.LENGTH)); // Length of image data addTag(282, 300, 1); // X Resolution 300 (default unit Inches) This is arbitary addTag(283, 300, 1); // Y Resolution 300 (default unit Inches) This is arbitary if (comptype == 3)