static void blendPage(Document doc, Image foregroundImage, Image backgroundImage) { double height = 792; double width = 612; Rect pageRect = new Rect(0, 0, width, height); Page docpage = doc.CreatePage(doc.NumPages - 1, pageRect); // This section demonstrates all the Blend Modes one can achieve // by setting the BlendMode property to each of the 16 enumerations // on a foreground "ducky" over a background rainbow pattern, and // plopping all these images on a single page. Text t = new Text(); Font f = new Font("Arial", FontCreateFlags.Embedded | FontCreateFlags.Subset); GraphicState gsText = new GraphicState(); gsText.FillColor = new Color(0, 0, 1.0); TextState ts = new TextState(); for (int i = 0; i < 16; i++) { Image individualForegroundImage = foregroundImage.Clone(); Image individualBackgroundImage = backgroundImage.Clone(); GraphicState gs = individualForegroundImage.GraphicState; individualForegroundImage.Scale(0.125, 0.125); individualForegroundImage.Translate(800, 200 + height * (7 - i)); individualBackgroundImage.Scale(0.125, 0.125); individualBackgroundImage.Translate(800, 200 + height * (7 - i)); // Halfway through, create 2nd column by shifting over and up if (i > 7) { individualForegroundImage.Translate(2400, height * 8); individualBackgroundImage.Translate(2400, height * 8); } docpage.Content.AddElement(individualBackgroundImage); Console.WriteLine("Added background image " + (i + 1) + " to the content."); docpage.Content.AddElement(individualForegroundImage); Console.WriteLine("Added foreground image " + (i + 1) + " to the content."); Matrix m = new Matrix(); if (i > 7) { m = m.Translate(480, 750 - ((i - 8) * 100)); // second column } else { m = m.Translate(180, 750 - (i * 100)); // first column } m = m.Scale(12.0, 12.0); ExtendedGraphicState xgs = new ExtendedGraphicState(); TextRun tr = null; if (i == 0) { xgs.BlendMode = BlendMode.Normal; tr = new TextRun("Normal", f, gsText, ts, m); } else if (i == 1) { xgs.BlendMode = BlendMode.Multiply; tr = new TextRun("Multiply", f, gsText, ts, m); } else if (i == 2) { xgs.BlendMode = BlendMode.Screen; tr = new TextRun("Screen", f, gsText, ts, m); } else if (i == 3) { xgs.BlendMode = BlendMode.Overlay; tr = new TextRun("Overlay", f, gsText, ts, m); } else if (i == 4) { xgs.BlendMode = BlendMode.Darken; tr = new TextRun("Darken", f, gsText, ts, m); } else if (i == 5) { xgs.BlendMode = BlendMode.Lighten; tr = new TextRun("Lighten", f, gsText, ts, m); } else if (i == 6) { xgs.BlendMode = BlendMode.ColorDodge; tr = new TextRun("Color Dodge", f, gsText, ts, m); } else if (i == 7) { xgs.BlendMode = BlendMode.ColorBurn; tr = new TextRun("Color Burn", f, gsText, ts, m); } else if (i == 8) { xgs.BlendMode = BlendMode.HardLight; tr = new TextRun("Hard Light", f, gsText, ts, m); } else if (i == 9) { xgs.BlendMode = BlendMode.SoftLight; tr = new TextRun("SoftLight", f, gsText, ts, m); } else if (i == 10) { xgs.BlendMode = BlendMode.Difference; tr = new TextRun("Difference", f, gsText, ts, m); } else if (i == 11) { xgs.BlendMode = BlendMode.Exclusion; tr = new TextRun("Exclusion", f, gsText, ts, m); } else if (i == 12) { xgs.BlendMode = BlendMode.Hue; tr = new TextRun("Hue", f, gsText, ts, m); } else if (i == 13) { xgs.BlendMode = BlendMode.Saturation; tr = new TextRun("Saturation", f, gsText, ts, m); } else if (i == 14) { xgs.BlendMode = BlendMode.Color; tr = new TextRun("Color", f, gsText, ts, m); } else if (i == 15) { xgs.BlendMode = BlendMode.Luminosity; tr = new TextRun("Luminosity", f, gsText, ts, m); } t.AddRun(tr); docpage.Content.AddElement(t); docpage.UpdateContent(); Console.WriteLine("Updated the content on page 1."); gs.ExtendedGraphicState = xgs; individualForegroundImage.GraphicState = gs; Console.WriteLine("Set blend mode in extended graphic state."); } }
static void Main(string[] args) { Console.WriteLine("ConvertTextToOutlines sample:"); using (Library lib = new Library()) { String sInput1 = Library.ResourceDirectory + "Sample_Input/TextSearch.pdf"; String sOutput1 = "../TextSearch-converted.pdf"; if (args.Length > 0) { sInput1 = args[0]; } if (args.Length > 1) { sOutput1 = args[1]; } // Open a document with multiple pages. Document doc = new Document(sInput1); // Iterate over the pages of the document and add a translucent element to the pages int totalPages = doc.NumPages; int pageCounter = 0; while (pageCounter < totalPages) { Page pg = doc.GetPage(pageCounter); Path tinyLine = new Path(); GraphicState gs = tinyLine.GraphicState; gs.FillColor = new Color(1.0, 1.0, 1.0); // White gs.StrokeColor = new Color(1.0, 1.0, 1.0); // white tinyLine.PaintOp = PathPaintOpFlags.Stroke;; // PathPaintOpFlags.EoFill gs.Width = 1.0; ExtendedGraphicState xgs = new ExtendedGraphicState(); xgs.BlendMode = BlendMode.Normal; xgs.OpacityForStroking = 0.5; xgs.OpacityForOtherThanStroking = 0.5; gs.ExtendedGraphicState = xgs; tinyLine.GraphicState = gs; Point Origin = new Point(0.0, 0.0); Point Point1 = new Point(1.0, 1.0); // line that goes from 0,0 to 1,1 tinyLine.MoveTo(Origin); tinyLine.AddLine(Point1); tinyLine.ClosePath(); pg.Content.AddElement(tinyLine); // Add the new element to the Content of the page. pg.UpdateContent(); // Update the PDF page with the changed content pg.Dispose(); pageCounter++; } // Set up some parameters for the flattening. FlattenTransparencyParams ftParams = new FlattenTransparencyParams(); // The Quality setting indicates the percentage (0%-100%) of vector information // that is preserved. Lower values result in higher rasterization of vectors. ftParams.Quality = 100; ftParams.UseTextOutlines = true; doc.FlattenTransparency(ftParams, 0, Document.LastPage); Console.WriteLine("Flattened a multi-page document " + sInput1 + " as " + sOutput1 + "."); doc.Save(SaveFlags.Full, sOutput1); } }