//--------------------------------------------------------------------------------------- // Copyright (c) 2001-2008 by PDFTron Systems Inc. All Rights Reserved. // Consult legal.txt regarding legal and license information. //--------------------------------------------------------------------------------------- using System; using pdftron; using pdftron.Common; using pdftron.Filters; using pdftron.SDF; using pdftron.PDF; namespace EditTextTestCS { // This sample illustrates basic in-place text editing. class Class1 { [STAThread] static void Main(string[] args) { PDFNet.Initialize(); PDFNet.SetResourcesPath("../../../../../resources"); // Relative path to the folder containing test files. string input_path = "../../../../TestFiles/"; string output_path = "../../../../TestFiles/Output/"; try { Console.WriteLine("-------------------------------------------------"); PDFDoc doc = new PDFDoc(input_path + "newsletter.pdf"); doc.InitSecurityHandler(); int num_pages = doc.GetPageCount(); ElementWriter writer = new ElementWriter(); ElementReader reader = new ElementReader(); Element element; for (int i = 1; i <= num_pages; ++i) { Page page = doc.GetPage(1); // Get the first page reader.Begin(page); Page new_page = doc.PageCreate(); doc.PagePushBack(new_page); writer.Begin(new_page); while ((element = reader.Next()) != null) // Read page contents { if (element.GetType() == Element.Type.e_text) { // Set all text to blue color. GState gs = element.GetGState(); gs.SetFillColorSpace(ColorSpace.CreateDeviceRGB()); gs.SetFillColor(new ColorPt(0, 0, 1)); byte[] text_arr = element.GetTextData(); int size = element.GetTextDataSize(); byte[] text_arr_new = new byte[size]; bool bUnicode = false; if (size > 2) { if (text_arr[0] == 254 && text_arr[1] == 255) { bUnicode = true; for (int n = 0; n < size; n++) { //copy Unicode string as is text_arr_new[n] = text_arr[n]; } } } if (!bUnicode) { for (int n = 0; n < size; n++) { //replace 'c' with 'k' and 'k' with 'c' switch (text_arr[n]) { case 99: text_arr_new[n] = 107; break; case 107: text_arr_new[n] = 99; break; default: text_arr_new[n] = text_arr[n]; break; } } } element.SetTextData(text_arr_new, size); writer.WriteElement(element); } else if (element.GetType() == Element.Type.e_image) { // remove all images if any continue; } else { writer.WriteElement(element); } } writer.End(); reader.End(); new_page.SetMediaBox(page.GetCropBox()); doc.PageRemove(doc.GetPageIterator(1)); // Remove the old page } doc.Save(output_path + "newsletter_ed.pdf", SDFDoc.SaveOptions.e_remove_unused); doc.Close(); Console.WriteLine("Done. Result saved in newsletter_ed..."); } catch (PDFNetException e) { Console.WriteLine(e.Message); } PDFNet.Terminate(); } } }