You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by da...@apache.org on 2009/04/29 20:32:22 UTC
svn commit: r769865 [1/3] - in /incubator/pdfbox/trunk:
src/main/java/org/apache/pdfbox/pdmodel/graphics/color/
src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/
src/main/java/org/apache/pdfbox/util/operator/
src/main/java/org/apache/pdfbox/uti...
Author: danielwilson
Date: Wed Apr 29 18:32:20 2009
New Revision: 769865
URL: http://svn.apache.org/viewvc?rev=769865&view=rev
Log:
Implemented external object image bitmasks.
Incorporated sector9's createColorModel implementation for PDDeviceCMYK.
Improved logging / error-trapping.
Correct operator description in Invoke.java
Add test case that shows stencil mask in use.
Added:
incubator/pdfbox/trunk/test/input/rendering/HOTRODCMYK.ai
incubator/pdfbox/trunk/test/input/rendering/HOTRODCMYK.ai-1.png (with props)
Modified:
incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java
incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYK.java
incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java
incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDSeparation.java
incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java
incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDPixelMap.java
incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingSeparation.java
incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/Invoke.java
Modified: incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java
URL: http://svn.apache.org/viewvc/incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java?rev=769865&r1=769864&r2=769865&view=diff
==============================================================================
--- incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java (original)
+++ incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java Wed Apr 29 18:32:20 2009
@@ -18,6 +18,7 @@
import org.apache.pdfbox.cos.COSBase;
import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.pdmodel.common.COSObjectable;
@@ -36,6 +37,9 @@
*/
public abstract class PDColorSpace extends LoggingObject implements COSObjectable
{
+
+ protected COSArray array;
+
/**
* This will return the name of the color space.
*
@@ -81,4 +85,15 @@
* @throws IOException If there is an error creating the color model.
*/
public abstract ColorModel createColorModel( int bpc ) throws IOException;
+
+ /*
+ Don't just tell me its color type -- tell me its contents!
+ */
+ public String toString()
+ {
+
+ String RetVal = getName() + "{ " + (array==null? "" : array.toString() ) + " }";
+
+ return RetVal;
+ }
}
Modified: incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYK.java
URL: http://svn.apache.org/viewvc/incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYK.java?rev=769865&r1=769864&r2=769865&view=diff
==============================================================================
--- incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYK.java (original)
+++ incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYK.java Wed Apr 29 18:32:20 2009
@@ -21,6 +21,16 @@
import java.io.IOException;
+import java.awt.Transparency;
+import java.awt.image.ComponentColorModel;
+import java.awt.image.IndexColorModel;
+import java.awt.image.DataBuffer;
+
+import java.io.InputStream;
+
+import org.apache.pdfbox.util.ResourceLoader;
+
+
/**
* This class represents a CMYK color space.
*
@@ -98,7 +108,28 @@
*/
public ColorModel createColorModel( int bpc ) throws IOException
{
- logger().warning ("This looks like a test case for sector9's patch!!! We need one of these!!!");
- throw new IOException( "Not implemented" );
+
+ if (bpc >=8) {
+ //from Sector9 ... believed but not proven to be right.
+ int[] nbBits = { bpc, bpc, bpc, bpc };
+ ComponentColorModel componentColorModel =
+ new ComponentColorModel( createColorSpace(),
+ nbBits,
+ false,
+ false,
+ Transparency.OPAQUE,
+ DataBuffer.TYPE_BYTE );
+ return componentColorModel;
+ }else{
+ //Daniel Wilson's implementation with some guidance from Jeremias
+ if (bpc ==1){
+ byte[] map = new byte[] {(byte)0x00, (byte)0xff};
+ ColorModel cm = new IndexColorModel(1, 2, map, map, map, 1);
+
+ return cm;
+ }else{
+ throw new IOException("Unsure how to create a Color Model for " + bpc + " bits per component");
+ }
+ }
}
}
Modified: incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java
URL: http://svn.apache.org/viewvc/incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java?rev=769865&r1=769864&r2=769865&view=diff
==============================================================================
--- incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java (original)
+++ incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java Wed Apr 29 18:32:20 2009
@@ -56,7 +56,7 @@
*/
public static final String NAME = "ICCBased";
- private COSArray array;
+ //private COSArray array;
private PDStream stream;
/**
@@ -150,7 +150,7 @@
*/
public ColorModel createColorModel( int bpc ) throws IOException
{
- int[] nbBits = { bpc, bpc, bpc };
+ int[] nbBits = { bpc, bpc, bpc, bpc }; //added 4th bpc to handle CMYK
ComponentColorModel componentColorModel =
new ComponentColorModel( createColorSpace(),
nbBits,
@@ -326,4 +326,20 @@
{
stream.getStream().setItem( COSName.getPDFName( "Metadata" ), metadata );
}
+
+ /*
+ Need more info on the ICCBased ones ... Array contains very little.
+ */
+ public String toString()
+ {
+
+ String RetVal = super.toString() + "\n\t Number of Components: " ;
+ try{
+ RetVal = RetVal + getNumberOfComponents();
+ }catch (IOException IOe){
+ RetVal = RetVal + IOe.toString();
+ }
+
+ return RetVal;
+ }
}
Modified: incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDSeparation.java
URL: http://svn.apache.org/viewvc/incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDSeparation.java?rev=769865&r1=769864&r2=769865&view=diff
==============================================================================
--- incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDSeparation.java (original)
+++ incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDSeparation.java Wed Apr 29 18:32:20 2009
@@ -40,7 +40,6 @@
*/
public static final String NAME = "Separation";
- private COSArray array;
/**
* Constructor.
@@ -130,6 +129,7 @@
*/
public ColorModel createColorModel( int bpc ) throws IOException
{
+ logger().info("About to create ColorModel for " + getAlternateColorSpace().toString());
return getAlternateColorSpace().createColorModel(bpc);
}
@@ -209,16 +209,6 @@
}
- /*
- Don't just tell me it's a Separation -- tell me its contents!
- */
- public String toString()
- {
-
- String RetVal = NAME + "{ " + array.toString() + " }";
-
- return RetVal;
- }
/*
Some of the key values are stored within the COSDictionary, item 3 in the array.
Modified: incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java
URL: http://svn.apache.org/viewvc/incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java?rev=769865&r1=769864&r2=769865&view=diff
==============================================================================
--- incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java (original)
+++ incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java Wed Apr 29 18:32:20 2009
@@ -102,13 +102,20 @@
*/
public BufferedImage getRGBImage() throws IOException
{
+ BufferedImage retval = null;
+
InputStream tiff = new TiffWrapper(
getPDStream().getPartiallyFilteredStream( FAX_FILTERS ),
getCOSStream());
try {
- return ImageIO.read(tiff);
+ retval = ImageIO.read(tiff);
+ }catch (Exception e){
+ logger().severe(e.toString() + "\n at\n" + FullStackTrace(e));
} finally {
- tiff.close();
+ if (tiff != null)
+ tiff.close();
+
+ return retval;
}
}
Modified: incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDPixelMap.java
URL: http://svn.apache.org/viewvc/incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDPixelMap.java?rev=769865&r1=769864&r2=769865&view=diff
==============================================================================
--- incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDPixelMap.java (original)
+++ incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDPixelMap.java Wed Apr 29 18:32:20 2009
@@ -126,12 +126,15 @@
byte[] array = getPDStream().getByteArray();
+ //logger().info("array contains " + array.length + " bytes.\nUsing " + bpc + " bits per component.");
+
// Get the ColorModel right
PDColorSpace colorspace = getColorSpace();
if (colorspace == null){
logger().severe("getColorSpace() returned NULL. Predictor = " + getPredictor());
return null;
}
+
ColorModel cm = colorspace.createColorModel( bpc );
logger().info("ColorModel: " + cm.toString());
WritableRaster raster = cm.createCompatibleWritableRaster( width, height );
@@ -139,7 +142,7 @@
DataBufferByte buffer = (DataBufferByte)raster.getDataBuffer();
byte[] bufferData = buffer.getData();
- logger().info("bufferData contains " + bufferData.length + " bytes.");
+ //logger().info("bufferData contains " + bufferData.length + " bytes.");
/**
* PDF Spec 1.6 3.3.3 LZW and Flate predictor function
@@ -165,7 +168,7 @@
}
else
{
- System.arraycopy( array, 0,bufferData, 0, bufferData.length );
+ System.arraycopy( array, 0,bufferData, 0, (array.length<bufferData.length?array.length: bufferData.length) );
}
image = new BufferedImage(cm, raster, false, null);
Modified: incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingSeparation.java
URL: http://svn.apache.org/viewvc/incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingSeparation.java?rev=769865&r1=769864&r2=769865&view=diff
==============================================================================
--- incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingSeparation.java (original)
+++ incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingSeparation.java Wed Apr 29 18:32:20 2009
@@ -42,39 +42,42 @@
{
PDColorSpaceInstance colorInstance = context.getGraphicsState().getNonStrokingColorSpace();
PDColorSpace colorSpace = colorInstance.getColorSpace() ;//.getAlternateColorSpace();
- logger().info("handling color space " + colorSpace.toString());
- //logger().info("Arguments: " + arguments.toString());
+ List argList = arguments;
+
+ //logger().info("handling color space " + colorSpace.toString());
if (colorSpace instanceof PDSeparation){
PDSeparation sep = (PDSeparation) colorSpace;
colorSpace = sep.getAlternateColorSpace();
- logger().info("now handling alternate color space " + colorSpace.toString());
-
- if (colorSpace != null)
- {
- OperatorProcessor newOperator = null;
- if (colorSpace instanceof PDDeviceGray)
- newOperator = new SetNonStrokingGrayColor();
- else if (colorSpace instanceof PDDeviceRGB)
- newOperator = new SetNonStrokingRGBColor();
- else if (colorSpace instanceof PDDeviceCMYK)
- newOperator = new SetNonStrokingCMYKColor();
- else if (colorSpace instanceof PDICCBased)
- newOperator = new SetNonStrokingICCBasedColor();
- else if (colorSpace instanceof PDCalRGB)
- newOperator = new SetNonStrokingCalRGBColor();
- else if (colorSpace instanceof PDSeparation)
- newOperator = new SetNonStrokingSeparation();
+ argList = sep.getColorValues().toList();
+ //logger().info("now handling alternate color space " + colorSpace.toString());
+ }
+
+ if (colorSpace != null)
+ {
+ OperatorProcessor newOperator = null;
+ if (colorSpace instanceof PDDeviceGray)
+ newOperator = new SetNonStrokingGrayColor();
+ else if (colorSpace instanceof PDDeviceRGB)
+ newOperator = new SetNonStrokingRGBColor();
+ else if (colorSpace instanceof PDDeviceCMYK)
+ newOperator = new SetNonStrokingCMYKColor();
+ else if (colorSpace instanceof PDICCBased)
+ newOperator = new SetNonStrokingICCBasedColor();
+ else if (colorSpace instanceof PDCalRGB)
+ newOperator = new SetNonStrokingCalRGBColor();
+ else if (colorSpace instanceof PDSeparation)
+ newOperator = new SetNonStrokingSeparation();
- if (newOperator != null)
- {
- newOperator.setContext(getContext());
- newOperator.process(operator, sep.getColorValues().toList());
- }
- else
- logger().warning("Not supported colorspace "+colorSpace.getName() + " within operator "+operator.getOperation());
+ if (newOperator != null)
+ {
+ newOperator.setContext(getContext());
+ newOperator.process(operator, argList);
}
+ else
+ logger().warning("Not supported colorspace "+colorSpace.getName() + " within operator "+operator.getOperation());
+ }
- } else throw new IOException ("Invalid attempt to process colorspace " + colorSpace.toString() + " in SetNonStrokingSeparation");
+ //} else throw new IOException ("Invalid attempt to process colorspace " + colorSpace.toString() + " in SetNonStrokingSeparation");
}
}
Modified: incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/Invoke.java
URL: http://svn.apache.org/viewvc/incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/Invoke.java?rev=769865&r1=769864&r2=769865&view=diff
==============================================================================
--- incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/Invoke.java (original)
+++ incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/Invoke.java Wed Apr 29 18:32:20 2009
@@ -45,7 +45,7 @@
public class Invoke extends OperatorProcessor
{
/**
- * process : re : append rectangle to path.
+ * process : Do : Paint the specified XObject (section 4.7)
* @param operator The operator that is being executed.
* @param arguments List
* @throws IOException If there is an error invoking the sub object.