Author: jahewson Date: Tue Sep 23 18:43:41 2014 New Revision: 1627113 URL: http://svn.apache.org/r1627113 Log: PDFBOX-2328: Give PDColor access to its underling PDColorSpace
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/prepress/PDBoxStyle.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDCalGray.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDCalRGB.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColor.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYK.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceGray.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceN.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceRGB.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDIndexed.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDLab.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDSeparation.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDOutlineItem.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/color/SetColor.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/prepress/PDBoxStyle.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/prepress/PDBoxStyle.java?rev=1627113&r1=1627112&r2=1627113&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/prepress/PDBoxStyle.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/prepress/PDBoxStyle.java Tue Sep 23 18:43:41 2014 @@ -23,6 +23,7 @@ import org.apache.pdfbox.cos.COSInteger; import org.apache.pdfbox.pdmodel.common.COSObjectable; import org.apache.pdfbox.pdmodel.graphics.PDLineDashPattern; import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB; /** * The Box Style specifies visual characteristics for displaying box areas. @@ -99,7 +100,7 @@ public class PDBoxStyle implements COSOb colorValues.add( COSInteger.ZERO ); dictionary.setItem( "C", colorValues ); } - PDColor color = new PDColor(colorValues.toFloatArray()); + PDColor color = new PDColor(colorValues.toFloatArray(), PDDeviceRGB.INSTANCE); return color; } Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDCalGray.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDCalGray.java?rev=1627113&r1=1627112&r2=1627113&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDCalGray.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDCalGray.java Tue Sep 23 18:43:41 2014 @@ -28,7 +28,7 @@ import org.apache.pdfbox.cos.COSName; */ public final class PDCalGray extends PDCalRGB { - private static final PDColor INITIAL_COLOR = new PDColor(new float[] { 0 }); + private final PDColor initialColor = new PDColor(new float[] { 0 }, this); /** * Create a new CalGray color space. @@ -72,7 +72,7 @@ public final class PDCalGray extends PDC @Override public PDColor getInitialColor() { - return INITIAL_COLOR; + return initialColor; } @Override Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDCalRGB.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDCalRGB.java?rev=1627113&r1=1627112&r2=1627113&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDCalRGB.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDCalRGB.java Tue Sep 23 18:43:41 2014 @@ -33,9 +33,8 @@ import org.apache.pdfbox.util.Matrix; */ public class PDCalRGB extends PDCIEBasedColorSpace { - private static final PDColor INITIAL_COLOR = new PDColor(new float[] { 0, 0, 0 }); - protected COSDictionary dictionary; + private final PDColor initialColor = new PDColor(new float[] { 0, 0, 0 }, this); /** * Creates a new CalRGB color space. @@ -79,7 +78,7 @@ public class PDCalRGB extends PDCIEBased @Override public PDColor getInitialColor() { - return INITIAL_COLOR; + return initialColor; } @Override Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColor.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColor.java?rev=1627113&r1=1627112&r2=1627113&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColor.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColor.java Tue Sep 23 18:43:41 2014 @@ -36,19 +36,21 @@ import java.util.Arrays; public final class PDColor { /** The color black in the DeviceGray color space. */ - public static PDColor DEVICE_GRAY_BLACK = new PDColor(new float[] { 0 }); + public static PDColor DEVICE_GRAY_BLACK = new PDColor(new float[] { 0 }, PDDeviceGray.INSTANCE); /** A pattern which leaves no marks on the page. */ public static PDColor EMPTY_PATTERN = new PDColor(new float[] { }, null); private final float[] components; private final String patternName; + private final PDColorSpace colorSpace; /** * Creates a PDColor containing the given color value. * @param array a COS array containing the color value + * @param colorSpace color space in which the color value is defined */ - public PDColor(COSArray array) + public PDColor(COSArray array, PDColorSpace colorSpace) { if (array.get(array.size() - 1) instanceof COSName) { @@ -72,37 +74,44 @@ public final class PDColor } patternName = null; } + this.colorSpace = colorSpace; } /** * Creates a PDColor containing the given color component values. * @param components array of color component values + * @param colorSpace color space in which the components are defined */ - public PDColor(float[] components) + public PDColor(float[] components, PDColorSpace colorSpace) { this.components = components.clone(); this.patternName = null; + this.colorSpace = colorSpace; } /** * Creates a PDColor containing the given pattern name. * @param patternName the name of a pattern in a pattern dictionary + * @param colorSpace color space in which the pattern is defined */ - public PDColor(String patternName) + public PDColor(String patternName, PDColorSpace colorSpace) { this.components = new float[0]; this.patternName = patternName; + this.colorSpace = colorSpace; } /** * Creates a PDColor containing the given color component values and pattern name. * @param components array of color component values * @param patternName the name of a pattern in a pattern dictionary + * @param colorSpace color space in which the pattern/components are defined */ - public PDColor(float[] components, String patternName) + public PDColor(float[] components, String patternName, PDColorSpace colorSpace) { this.components = components.clone(); this.patternName = patternName; + this.colorSpace = colorSpace; } /** @@ -134,12 +143,11 @@ public final class PDColor /** * Returns the packed RGB value for this color, if any. - * @param colorSpace color space * @return RGB - * @throws IOException - * @throws java.lang.IllegalStateException if this color value is a pattern. + * @throws IOException if the color conversion fails + * @throws IllegalStateException if this color value is a pattern. */ - public int toRGB(PDColorSpace colorSpace) throws IOException + public int toRGB() throws IOException { float[] floats = colorSpace.toRGB(components); int r = Math.round(floats[0] * 255); @@ -163,6 +171,14 @@ public final class PDColor return array; } + /** + * Returns the color space in which this color value is defined. + */ + public PDColorSpace getColorSpace() + { + return colorSpace; + } + @Override public String toString() { Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYK.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYK.java?rev=1627113&r1=1627112&r2=1627113&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYK.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYK.java Tue Sep 23 18:43:41 2014 @@ -50,7 +50,7 @@ public class PDDeviceCMYK extends PDDevi } } - private static final PDColor INITIAL_COLOR = new PDColor(new float[] { 0, 0, 0, 1 }); + private final PDColor initialColor = new PDColor(new float[] { 0, 0, 0, 1 }, this); private final ICC_ColorSpace awtColorSpace; protected PDDeviceCMYK() throws IOException @@ -112,7 +112,7 @@ public class PDDeviceCMYK extends PDDevi @Override public PDColor getInitialColor() { - return INITIAL_COLOR; + return initialColor; } @Override Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceGray.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceGray.java?rev=1627113&r1=1627112&r2=1627113&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceGray.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceGray.java Tue Sep 23 18:43:41 2014 @@ -32,7 +32,7 @@ public final class PDDeviceGray extends { /** The single instance of this class. */ public static final PDDeviceGray INSTANCE = new PDDeviceGray(); - private static final PDColor INITIAL_COLOR = new PDColor(new float[] { 0 }); + private static final PDColor INITIAL_COLOR = new PDColor(new float[] { 0 }, INSTANCE); private PDDeviceGray() { 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=1627113&r1=1627112&r2=1627113&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 Tue Sep 23 18:43:41 2014 @@ -100,7 +100,7 @@ public class PDDeviceN extends PDSpecial { initial[i] = 1; } - initialColor = new PDColor(initial); + initialColor = new PDColor(initial, this); } // initializes the color conversion cache Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceRGB.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceRGB.java?rev=1627113&r1=1627112&r2=1627113&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceRGB.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceRGB.java Tue Sep 23 18:43:41 2014 @@ -37,18 +37,18 @@ import java.io.IOException; */ public final class PDDeviceRGB extends PDDeviceColorSpace { - private static final ColorSpace COLOR_SPACE_RGB = ColorSpace.getInstance(ColorSpace.CS_sRGB); - private static final PDColor INITIAL_COLOR = new PDColor(new float[] { 0, 0, 0 }); - /** This is the single instance of this class. */ public static final PDDeviceRGB INSTANCE = new PDDeviceRGB(); + private final ColorSpace colorSpaceRGB = ColorSpace.getInstance(ColorSpace.CS_sRGB); + private final PDColor initialColor = new PDColor(new float[] { 0, 0, 0 }, this); + private PDDeviceRGB() { // there is a JVM bug which results in a CMMException which appears to be a race // condition caused by lazy initialization of the color transform, so we perform // an initial color conversion while we're still in a static context, see PDFBOX-2184 - COLOR_SPACE_RGB.toRGB(new float[] { 0, 0, 0 }); + colorSpaceRGB.toRGB(new float[]{0, 0, 0}); } @Override @@ -74,19 +74,19 @@ public final class PDDeviceRGB extends P @Override public PDColor getInitialColor() { - return INITIAL_COLOR; + return initialColor; } @Override public float[] toRGB(float[] value) { - return COLOR_SPACE_RGB.toRGB(value); + return colorSpaceRGB.toRGB(value); } @Override public BufferedImage toRGBImage(WritableRaster raster) throws IOException { - ColorModel colorModel = new ComponentColorModel(COLOR_SPACE_RGB, + ColorModel colorModel = new ComponentColorModel(colorSpaceRGB, false, false, Transparency.OPAQUE, raster.getDataBuffer().getDataType()); return new BufferedImage(colorModel, raster, false, null); Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java?rev=1627113&r1=1627112&r2=1627113&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java Tue Sep 23 18:43:41 2014 @@ -115,7 +115,7 @@ public final class PDICCBased extends PD { initial[c] = Math.max(0, getRangeForComponent(c).getMin()); } - initialColor = new PDColor(initial); + initialColor = new PDColor(initial, this); // create a color in order to trigger a ProfileDataException // or CMMException due to invalid profiles, see PDFBOX-1295 and PDFBOX-1740 Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDIndexed.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDIndexed.java?rev=1627113&r1=1627112&r2=1627113&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDIndexed.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDIndexed.java Tue Sep 23 18:43:41 2014 @@ -41,7 +41,7 @@ import org.apache.pdfbox.pdmodel.common. */ public final class PDIndexed extends PDSpecialColorSpace { - private static final PDColor INITIAL_COLOR = new PDColor(new float[] { 0 }); + private final PDColor initialColor = new PDColor(new float[] { 0 }, this); private COSArray array; private PDColorSpace baseColorSpace = null; @@ -98,7 +98,7 @@ public final class PDIndexed extends PDS @Override public PDColor getInitialColor() { - return INITIAL_COLOR; + return initialColor; } // Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDLab.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDLab.java?rev=1627113&r1=1627112&r2=1627113&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDLab.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDLab.java Tue Sep 23 18:43:41 2014 @@ -199,7 +199,8 @@ public final class PDLab extends PDCIEBa initialColor = new PDColor(new float[] { 0, Math.max(0, getARange().getMin()), - Math.max(0, getBRange().getMin()) }); + Math.max(0, getBRange().getMin()) }, + this); } return initialColor; } Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDSeparation.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDSeparation.java?rev=1627113&r1=1627112&r2=1627113&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDSeparation.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDSeparation.java Tue Sep 23 18:43:41 2014 @@ -41,7 +41,7 @@ import org.apache.pdfbox.pdmodel.common. */ public class PDSeparation extends PDSpecialColorSpace { - private static final PDColor INITIAL_COLOR = new PDColor(new float[] { 1 }); + private final PDColor initialColor = new PDColor(new float[] { 1 }, this); // array indexes private static final int COLORANT_NAMES = 1; @@ -94,7 +94,7 @@ public class PDSeparation extends PDSpec @Override public PDColor getInitialColor() { - return INITIAL_COLOR; + return initialColor; } @Override Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDOutlineItem.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDOutlineItem.java?rev=1627113&r1=1627112&r2=1627113&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDOutlineItem.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDOutlineItem.java Tue Sep 23 18:43:41 2014 @@ -30,6 +30,7 @@ import org.apache.pdfbox.pdmodel.PDDocum import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureElement; import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB; import org.apache.pdfbox.pdmodel.interactive.action.PDActionFactory; import org.apache.pdfbox.pdmodel.interactive.action.PDAction; import org.apache.pdfbox.pdmodel.interactive.action.PDActionGoTo; @@ -340,7 +341,7 @@ public class PDOutlineItem extends PDOut csValues.growToSize( 3, new COSFloat( 0 ) ); node.setItem( COSName.C, csValues ); } - retval = new PDColor(csValues.toFloatArray()); + retval = new PDColor(csValues.toFloatArray(), PDDeviceRGB.INSTANCE); return retval; } Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java?rev=1627113&r1=1627112&r2=1627113&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java Tue Sep 23 18:43:41 2014 @@ -645,12 +645,6 @@ public class PageDrawer extends PDFGraph { graphics.setComposite(getGraphicsState().getStrokingJavaComposite()); Paint strokingPaint = getStrokingPaint(); - if (strokingPaint == null) - { - LOG.info("ColorSpace " + getGraphicsState().getStrokingColorSpace().getName() + - " doesn't provide a stroking color, using white instead!"); - strokingPaint = Color.WHITE;// ((PageDrawer)context).strokePath(); - } graphics.setPaint(strokingPaint); graphics.setStroke(getStroke()); setClip(); @@ -663,12 +657,6 @@ public class PageDrawer extends PDFGraph { graphics.setComposite(getGraphicsState().getNonStrokingJavaComposite()); Paint nonStrokingPaint = getNonStrokingPaint(); - if (nonStrokingPaint == null) - { - LOG.info("ColorSpace " + getGraphicsState().getNonStrokingColorSpace().getName() + - " doesn't provide a non-stroking color, using white instead!"); - nonStrokingPaint = Color.WHITE; - } graphics.setPaint(nonStrokingPaint); setClip(); linePath.setWindingRule(windingRule); Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/color/SetColor.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/color/SetColor.java?rev=1627113&r1=1627112&r2=1627113&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/color/SetColor.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/color/SetColor.java Tue Sep 23 18:43:41 2014 @@ -38,7 +38,7 @@ public abstract class SetColor extends O { COSArray array = new COSArray(); array.addAll(arguments); - setColor(new PDColor(array)); + setColor(new PDColor(array, getColorSpace())); } /**