Author: lehmi Date: Tue Jan 31 18:49:38 2012 New Revision: 1238741 URL: http://svn.apache.org/viewvc?rev=1238741&view=rev Log: PDFBOX-1094: added support for pattern color spaces to be used in combination with fill, stroke or showText-operators
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpaceFactory.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDPatternResources.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDShadingPatternResources.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDTilingPatternResources.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingPaint.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingColorSpace.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingColorSpace.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java?rev=1238741&r1=1238740&r2=1238741&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java Tue Jan 31 18:49:38 2012 @@ -18,6 +18,7 @@ package org.apache.pdfbox.pdfviewer; import java.awt.BasicStroke; import java.awt.Color; +import java.awt.Composite; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; @@ -155,23 +156,33 @@ public class PageDrawer extends PDFStrea { try { - switch(this.getGraphicsState().getTextState().getRenderingMode()) + PDGraphicsState graphicsState = getGraphicsState(); + Composite composite; + Paint paint; + switch(graphicsState.getTextState().getRenderingMode()) { case PDTextState.RENDERING_MODE_FILL_TEXT: - graphics.setComposite( this.getGraphicsState().getNonStrokeJavaComposite() ); - graphics.setColor( this.getGraphicsState().getNonStrokingColor().getJavaColor() ); + composite = graphicsState.getNonStrokeJavaComposite(); + paint = graphicsState.getNonStrokingColor().getJavaColor(); + if (paint == null) + { + paint = graphicsState.getNonStrokingColor().getPaint(pageSize.height); + } break; case PDTextState.RENDERING_MODE_STROKE_TEXT: - graphics.setComposite( this.getGraphicsState().getStrokeJavaComposite() ); - graphics.setColor( this.getGraphicsState().getStrokingColor().getJavaColor() ); + composite = graphicsState.getStrokeJavaComposite(); + paint = graphicsState.getStrokingColor().getJavaColor(); + if (paint == null) + { + paint = graphicsState.getStrokingColor().getPaint(pageSize.height); + } break; case PDTextState.RENDERING_MODE_NEITHER_FILL_NOR_STROKE_TEXT: //basic support for text rendering mode "invisible" - Color nsc = this.getGraphicsState().getStrokingColor().getJavaColor(); + Color nsc = graphicsState.getStrokingColor().getJavaColor(); float[] components = {Color.black.getRed(),Color.black.getGreen(),Color.black.getBlue()}; - Color c = new Color(nsc.getColorSpace(),components,0f); - graphics.setComposite( this.getGraphicsState().getStrokeJavaComposite() ); - graphics.setColor(c); + paint = new Color(nsc.getColorSpace(),components,0f); + composite = graphicsState.getStrokeJavaComposite(); break; default: // TODO : need to implement.... @@ -181,10 +192,12 @@ public class PageDrawer extends PDFStrea + " Using RenderingMode " + PDTextState.RENDERING_MODE_FILL_TEXT + " instead"); - graphics.setComposite( this.getGraphicsState().getNonStrokeJavaComposite() ); - graphics.setColor( this.getGraphicsState().getNonStrokingColor().getJavaColor() ); + composite = graphicsState.getNonStrokeJavaComposite(); + paint = graphicsState.getNonStrokingColor().getJavaColor(); } - + graphics.setComposite(composite); + graphics.setPaint(paint); + PDFont font = text.getFont(); Matrix textPos = text.getTextPos().copy(); float x = textPos.getXPosition(); @@ -200,7 +213,7 @@ public class PageDrawer extends PDFStrea PDMatrix fontMatrix = font.getFontMatrix(); at.scale(fontMatrix.getValue(0, 0) * 1000f, fontMatrix.getValue(1, 1) * 1000f); //TODO setClip() is a massive performance hot spot. Investigate optimization possibilities - graphics.setClip(getGraphicsState().getCurrentClippingPath()); + graphics.setClip(graphicsState.getCurrentClippingPath()); // the fontSize is no longer needed as it is already part of the transformation // we should remove it from the parameter list in the long run font.drawString( text.getCharacter(), graphics, 1, at, x, y ); @@ -290,17 +303,18 @@ public class PageDrawer extends PDFStrea public void fillPath(int windingRule) throws IOException { graphics.setComposite(getGraphicsState().getNonStrokeJavaComposite()); - Color nonStrokingColor = getGraphicsState().getNonStrokingColor().getJavaColor(); - if ( nonStrokingColor != null ) + Paint nonStrokingPaint = getGraphicsState().getNonStrokingColor().getJavaColor(); + if ( nonStrokingPaint == null ) { - graphics.setColor( nonStrokingColor ); + nonStrokingPaint = getGraphicsState().getNonStrokingColor().getPaint(pageSize.height); } - else + if ( nonStrokingPaint == null ) { LOG.info("ColorSpace "+getGraphicsState().getNonStrokingColor().getColorSpace().getName() +" doesn't provide a non-stroking color, using white instead!"); - graphics.setColor( Color.WHITE ); + nonStrokingPaint = Color.WHITE; } + graphics.setPaint( nonStrokingPaint ); getLinePath().setWindingRule(windingRule); graphics.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF ); graphics.setClip(getGraphicsState().getCurrentClippingPath()); @@ -339,17 +353,18 @@ public class PageDrawer extends PDFStrea public void strokePath() throws IOException { graphics.setComposite(getGraphicsState().getStrokeJavaComposite()); - Color strokingColor = getGraphicsState().getStrokingColor().getJavaColor(); - if ( strokingColor != null ) + Paint strokingPaint = getGraphicsState().getStrokingColor().getJavaColor(); + if ( strokingPaint == null ) { - graphics.setColor( strokingColor ); + strokingPaint = getGraphicsState().getStrokingColor().getPaint(pageSize.height); } - else + if ( strokingPaint == null ) { LOG.info("ColorSpace "+getGraphicsState().getStrokingColor().getColorSpace().getName() +" doesn't provide a stroking color, using white instead!"); - graphics.setColor( Color.WHITE ); + strokingPaint = Color.WHITE; } + graphics.setPaint(strokingPaint); graphics.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF ); graphics.setClip(getGraphicsState().getCurrentClippingPath()); GeneralPath path = getLinePath(); @@ -460,7 +475,7 @@ public class PageDrawer extends PDFStrea LOG.debug("Function based shading not yet supported"); break; case 2: - paint = new AxialShadingPaint((PDShadingType2)shading, ctm, pageSize); + paint = new AxialShadingPaint((PDShadingType2)shading, ctm, pageSize.height); break; case 3: // TODO Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpaceFactory.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpaceFactory.java?rev=1238741&r1=1238740&r2=1238741&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpaceFactory.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpaceFactory.java Tue Jan 31 18:49:38 2012 @@ -27,6 +27,7 @@ import org.apache.pdfbox.cos.COSBase; import org.apache.pdfbox.cos.COSFloat; import org.apache.pdfbox.cos.COSName; import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.graphics.pattern.PDPatternResources; import org.apache.pdfbox.pdmodel.common.PDStream; import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; @@ -70,7 +71,25 @@ public final class PDColorSpaceFactory * * @throws IOException If the color space name is unknown. */ - public static PDColorSpace createColorSpace( COSBase colorSpace, Map<String, PDColorSpace> colorSpaces ) throws IOException + public static PDColorSpace createColorSpace( COSBase colorSpace, Map<String, PDColorSpace> colorSpaces ) + throws IOException + { + return createColorSpace( colorSpace, colorSpaces, null ); + } + + /** + * This will create the correct color space given the name. + * + * @param colorSpace The color space object. + * @param colorSpaces The ColorSpace dictionary from the current resources, if any. + * @param patterns The patterns dictionary from the current resources, if any + * @return The color space. + * + * @throws IOException If the color space name is unknown. + */ + public static PDColorSpace createColorSpace( COSBase colorSpace, Map<String, PDColorSpace> colorSpaces, + Map<String,PDPatternResources> patterns) + throws IOException { PDColorSpace retval = null; if( colorSpace instanceof COSName ) @@ -162,7 +181,8 @@ public final class PDColorSpaceFactory * * @throws IOException If the color space name is unknown. */ - public static PDColorSpace createColorSpace( String colorSpaceName, Map<String, PDColorSpace> colorSpaces ) throws IOException + public static PDColorSpace createColorSpace( String colorSpaceName, Map<String, PDColorSpace> colorSpaces ) + throws IOException { PDColorSpace cs = null; if( colorSpaceName.equals( PDDeviceCMYK.NAME ) || Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java?rev=1238741&r1=1238740&r2=1238741&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java Tue Jan 31 18:49:38 2012 @@ -17,6 +17,7 @@ package org.apache.pdfbox.pdmodel.graphics.color; import java.awt.Color; +import java.awt.Paint; import java.awt.color.ColorSpace; import java.awt.color.ICC_ColorSpace; import java.io.IOException; @@ -83,6 +84,7 @@ public class PDColorState implements Clo * @see #getJavaColor() */ private Color color = null; + private Paint paint = null; /** * Default constructor. @@ -122,6 +124,23 @@ public class PDColorState implements Clo } /** + * Returns the Java AWT paint based on the current pattern. + * + * @param pageHeight the height of the current page + * @return current Java AWT paint + * + * @throws IOException if the current color can not be created + */ + public Paint getPaint(int pageHeight) throws IOException + { + if (paint == null && pattern != null) + { + paint = pattern.getPaint(pageHeight); + } + return paint; + } + + /** * Create the current color from the colorspace and values. * @return The current awt color. * @throws IOException If there is an error creating the color. @@ -311,7 +330,7 @@ public class PDColorState implements Clo */ public void setPattern(PDPatternResources patternValue) { - this.pattern = patternValue; + pattern = patternValue; // Clear color cache color = null; } Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDPatternResources.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDPatternResources.java?rev=1238741&r1=1238740&r2=1238741&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDPatternResources.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDPatternResources.java Tue Jan 31 18:49:38 2012 @@ -17,6 +17,7 @@ package org.apache.pdfbox.pdmodel.graphics.pattern; +import java.awt.Paint; import java.io.IOException; import org.apache.pdfbox.cos.COSBase; @@ -181,4 +182,13 @@ public abstract class PDPatternResources return pattern; } + /** + * This will return the paint of the pattern. + * + * @param the height of the current page + * + * @return the paint of the pattern + */ + public abstract Paint getPaint(int pageHeight) throws IOException; + } Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDShadingPatternResources.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDShadingPatternResources.java?rev=1238741&r1=1238740&r2=1238741&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDShadingPatternResources.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDShadingPatternResources.java Tue Jan 31 18:49:38 2012 @@ -17,8 +17,12 @@ package org.apache.pdfbox.pdmodel.graphics.pattern; +import java.awt.Paint; import java.awt.geom.AffineTransform; +import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.pdfbox.cos.COSArray; import org.apache.pdfbox.cos.COSDictionary; import org.apache.pdfbox.cos.COSFloat; @@ -26,6 +30,9 @@ import org.apache.pdfbox.cos.COSName; import org.apache.pdfbox.cos.COSNumber; import org.apache.pdfbox.pdmodel.graphics.PDExtendedGraphicsState; import org.apache.pdfbox.pdmodel.graphics.pattern.PDPatternResources; +import org.apache.pdfbox.pdmodel.graphics.shading.AxialShadingPaint; +import org.apache.pdfbox.pdmodel.graphics.shading.PDShadingResources; +import org.apache.pdfbox.pdmodel.graphics.shading.PDShadingType2; import org.apache.pdfbox.util.Matrix; /** @@ -36,8 +43,14 @@ import org.apache.pdfbox.util.Matrix; public class PDShadingPatternResources extends PDPatternResources { private PDExtendedGraphicsState extendedGraphicsState; + private PDShadingResources shading; private COSArray matrix = null; - + + /** + * Log instance. + */ + private static final Log LOG = LogFactory.getLog(PDShadingPatternResources.class); + /** * Default constructor. */ @@ -142,4 +155,68 @@ public class PDShadingPatternResources e } } + /** + * This will get the shading resources for this pattern. + * + * @return The shading resourcesfor this pattern. + * + * @throws IOException if something went wrong + */ + public PDShadingResources getShading() throws IOException + { + if (shading == null) + { + COSDictionary dictionary = (COSDictionary)getCOSDictionary().getDictionaryObject( COSName.SHADING ); + if( dictionary != null ) + { + shading = PDShadingResources.create(dictionary); + } + } + return shading; + } + + /** + * This will set the shading resources for this pattern. + * + * @param shadingResources The new shading resources for this pattern. + */ + public void setShading( PDShadingResources shadingResources ) + { + shading = shadingResources; + if (shadingResources != null) + { + getCOSDictionary().setItem( COSName.SHADING, shadingResources ); + } + else + { + getCOSDictionary().removeItem(COSName.SHADING); + } + } + + /** + * {@inheritDoc} + */ + public Paint getPaint(int pageHeight) throws IOException + { + Paint paint = null; + PDShadingResources shadingResources = getShading(); + int shadingType = shadingResources != null ? shadingResources.getShadingType() : 0; + switch (shadingType) + { + case PDShadingResources.SHADING_TYPE2: + paint = new AxialShadingPaint((PDShadingType2)getShading(), null, pageHeight); + break; + case PDShadingResources.SHADING_TYPE1: + case PDShadingResources.SHADING_TYPE3: + case PDShadingResources.SHADING_TYPE4: + case PDShadingResources.SHADING_TYPE5: + case PDShadingResources.SHADING_TYPE6: + case PDShadingResources.SHADING_TYPE7: + LOG.debug( "Error: Unsupported shading type " + shadingType ); + break; + default: + throw new IOException( "Error: Unknown shading type " + shadingType ); + } + return paint; + } } Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDTilingPatternResources.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDTilingPatternResources.java?rev=1238741&r1=1238740&r2=1238741&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDTilingPatternResources.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDTilingPatternResources.java Tue Jan 31 18:49:38 2012 @@ -17,7 +17,9 @@ package org.apache.pdfbox.pdmodel.graphics.pattern; +import java.awt.Paint; import java.awt.geom.AffineTransform; +import java.io.IOException; import org.apache.pdfbox.cos.COSArray; import org.apache.pdfbox.cos.COSDictionary; @@ -271,4 +273,14 @@ public class PDTilingPatternResources ex getCOSDictionary().setItem(COSName.MATRIX, matrix); } + /** + * {@inheritDoc} + */ + @Override + public Paint getPaint(int pageHeight) throws IOException + { + // TODO Auto-generated method stub + return null; + } + } Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java?rev=1238741&r1=1238740&r2=1238741&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java Tue Jan 31 18:49:38 2012 @@ -16,8 +16,8 @@ */ package org.apache.pdfbox.pdmodel.graphics.shading; -import java.awt.Dimension; import java.awt.PaintContext; +import java.awt.color.ColorSpace; import java.awt.geom.AffineTransform; import java.awt.image.ColorModel; import java.awt.image.Raster; @@ -29,6 +29,8 @@ import org.apache.commons.logging.LogFac import org.apache.pdfbox.cos.COSArray; import org.apache.pdfbox.cos.COSBoolean; import org.apache.pdfbox.pdmodel.common.function.PDFunction; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB; import org.apache.pdfbox.util.Matrix; /** @@ -43,6 +45,7 @@ public class AxialShadingContext impleme private ColorModel colorModel; private PDFunction function; + private ColorSpace shadingColorSpace; private float[] coords; private float[] domain; @@ -58,19 +61,54 @@ public class AxialShadingContext impleme private static final Log LOG = LogFactory.getLog(AxialShadingContext.class); /** - * Constructor. + * Constructor creates an instance to be used for fill operations. * * @param shadingType2 the shading type to be used * @param colorModelValue the color model to be used * @param xform transformation for user to device space * @param ctm current transformation matrix - * @param pageSize size of the current page + * @param pageHeight height of the current page * */ public AxialShadingContext(PDShadingType2 shadingType2, ColorModel colorModelValue, - AffineTransform xform, Matrix ctm, Dimension pageSize) + AffineTransform xform, Matrix ctm, int pageHeight) { - int pageHeight = pageSize.height; + coords = shadingType2.getCoords().toFloatArray(); + if (ctm != null) + { + // the shading is used in combination with the sh-operator + float[] coordsTemp = new float[coords.length]; + // transform the coords from shading to user space + ctm.createAffineTransform().transform(coords, 0, coordsTemp, 0, 2); + // move the 0,0-reference + coordsTemp[1] = pageHeight - coordsTemp[1]; + coordsTemp[3] = pageHeight - coordsTemp[3]; + // transform the coords from user to device space + xform.transform(coordsTemp, 0, coords, 0, 2); + } + else + { + // the shading is used as pattern colorspace in combination + // with a fill-, stroke- or showText-operator + float translateY = (float)xform.getTranslateY(); + // move the 0,0-reference including the y-translation from user to device space + coords[1] = pageHeight + translateY - coords[1]; + coords[3] = pageHeight + translateY - coords[3]; + } + // colorSpace + try + { + PDColorSpace cs = shadingType2.getColorSpace(); + if (!(cs instanceof PDDeviceRGB)) + { + // we have to create an instance of the shading colorspace if it isn't RGB + shadingColorSpace = cs.getJavaColorSpace(); + } + } + catch (IOException exception) + { + LOG.error("error while creating colorSpace", exception); + } // colorModel if (colorModelValue != null) { @@ -97,17 +135,6 @@ public class AxialShadingContext impleme { LOG.error("error while creating a function", exception); } - - coords = shadingType2.getCoords().toFloatArray(); - float[] coordsTemp = new float[coords.length]; - // transform the coords from shading to user space - ctm.createAffineTransform().transform(coords, 0, coordsTemp, 0, 2); - // move the 0,0-reference - coordsTemp[1] = pageHeight - coordsTemp[1]; - coordsTemp[3] = pageHeight - coordsTemp[3]; - // transform the coords from user to device space - xform.transform(coordsTemp, 0, coords, 0, 2); - // domain values if (shadingType2.getDomain() != null) { @@ -137,8 +164,8 @@ public class AxialShadingContext impleme d1d0 = domain[1]-domain[0]; denom = Math.pow(x1x0,2) + Math.pow(y1y0, 2); // TODO take a possible Background value into account + } - /** * {@inheritDoc} */ @@ -209,6 +236,11 @@ public class AxialShadingContext impleme LOG.error("error while processing a function", exception); } int index = (j * w + i) * 3; + // convert color values from shading colorspace to RGB + if (shadingColorSpace != null) + { + values = shadingColorSpace.toRGB(values); + } data[index] = (int)(values[0]*255); data[index+1] = (int)(values[1]*255); data[index+2] = (int)(values[2]*255); Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingPaint.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingPaint.java?rev=1238741&r1=1238740&r2=1238741&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingPaint.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingPaint.java Tue Jan 31 18:49:38 2012 @@ -16,7 +16,6 @@ */ package org.apache.pdfbox.pdmodel.graphics.shading; -import java.awt.Dimension; import java.awt.Paint; import java.awt.PaintContext; import java.awt.Rectangle; @@ -39,7 +38,7 @@ public class AxialShadingPaint implement private PDShadingType2 shading; private Matrix currentTransformationMatrix; - private Dimension pageSize; + private int pageHeight; /** * Constructor. @@ -48,13 +47,12 @@ public class AxialShadingPaint implement * @param ctm current transformation matrix * @param pageSizeValue size of the current page */ - public AxialShadingPaint(PDShadingType2 shadingType2, Matrix ctm, Dimension pageSizeValue) + public AxialShadingPaint(PDShadingType2 shadingType2, Matrix ctm, int pageHeightValue) { shading = shadingType2; currentTransformationMatrix = ctm; - pageSize = pageSizeValue; + pageHeight = pageHeightValue; } - /** * {@inheritDoc} */ @@ -69,7 +67,7 @@ public class AxialShadingPaint implement public PaintContext createContext(ColorModel cm, Rectangle deviceBounds, Rectangle2D userBounds, AffineTransform xform, RenderingHints hints) { - return new AxialShadingContext(shading, cm, xform, currentTransformationMatrix, pageSize); + return new AxialShadingContext(shading, cm, xform, currentTransformationMatrix, pageHeight); } } Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingColorSpace.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingColorSpace.java?rev=1238741&r1=1238740&r2=1238741&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingColorSpace.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingColorSpace.java Tue Jan 31 18:49:38 2012 @@ -45,9 +45,10 @@ public class SetNonStrokingColorSpace ex */ public void process(PDFOperator operator, List<COSBase> arguments) throws IOException { -// (PDF 1.1) Set color space for stroking operations + // (PDF 1.1) Set color space for stroking operations COSName name = (COSName)arguments.get( 0 ); - PDColorSpace cs = PDColorSpaceFactory.createColorSpace( name, context.getColorSpaces() ); + PDColorSpace cs = PDColorSpaceFactory.createColorSpace( name, context.getColorSpaces(), + context.getResources().getPatterns() ); PDColorState colorInstance = context.getGraphicsState().getNonStrokingColor(); colorInstance.setColorSpace( cs ); int numComponents = cs.getNumberOfComponents(); Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingColorSpace.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingColorSpace.java?rev=1238741&r1=1238740&r2=1238741&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingColorSpace.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingColorSpace.java Tue Jan 31 18:49:38 2012 @@ -50,7 +50,8 @@ public class SetStrokingColorSpace exten { //(PDF 1.1) Set color space for stroking operations COSName name = (COSName)arguments.get( 0 ); - PDColorSpace cs = PDColorSpaceFactory.createColorSpace( name, context.getColorSpaces() ); + PDColorSpace cs = PDColorSpaceFactory.createColorSpace( name, context.getColorSpaces(), + context.getResources().getPatterns() ); PDColorState color = context.getGraphicsState().getStrokingColor(); color.setColorSpace( cs ); int numComponents = cs.getNumberOfComponents();