/// <summary> /// Draws content on a page using colors created from a separation colorspace. /// </summary> /// <param name="page">The page to draw to.</param> private static void DrawSeparationColorSpace(PDFPage page) { PDFRgbColor black = new PDFRgbColor(0, 0, 0); PDFBrush blackBrush = new PDFBrush(black); //PDF4NET v5: PDFFont font = new PDFFont(PDFFontFace.Helvetica, 16); PDFStandardFont font = new PDFStandardFont(PDFStandardFontFace.Helvetica, 16); //PDF4NET v5: page.Canvas.DrawText("Separation colorspace", font, null, blackBrush, 50, 50); page.Canvas.DrawString("Separation colorspace", font, blackBrush, 50, 50); //PDF4NET v5: PDFType2Function tintTransform = new PDFType2Function(); PDFExponentialFunction tintTransform = new PDFExponentialFunction(); tintTransform.C0 = new double[] { 0, 0, 0, 0 }; tintTransform.C1 = new double[] { 0, 0.53f, 1, 0 }; tintTransform.Exponent = 1; tintTransform.Domain = new double[] { 0, 1 }; tintTransform.Range = new double[] { 0, 1, 0, 1, 0, 1, 0, 1 }; PDFSeparationColorSpace separationCS = new PDFSeparationColorSpace(); separationCS.Colorant = "PANTONE Orange 021 C"; separationCS.TintTransform = tintTransform; PDFSeparationColor orange = new PDFSeparationColor(separationCS); orange.Tint = 0.9; //PDF4NET v5: tintTransform = new PDFType2Function(); tintTransform = new PDFExponentialFunction(); tintTransform.C0 = new double[] { 0, 0, 0, 0 }; tintTransform.C1 = new double[] { 0, 0.75f, 0.9f, 0 }; tintTransform.Exponent = 1; tintTransform.Domain = new double[] { 0, 1 }; tintTransform.Range = new double[] { 0, 1, 0, 1, 0, 1, 0, 1 }; separationCS = new PDFSeparationColorSpace(); separationCS.Colorant = "PANTONE Warm Red C"; separationCS.TintTransform = tintTransform; PDFSeparationColor warmRed = new PDFSeparationColor(separationCS); warmRed.Tint = 0.4; PDFBrush orangeBrush = new PDFBrush(orange); PDFPen warmRedPen = new PDFPen(warmRed, 5); page.Canvas.DrawRoundRectangle(warmRedPen, orangeBrush, 50, 100, 400, 150, 20, 20); }
private static void DrawShadings(PDFPage page, PDFFont titleFont, PDFFont sectionFont) { PDFBrush brush = new PDFBrush(); PDFPen blackPen = new PDFPen(PDFRgbColor.Black, 1); PDFRgbColor randomPenColor = new PDFRgbColor(); PDFPen randomPen = new PDFPen(randomPenColor, 1); PDFRgbColor randomBrushColor = new PDFRgbColor(); PDFBrush randomBrush = new PDFBrush(randomBrushColor); page.Canvas.DrawString("Shadings", titleFont, brush, 20, 50); page.Canvas.DrawString("Horizontal", sectionFont, brush, 25, 70); PDFAxialShading horizontalShading = new PDFAxialShading(); horizontalShading.StartColor = new PDFRgbColor(255, 0, 0); horizontalShading.EndColor = new PDFRgbColor(0, 0, 255); horizontalShading.StartPoint = new PDFPoint(25, 90); horizontalShading.EndPoint = new PDFPoint(175, 90); // Clip the shading to desired area. PDFPath hsArea = new PDFPath(); hsArea.AddRectangle(25, 90, 150, 150); page.Canvas.SaveGraphicsState(); page.Canvas.SetClip(hsArea); page.Canvas.DrawShading(horizontalShading); page.Canvas.RestoreGraphicsState(); page.Canvas.DrawString("Vertical", sectionFont, brush, 225, 70); PDFAxialShading verticalShading = new PDFAxialShading(); verticalShading.StartColor = new PDFRgbColor(255, 0, 0); verticalShading.EndColor = new PDFRgbColor(0, 0, 255); verticalShading.StartPoint = new PDFPoint(225, 90); verticalShading.EndPoint = new PDFPoint(225, 240); // Clip the shading to desired area. PDFPath vsArea = new PDFPath(); vsArea.AddRectangle(225, 90, 150, 150); page.Canvas.SaveGraphicsState(); page.Canvas.SetClip(vsArea); page.Canvas.DrawShading(verticalShading); page.Canvas.RestoreGraphicsState(); page.Canvas.DrawString("Diagonal", sectionFont, brush, 425, 70); PDFAxialShading diagonalShading = new PDFAxialShading(); diagonalShading.StartColor = new PDFRgbColor(255, 0, 0); diagonalShading.EndColor = new PDFRgbColor(0, 0, 255); diagonalShading.StartPoint = new PDFPoint(425, 90); diagonalShading.EndPoint = new PDFPoint(575, 240); // Clip the shading to desired area. PDFPath dsArea = new PDFPath(); dsArea.AddRectangle(425, 90, 150, 150); page.Canvas.SaveGraphicsState(); page.Canvas.SetClip(dsArea); page.Canvas.DrawShading(diagonalShading); page.Canvas.RestoreGraphicsState(); page.Canvas.DrawString("Extended shading", sectionFont, brush, 25, 260); PDFAxialShading extendedShading = new PDFAxialShading(); extendedShading.StartColor = new PDFRgbColor(255, 0, 0); extendedShading.EndColor = new PDFRgbColor(0, 0, 255); extendedShading.StartPoint = new PDFPoint(225, 280); extendedShading.EndPoint = new PDFPoint(375, 280); extendedShading.ExtendStart = true; extendedShading.ExtendEnd = true; // Clip the shading to desired area. PDFPath esArea = new PDFPath(); esArea.AddRectangle(25, 280, 550, 30); page.Canvas.SaveGraphicsState(); page.Canvas.SetClip(esArea); page.Canvas.DrawShading(extendedShading); page.Canvas.RestoreGraphicsState(); page.Canvas.DrawPath(blackPen, esArea); page.Canvas.DrawString("Limited shading", sectionFont, brush, 25, 330); PDFAxialShading limitedShading = new PDFAxialShading(); limitedShading.StartColor = new PDFRgbColor(255, 0, 0); limitedShading.EndColor = new PDFRgbColor(0, 0, 255); limitedShading.StartPoint = new PDFPoint(225, 350); limitedShading.EndPoint = new PDFPoint(375, 350); limitedShading.ExtendStart = false; limitedShading.ExtendEnd = false; // Clip the shading to desired area. PDFPath lsArea = new PDFPath(); lsArea.AddRectangle(25, 350, 550, 30); page.Canvas.SaveGraphicsState(); page.Canvas.SetClip(lsArea); page.Canvas.DrawShading(limitedShading); page.Canvas.RestoreGraphicsState(); page.Canvas.DrawPath(blackPen, lsArea); page.Canvas.DrawString("Multi-stop shading", sectionFont, brush, 25, 400); // Multi-stop shadings use a stitching function to combine the functions that define each gradient part. // Function for red to blue shading. PDFExponentialFunction redToBlueFunc = new PDFExponentialFunction(); // Linear function redToBlueFunc.Exponent = 1; redToBlueFunc.Domain = new double[] { 0, 1 }; // Red color for start redToBlueFunc.C0 = new double[] { 1, 0, 0 }; // Blue color for start redToBlueFunc.C1 = new double[] { 0, 0, 1 }; // Function for blue to green shading. PDFExponentialFunction blueToGreenFunc = new PDFExponentialFunction(); // Linear function blueToGreenFunc.Exponent = 1; blueToGreenFunc.Domain = new double[] { 0, 1 }; // Blue color for start blueToGreenFunc.C0 = new double[] { 0, 0, 1 }; // Green color for start blueToGreenFunc.C1 = new double[] { 0, 1, 0 }; //Stitching function for the shading. PDFStitchingFunction shadingFunction = new PDFStitchingFunction(); shadingFunction.Functions.Add(redToBlueFunc); shadingFunction.Functions.Add(blueToGreenFunc); shadingFunction.Domain = new double[] { 0, 1 }; shadingFunction.Encode = new double[] { 0, 1, 0, 1 }; // Entire shading goes from 0 to 1 (100%). // We set the first shading (red->blue) to cover 30% (0 - 0.3) and // the second shading to cover 70% (0.3 - 1). shadingFunction.Bounds = new double[] { 0.3 }; // The multistop shading PDFAxialShading multiStopShading = new PDFAxialShading(); multiStopShading.StartPoint = new PDFPoint(25, 420); multiStopShading.EndPoint = new PDFPoint(575, 420); // The colorspace must match the colors specified in C0 & C1 multiStopShading.ColorSpace = new PDFRgbColorSpace(); multiStopShading.Function = shadingFunction; // Clip the shading to desired area. PDFPath mssArea = new PDFPath(); mssArea.AddRectangle(25, 420, 550, 30); page.Canvas.SaveGraphicsState(); page.Canvas.SetClip(mssArea); page.Canvas.DrawShading(multiStopShading); page.Canvas.RestoreGraphicsState(); page.Canvas.DrawPath(blackPen, lsArea); page.Canvas.DrawString("Radial shading", sectionFont, brush, 25, 470); PDFRadialShading rs1 = new PDFRadialShading(); rs1.StartColor = new PDFRgbColor(0, 255, 0); rs1.EndColor = new PDFRgbColor(255, 0, 255); rs1.StartCircleCenter = new PDFPoint(50, 500); rs1.StartCircleRadius = 10; rs1.EndCircleCenter = new PDFPoint(500, 570); rs1.EndCircleRadius = 100; page.Canvas.DrawShading(rs1); PDFRadialShading rs2 = new PDFRadialShading(); rs2.StartColor = new PDFRgbColor(0, 255, 0); rs2.EndColor = new PDFRgbColor(255, 0, 255); rs2.StartCircleCenter = new PDFPoint(80, 600); rs2.StartCircleRadius = 10; rs2.EndCircleCenter = new PDFPoint(110, 690); rs2.EndCircleRadius = 100; page.Canvas.DrawShading(rs2); page.Canvas.CompressAndClose(); }
private static void DrawColorsAndColorSpaces(PDFPage page, PDFFont titleFont, PDFFont sectionFont, Stream iccStream) { PDFBrush brush = new PDFBrush(); page.Canvas.DrawString("Colors and colorspaces", titleFont, brush, 20, 50); page.Canvas.DrawString("DeviceRGB", sectionFont, brush, 20, 70); PDFPen rgbPen = new PDFPen(PDFRgbColor.DarkRed, 4); PDFBrush rgbBrush = new PDFBrush(PDFRgbColor.LightGoldenrodYellow); page.Canvas.DrawRectangle(rgbPen, rgbBrush, 20, 85, 250, 100); page.Canvas.DrawString("DeviceCMYK", sectionFont, brush, 340, 70); PDFPen cmykPen = new PDFPen(new PDFCmykColor(1, 0.5, 0, 0.1), 4); PDFBrush cmykBrush = new PDFBrush(new PDFCmykColor(0, 0.5, 0.43, 0)); page.Canvas.DrawRectangle(cmykPen, cmykBrush, 340, 85, 250, 100); page.Canvas.DrawString("DeviceGray", sectionFont, brush, 20, 200); PDFPen grayPen = new PDFPen(new PDFGrayColor(0.1), 4); PDFBrush grayBrush = new PDFBrush(new PDFGrayColor(0.75)); page.Canvas.DrawRectangle(grayPen, grayBrush, 20, 215, 250, 100); page.Canvas.DrawString("Indexed", sectionFont, brush, 340, 200); PDFIndexedColorSpace indexedColorSpace = new PDFIndexedColorSpace(); indexedColorSpace.ColorCount = 2; indexedColorSpace.BaseColorSpace = new PDFRgbColorSpace(); indexedColorSpace.ColorTable = new byte[] { 192, 0, 0, 0, 0, 128 }; PDFIndexedColor indexedColor0 = new PDFIndexedColor(indexedColorSpace); indexedColor0.ColorIndex = 0; PDFIndexedColor indexedColor1 = new PDFIndexedColor(indexedColorSpace); indexedColor1.ColorIndex = 1; PDFPen indexedPen = new PDFPen(indexedColor0, 4); PDFBrush indexedBrush = new PDFBrush(indexedColor1); page.Canvas.DrawRectangle(indexedPen, indexedBrush, 340, 215, 250, 100); page.Canvas.DrawString("CalGray", sectionFont, brush, 20, 330); PDFCalGrayColorSpace calGrayColorSpace = new PDFCalGrayColorSpace(); PDFCalGrayColor calGrayColor1 = new PDFCalGrayColor(calGrayColorSpace); calGrayColor1.Gray = 0.6; PDFCalGrayColor calGrayColor2 = new PDFCalGrayColor(calGrayColorSpace); calGrayColor2.Gray = 0.2; PDFPen calGrayPen = new PDFPen(calGrayColor1, 4); PDFBrush calGrayBrush = new PDFBrush(calGrayColor2); page.Canvas.DrawRectangle(calGrayPen, calGrayBrush, 20, 345, 250, 100); page.Canvas.DrawString("CalRGB", sectionFont, brush, 340, 330); PDFCalRgbColorSpace calRgbColorSpace = new PDFCalRgbColorSpace(); PDFCalRgbColor calRgbColor1 = new PDFCalRgbColor(calRgbColorSpace); calRgbColor1.Red = 0.1; calRgbColor1.Green = 0.5; calRgbColor1.Blue = 0.25; PDFCalRgbColor calRgbColor2 = new PDFCalRgbColor(calRgbColorSpace); calRgbColor2.Red = 0.6; calRgbColor2.Green = 0.1; calRgbColor2.Blue = 0.9; PDFPen calRgbPen = new PDFPen(calRgbColor1, 4); PDFBrush calRgbBrush = new PDFBrush(calRgbColor2); page.Canvas.DrawRectangle(calRgbPen, calRgbBrush, 340, 345, 250, 100); page.Canvas.DrawString("L*a*b", sectionFont, brush, 20, 460); PDFLabColorSpace labColorSpace = new PDFLabColorSpace(); PDFLabColor labColor1 = new PDFLabColor(labColorSpace); labColor1.L = 90; labColor1.A = -40; labColor1.B = 120; PDFLabColor labColor2 = new PDFLabColor(labColorSpace); labColor2.L = 45; labColor2.A = 90; labColor2.B = -34; PDFPen labPen = new PDFPen(labColor1, 4); PDFBrush labBrush = new PDFBrush(labColor2); page.Canvas.DrawRectangle(labPen, labBrush, 20, 475, 250, 100); page.Canvas.DrawString("Icc", sectionFont, brush, 340, 460); PDFIccColorSpace iccColorSpace = new PDFIccColorSpace(); byte[] iccData = new byte[iccStream.Length]; iccStream.Read(iccData, 0, iccData.Length); iccColorSpace.IccProfile = iccData; iccColorSpace.AlternateColorSpace = new PDFRgbColorSpace(); iccColorSpace.ColorComponents = 3; PDFIccColor iccColor1 = new PDFIccColor(iccColorSpace); iccColor1.ColorComponents = new double[] { 0.45, 0.1, 0.22 }; PDFIccColor iccColor2 = new PDFIccColor(iccColorSpace); iccColor2.ColorComponents = new double[] { 0.21, 0.76, 0.31 }; PDFPen iccPen = new PDFPen(iccColor1, 4); PDFBrush iccBrush = new PDFBrush(iccColor2); page.Canvas.DrawRectangle(iccPen, iccBrush, 340, 475, 250, 100); page.Canvas.DrawString("Separation", sectionFont, brush, 20, 590); PDFExponentialFunction tintTransform = new PDFExponentialFunction(); tintTransform.Domain = new double[] { 0, 1 }; tintTransform.Range = new double[] { 0, 1, 0, 1, 0, 1, 0, 1 }; tintTransform.Exponent = 1; tintTransform.C0 = new double[] { 0, 0, 0, 0 }; tintTransform.C1 = new double[] { 1, 0.5, 0, 0.1 }; PDFSeparationColorSpace separationColorSpace = new PDFSeparationColorSpace(); separationColorSpace.AlternateColorSpace = new PDFCmykColorSpace(); separationColorSpace.Colorant = "Custom Blue"; separationColorSpace.TintTransform = tintTransform; PDFSeparationColor separationColor1 = new PDFSeparationColor(separationColorSpace); separationColor1.Tint = 0.23; PDFSeparationColor separationColor2 = new PDFSeparationColor(separationColorSpace); separationColor2.Tint = 0.74; PDFPen separationPen = new PDFPen(separationColor1, 4); PDFBrush separationBrush = new PDFBrush(separationColor2); page.Canvas.DrawRectangle(separationPen, separationBrush, 20, 605, 250, 100); page.Canvas.DrawString("Pantone", sectionFont, brush, 340, 590); PDFPen pantonePen = new PDFPen(PDFPantoneColor.ReflexBlue, 4); PDFBrush pantoneBrush = new PDFBrush(PDFPantoneColor.RhodamineRed); page.Canvas.DrawRectangle(pantonePen, pantoneBrush, 340, 605, 250, 100); page.Canvas.CompressAndClose(); }