//--------------------------------------------------------------------------------------- // Copyright (c) 2001-2012 by PDFTron Systems Inc. All Rights Reserved. // Consult legal.txt regarding legal and license information. //--------------------------------------------------------------------------------------- #include #include #include #include #include #include #include using namespace std; using namespace pdftron; using namespace Common; using namespace SDF; using namespace PDF; // This sample illustrates how to edit existing text strings. int main(int argc, char *argv[]) { int ret = 0; PDFNet::Initialize(); // Relative path to the folder containing test files. string input_path = "../../TestFiles/"; string output_path = "../../TestFiles/Output/"; try { cout << "-------------------------------------------------" << endl; PDFDoc doc((input_path + "newsletter.pdf").c_str()); doc.InitSecurityHandler(); ElementWriter writer; ElementReader reader; Element element; int num_pages = doc.GetPageCount(); for(int i=1; i<=num_pages; ++i) { PageIterator itr = doc.GetPageIterator(i); Page page = itr.Current(); reader.Begin(page); Page new_page = doc.PageCreate(); PageIterator next_page = itr; next_page.Next(); doc.PageInsert(next_page, new_page ); writer.Begin(new_page); while ((element = reader.Next()) != 0) // Read page contents { if (element.GetType() == Element::e_text) { // Set all text to blue color. GState gs = element.GetGState(); gs.SetFillColorSpace(ColorSpace::CreateDeviceRGB()); gs.SetFillColor(ColorPt(0, 0, 1)); const UChar* text_arr = element.GetTextData(); int size = element.GetTextDataSize(); UChar* text_arr_new = new UChar[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]; } } } element.SetTextData(text_arr_new, size); writer.WriteElement(element); delete [] text_arr_new; } else if (element.GetType() == Element::e_image) { // remove all images continue; } else { writer.WriteElement(element); } } writer.End(); reader.End(); new_page.SetMediaBox(page.GetCropBox()); doc.PageRemove(doc.GetPageIterator(i)); } doc.Save((output_path + "newsletter_ed.pdf").c_str(), SDFDoc::e_remove_unused , NULL); // doc.Save(output_path + "newsletter_ed.pdf").c_str(), Doc::e_linearized , NULL); cout << "Done. Result saved in newsletter_ed.pdf..." << endl; } catch(Common::Exception& e) { cout << e << endl; ret = 1; } catch(...) { cout << "Unknown Exception" << endl; ret = 1; } PDFNet::Terminate(); return ret; }