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 2010/09/21 18:01:37 UTC

svn commit: r999475 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox: cos/COSName.java filter/FilterManager.java filter/JBIG2Filter.java pdmodel/graphics/xobject/PDXObjectImage.java

Author: lehmi
Date: Tue Sep 21 16:01:36 2010
New Revision: 999475

URL: http://svn.apache.org/viewvc?rev=999475&view=rev
Log:
PDFBOX-81: added a JBIG2 filter as suggested by Kenneth Berland

Added:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java   (with props)
Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/FilterManager.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDXObjectImage.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=999475&r1=999474&r2=999475&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 Tue Sep 21 16:01:36 2010
@@ -530,6 +530,10 @@ public final class COSName extends COSBa
     public static final COSName JAVA_SCRIPT = new COSName( "JavaScript" );
 
     /**
+     * A common COSName value.
+     */
+    public static final COSName JBIG2_DECODE = new COSName( "JBIG2Decode" );
+    /**
     * A common COSName value.
     */
     public static final COSName JPX_DECODE = new COSName( "JPXDecode" );

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/FilterManager.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/FilterManager.java?rev=999475&r1=999474&r2=999475&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/FilterManager.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/FilterManager.java Tue Sep 21 16:01:36 2010
@@ -48,7 +48,8 @@ public class FilterManager
         Filter runLengthFilter = new RunLengthDecodeFilter();
         Filter cryptFilter = new CryptFilter();
         Filter jpxFilter = new JPXFilter();
-
+        Filter jbig2Filter = new JBIG2Filter();
+        
         addFilter( COSName.FLATE_DECODE, flateFilter );
         addFilter( COSName.FLATE_DECODE_ABBREVIATION, flateFilter );
         addFilter( COSName.DCT_DECODE, dctFilter );
@@ -65,6 +66,7 @@ public class FilterManager
         addFilter( COSName.RUN_LENGTH_DECODE_ABBREVIATION, runLengthFilter );
         addFilter( COSName.CRYPT, cryptFilter );
         addFilter( COSName.JPX_DECODE, jpxFilter );
+        addFilter( COSName.JBIG2_DECODE, jbig2Filter );
         
     }
 

Added: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java?rev=999475&view=auto
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java (added)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java Tue Sep 21 16:01:36 2010
@@ -0,0 +1,60 @@
+package org.apache.pdfbox.filter;
+
+import java.awt.image.BufferedImage;
+import java.awt.image.DataBuffer;
+import java.awt.image.DataBufferByte;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import javax.imageio.ImageIO;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.pdfbox.cos.COSDictionary;
+
+/**
+ * Modeled on the JBIG2Decode filter.
+ *
+ * thanks to Timo Böhme <ti...@ontochem.com>
+ */
+
+public class JBIG2Filter implements Filter
+{
+
+    /** Log instance */
+    private static final Log log = LogFactory.getLog(JBIG2Filter.class);
+  
+    /**
+     * Decode JBIG2 data using Java ImageIO library.
+     * 
+     * {@inheritDoc}
+     * 
+     */
+    public void decode( InputStream compressedData, OutputStream result, COSDictionary options, int filterIndex ) 
+        throws IOException
+    {
+        BufferedImage bi = ImageIO.read( compressedData );
+        if ( bi != null )
+        {
+            DataBuffer dBuf = bi.getData().getDataBuffer();
+            if ( dBuf.getDataType() == DataBuffer.TYPE_BYTE )
+            {
+                result.write( ( ( DataBufferByte ) dBuf ).getData() );
+            }
+            else
+            {
+                log.error( "Image data buffer not of type byte but type " + dBuf.getDataType() );
+            }
+        }
+    }
+
+     /**
+     * {@inheritDoc}
+     */
+    public void encode( InputStream rawData, OutputStream result, COSDictionary options, int filterIndex ) 
+        throws IOException
+    {
+        System.err.println( "Warning: JBIG2.encode is not implemented yet, skipping this stream." );
+    }
+}

Propchange: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDXObjectImage.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDXObjectImage.java?rev=999475&r1=999474&r2=999475&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDXObjectImage.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDXObjectImage.java Tue Sep 21 16:01:36 2010
@@ -268,6 +268,14 @@ file.
                         log.info("About to return NULL from CCITT branch");
                     }
             }
+            else if( COSName.JBIG2_DECODE.equals( filter ) )
+            {
+                retval = new PDDeviceGray();
+                if (retval == null) 
+                {
+                    log.info("About to return NULL from JBIG2 branch");
+                }
+            }
             else if (getImageMask())
             {
                 //Stencil Mask branch.  Section 4.8.5 of the reference, page 350 in version 1.7.