//--------------------------------------------------------------------------------------- // Copyright (c) 2001-2012 by PDFTron Systems Inc. All Rights Reserved. // Consult legal.txt regarding legal and license information. //--------------------------------------------------------------------------------------- #import #import // This sample illustrates how to edit existing text strings. int main(int argc, char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; int ret = 0; [PDFNet Initialize: 0]; NSLog(@"-------------------------------------------------\n"); PDFDoc *doc = [[PDFDoc alloc] initWithFilepath: @"../../TestFiles/newsletter.pdf"]; [doc InitSecurityHandler]; ElementWriter *writer = [[ElementWriter alloc] init]; ElementReader *reader = [[ElementReader alloc] init]; Element *element; int num_pages = [doc GetPageCount]; int i = 1; for(; i<=num_pages; ++i) { PageIterator *itr = [doc GetPageIterator: i]; Page *page = [itr Current]; [reader ReaderBeginWithPage: page ocg_context: 0]; PDFRect *rect = [[PDFRect alloc] init]; [rect Set: 0 y1: 0 x2: 612 y2: 792]; Page *new_page = [doc PageCreate: rect]; PageIterator *next_page = itr; [next_page Next]; [doc PageInsert: next_page page: new_page]; [writer WriterBeginWithPage: new_page placement: e_overlay page_coord_sys: YES compress: YES]; while (element = [reader Next]) // Read page contents { if ([element GetType] == e_text_obj) { // Set all text to blue color. GState *gs = [element GetGState]; [gs SetFillColorSpace: [ColorSpace CreateDeviceRGB]]; [gs SetFillColorWithColorPt: [[[ColorPt alloc] initWithX: 0 y: 0 z: 1 w: 0] autorelease]]; NSData *buffer = [element GetTextData]; unsigned char* text_arr = (unsigned char*)[buffer bytes]; int size = [element GetTextDataSize]; unsigned char text_arr_new[size]; bool bUnicode = false; if (size > 2) { if (text_arr[0] == 254 && text_arr[1] == 255) { bUnicode = true; int n = 0; for (; n < size; n++) { //copy Unicode string as is text_arr_new[n] = text_arr[n]; } } } if (!bUnicode) { int n = 0; for (; 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]; } } NSData *t = [NSData dataWithBytes: &text_arr_new length: size]; [element SetTextData: t text_data_size: size]; [writer WriteElement: element]; } } else if ([element GetType] == 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 SaveToFile: @"../../TestFiles/Output/newsletter_ed.pdf" flags: e_remove_unused]; // doc.Save(output_path + "newsletter_ed.pdf").c_str(), Doc::e_linearized , NULL); NSLog(@"Done. Result saved in newsletter_ed.pdf...\n"); [pool release]; return ret; }