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/10/03 15:42:53 UTC
svn commit: r1178412 - in
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox:
pdmodel/graphics/color/PDDeviceN.java
util/operator/SetNonStrokingDeviceN.java
util/operator/SetStrokingDeviceN.java
Author: lehmi
Date: Mon Oct 3 13:42:53 2011
New Revision: 1178412
URL: http://svn.apache.org/viewvc?rev=1178412&view=rev
Log:
PDFBOX-1128: don't set the alternate colorspace of a DeviceN colorspace as current colorspace, fixed the calculation of black in CMYK-colorspace as default replacement for a non supported type 4 tint transform function
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceN.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingDeviceN.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingDeviceN.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceN.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceN.java?rev=1178412&r1=1178411&r2=1178412&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceN.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceN.java Mon Oct 3 13:42:53 2011
@@ -27,7 +27,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSBase;
-import org.apache.pdfbox.cos.COSFloat;
+import org.apache.pdfbox.cos.COSInteger;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.cos.COSNull;
@@ -47,7 +47,15 @@ public class PDDeviceN extends PDColorSp
/**
* Log instance.
*/
- private static final Log log = LogFactory.getLog(PDDeviceN.class);
+ private static final Log LOG = LogFactory.getLog(PDDeviceN.class);
+
+ private static final int COLORANT_NAMES = 1;
+
+ private static final int ALTERNATE_CS = 2;
+
+ private static final int TINT_TRANSFORM = 3;
+
+ private static final int DEVICEN_ATTRIBUTES = 4;
/**
* The name of this color space.
@@ -115,12 +123,12 @@ public class PDDeviceN extends PDColorSp
}
catch (IOException ioexception)
{
- log.error(ioexception, ioexception);
+ LOG.error(ioexception, ioexception);
throw ioexception;
}
catch (Exception exception)
{
- log.error(exception, exception);
+ LOG.error(exception, exception);
throw new IOException("Failed to Create ColorSpace");
}
}
@@ -136,7 +144,7 @@ public class PDDeviceN extends PDColorSp
*/
public ColorModel createColorModel( int bpc ) throws IOException
{
- log.info("About to create ColorModel for " + getAlternateColorSpace().toString());
+ LOG.info("About to create ColorModel for " + getAlternateColorSpace().toString());
return getAlternateColorSpace().createColorModel(bpc);
}
@@ -147,7 +155,7 @@ public class PDDeviceN extends PDColorSp
*/
public List<COSBase> getColorantNames()
{
- COSArray names = (COSArray)array.getObject( 1 );
+ COSArray names = (COSArray)array.getObject( COLORANT_NAMES );
return COSArrayList.convertCOSNameCOSArrayToList( names );
}
@@ -159,7 +167,7 @@ public class PDDeviceN extends PDColorSp
public void setColorantNames( List<COSBase> names )
{
COSArray namesArray = COSArrayList.convertStringListToCOSNameCOSArray( names );
- array.set( 1, namesArray );
+ array.set( COLORANT_NAMES, namesArray );
}
/**
@@ -171,7 +179,7 @@ public class PDDeviceN extends PDColorSp
*/
public PDColorSpace getAlternateColorSpace() throws IOException
{
- COSBase alternate = array.getObject( 2 );
+ COSBase alternate = array.getObject( ALTERNATE_CS );
return PDColorSpaceFactory.createColorSpace( alternate );
}
@@ -187,7 +195,7 @@ public class PDDeviceN extends PDColorSp
{
space = cs.getCOSObject();
}
- array.set( 2, space );
+ array.set( ALTERNATE_CS, space );
}
/**
@@ -199,7 +207,7 @@ public class PDDeviceN extends PDColorSp
*/
public PDFunction getTintTransform() throws IOException
{
- return PDFunction.create( array.getObject( 3 ) );
+ return PDFunction.create( array.getObject( TINT_TRANSFORM ) );
}
/**
@@ -209,7 +217,7 @@ public class PDDeviceN extends PDColorSp
*/
public void setTintTransform( PDFunction tint )
{
- array.set( 3, tint );
+ array.set( TINT_TRANSFORM, tint );
}
/**
@@ -221,7 +229,7 @@ public class PDDeviceN extends PDColorSp
public PDDeviceNAttributes getAttributes()
{
PDDeviceNAttributes retval = null;
- if( array.size() <5)
+ if( array.size() <= DEVICEN_ATTRIBUTES )
{
retval = new PDDeviceNAttributes();
setAttributes( retval );
@@ -239,21 +247,22 @@ public class PDDeviceN extends PDColorSp
{
if( attributes == null )
{
- array.remove( 4 );
+ array.remove( DEVICEN_ATTRIBUTES );
}
else
{
//make sure array is large enough
- while( array.size() < 5 )
+ while( array.size() <= DEVICEN_ATTRIBUTES )
{
array.add( COSNull.NULL );
}
- array.set( 4, attributes.getCOSDictionary() );
+ array.set( DEVICEN_ATTRIBUTES, attributes.getCOSDictionary() );
}
}
/**
* Returns the components of the color in the alternate colorspace for the given tint value.
+ * @param tintValues a list containing the tint values
* @return COSArray with the color components
* @throws IOException If the tint function is not supported
*/
@@ -262,18 +271,21 @@ public class PDDeviceN extends PDColorSp
PDFunction tintTransform = getTintTransform();
if(tintTransform instanceof PDFunctionType4)
{
- log.warn("Unsupported tint transformation type: "+tintTransform.getClass().getName()
+ LOG.warn("Unsupported tint transformation type: "+tintTransform.getClass().getName()
+ " in "+getClass().getName()+".getColorValues()"
+ " using color black instead.");
int numberOfComponents = getAlternateColorSpace().getNumberOfComponents();
// To get black as color:
- // 0.0f is used for the single value(s) if the colorspace is gray or RGB based
- // 1.0f is used for the single value if the colorspace is CMYK based
- float colorValue = numberOfComponents == 4 ? 1.0f : 0.0f;
+ // 0 is used for the single value(s) if the colorspace is gray or RGB based
COSArray retval = new COSArray();
- for (int i=0;i<numberOfComponents;i++)
+ for ( int i=0; i < numberOfComponents; i++ )
+ {
+ retval.add(COSInteger.ZERO);
+ }
+ // 1 is used as forth value if the colorspace is CMYK based
+ if (numberOfComponents == PDDeviceCMYK.INSTANCE.getNumberOfComponents())
{
- retval.add(new COSFloat(colorValue));
+ retval.set(3, COSInteger.ONE);
}
return retval;
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingDeviceN.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingDeviceN.java?rev=1178412&r1=1178411&r2=1178412&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingDeviceN.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingDeviceN.java Mon Oct 3 13:42:53 2011
@@ -19,16 +19,10 @@ package org.apache.pdfbox.util.operator;
import java.io.IOException;
import java.util.List;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSBase;
-import org.apache.pdfbox.pdmodel.graphics.color.PDCalRGB;
import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace;
import org.apache.pdfbox.pdmodel.graphics.color.PDColorState;
-import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceCMYK;
-import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceGray;
-import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB;
-import org.apache.pdfbox.pdmodel.graphics.color.PDICCBased;
import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceN;
import org.apache.pdfbox.util.PDFOperator;
@@ -40,12 +34,6 @@ public class SetNonStrokingDeviceN exten
{
/**
- * Log instance.
- */
- private static final Log log =
- LogFactory.getLog(SetNonStrokingDeviceN.class);
-
- /**
* scn Set color space for non stroking operations.
* @param operator The operator that is being executed.
* @param arguments List
@@ -58,48 +46,10 @@ public class SetNonStrokingDeviceN exten
if (colorSpace != null)
{
- List<COSBase> argList = arguments;
- OperatorProcessor newOperator = null;
-
- if (colorSpace instanceof PDDeviceN) {
- PDDeviceN sep = (PDDeviceN) colorSpace;
- colorSpace = sep.getAlternateColorSpace();
- argList = sep.calculateColorValues(arguments).toList();
- }
-
- 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();
- }
-
- if (newOperator != null)
- {
- colorInstance.setColorSpace(colorSpace);
- newOperator.setContext(getContext());
- newOperator.process(operator, argList);
- }
- else
- {
- log.warn("Not supported colorspace "+colorSpace.getName()
- + " within operator "+operator.getOperation());
- }
+ PDDeviceN sep = (PDDeviceN) colorSpace;
+ colorSpace = sep.getAlternateColorSpace();
+ COSArray colorValues = sep.calculateColorValues(arguments);
+ colorInstance.setColorSpaceValue(colorValues.toFloatArray());
}
-
}
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingDeviceN.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingDeviceN.java?rev=1178412&r1=1178411&r2=1178412&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingDeviceN.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingDeviceN.java Mon Oct 3 13:42:53 2011
@@ -19,17 +19,11 @@ package org.apache.pdfbox.util.operator;
import java.io.IOException;
import java.util.List;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSBase;
-import org.apache.pdfbox.pdmodel.graphics.color.PDCalRGB;
import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace;
import org.apache.pdfbox.pdmodel.graphics.color.PDColorState;
-import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceCMYK;
-import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceGray;
import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceN;
-import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB;
-import org.apache.pdfbox.pdmodel.graphics.color.PDICCBased;
import org.apache.pdfbox.util.PDFOperator;
/**
@@ -40,12 +34,6 @@ public class SetStrokingDeviceN extends
{
/**
- * Log instance.
- */
- private static final Log log =
- LogFactory.getLog(SetStrokingDeviceN.class);
-
- /**
* scn Set color space for non stroking operations.
* @param operator The operator that is being executed.
* @param arguments List
@@ -53,53 +41,15 @@ public class SetStrokingDeviceN extends
*/
public void process(PDFOperator operator, List<COSBase> arguments) throws IOException
{
- PDColorState color = context.getGraphicsState().getStrokingColor();
- PDColorSpace colorSpace = color.getColorSpace();
+ PDColorState colorInstance = context.getGraphicsState().getStrokingColor();
+ PDColorSpace colorSpace = colorInstance.getColorSpace();
if (colorSpace != null)
{
- OperatorProcessor newOperator = null;
- List<COSBase> argList = arguments;
-
- if (colorSpace instanceof PDDeviceN)
- {
- PDDeviceN sep = (PDDeviceN) colorSpace;
- colorSpace = sep.getAlternateColorSpace();
- argList = sep.calculateColorValues(arguments).toList();
- }
-
- if (colorSpace instanceof PDDeviceGray)
- {
- newOperator = new SetStrokingGrayColor();
- }
- else if (colorSpace instanceof PDDeviceRGB)
- {
- newOperator = new SetStrokingRGBColor();
- }
- else if (colorSpace instanceof PDDeviceCMYK)
- {
- newOperator = new SetStrokingCMYKColor();
- }
- else if (colorSpace instanceof PDICCBased)
- {
- newOperator = new SetStrokingICCBasedColor();
- }
- else if (colorSpace instanceof PDCalRGB)
- {
- newOperator = new SetStrokingCalRGBColor();
- }
-
- if (newOperator != null)
- {
- color.setColorSpace(colorSpace);
- newOperator.setContext(getContext());
- newOperator.process(operator, argList);
- }
- else
- {
- log.warn("Not supported colorspace "+colorSpace.getName()
- + " within operator "+operator.getOperation());
- }
+ PDDeviceN sep = (PDDeviceN) colorSpace;
+ colorSpace = sep.getAlternateColorSpace();
+ COSArray colorValues = sep.calculateColorValues(arguments);
+ colorInstance.setColorSpaceValue(colorValues.toFloatArray());
}
}
}