protected void SetColorSpace(Color color) { cspace = color; int type = ExtendedColor.GetType(color); PdfObject colorSpace = null; switch (type) { case ExtendedColor.TYPE_GRAY: { colorSpace = PdfName.DEVICEGRAY; break; } case ExtendedColor.TYPE_CMYK: { colorSpace = PdfName.DEVICECMYK; break; } case ExtendedColor.TYPE_SEPARATION: { SpotColor spot = (SpotColor)color; colorDetails = writer.AddSimple(spot.PdfSpotColor); colorSpace = colorDetails.IndirectReference; break; } case ExtendedColor.TYPE_PATTERN: case ExtendedColor.TYPE_SHADING: { ThrowColorSpaceError(); break; } default: colorSpace = PdfName.DEVICERGB; break; } shading.Put(PdfName.COLORSPACE, colorSpace); }
internal ColorDetails AddSimplePatternColorspace(Color color) { int type = ExtendedColor.GetType(color); if (type == ExtendedColor.TYPE_PATTERN || type == ExtendedColor.TYPE_SHADING) throw new Exception("An uncolored tile pattern can not have another pattern or shading as color."); switch (type) { case ExtendedColor.TYPE_RGB: if (patternColorspaceRGB == null) { patternColorspaceRGB = new ColorDetails(GetColorspaceName(), body.PdfIndirectReference, null); PdfArray array = new PdfArray(PdfName.PATTERN); array.Add(PdfName.DEVICERGB); AddToBody(array, patternColorspaceRGB.IndirectReference); } return patternColorspaceRGB; case ExtendedColor.TYPE_CMYK: if (patternColorspaceCMYK == null) { patternColorspaceCMYK = new ColorDetails(GetColorspaceName(), body.PdfIndirectReference, null); PdfArray array = new PdfArray(PdfName.PATTERN); array.Add(PdfName.DEVICECMYK); AddToBody(array, patternColorspaceCMYK.IndirectReference); } return patternColorspaceCMYK; case ExtendedColor.TYPE_GRAY: if (patternColorspaceGRAY == null) { patternColorspaceGRAY = new ColorDetails(GetColorspaceName(), body.PdfIndirectReference, null); PdfArray array = new PdfArray(PdfName.PATTERN); array.Add(PdfName.DEVICEGRAY); AddToBody(array, patternColorspaceGRAY.IndirectReference); } return patternColorspaceGRAY; case ExtendedColor.TYPE_SEPARATION: { ColorDetails details = AddSimple(((SpotColor)color).PdfSpotColor); ColorDetails patternDetails = (ColorDetails)documentSpotPatterns[details]; if (patternDetails == null) { patternDetails = new ColorDetails(GetColorspaceName(), body.PdfIndirectReference, null); PdfArray array = new PdfArray(PdfName.PATTERN); array.Add(details.IndirectReference); AddToBody(array, patternDetails.IndirectReference); documentSpotPatterns[details] = patternDetails; } return patternDetails; } default: throw new Exception("Invalid color type in PdfWriter.AddSimplePatternColorspace()."); } }
/** * Adds a <CODE>SpotColor</CODE> to the document but not to the page resources. * @param spc the <CODE>SpotColor</CODE> to add * @return an <CODE>Object[]</CODE> where position 0 is a <CODE>PdfName</CODE> * and position 1 is an <CODE>PdfIndirectReference</CODE> */ internal ColorDetails AddSimple(PdfSpotColor spc) { ColorDetails ret = (ColorDetails)documentColors[spc]; if (ret == null) { ret = new ColorDetails(GetColorspaceName(), body.PdfIndirectReference, spc); documentColors[spc] = ret; } return ret; }