pdfbox - How do I make modifications to existing layer(Optional Content Group) in pdf? -


i implementing functionality allow user draw figures in pdf. want draw figures in single layer, can made visible or invisible user.i able create new layer in pdf. able retrieve layer.but, not able make modification layer (pdoptionalcontentgroup). tried converting pdoptionalcontentgroup pdpage , making desired changes pdppage. saved pddocument.it created layer same name previous one, changes not there.here code used:

pdfont font = pdtype1font.helvetica; pddocument doc = pddocument.load(src); pdoptionalcontentproperties ocprops = doc.getdocumentcatalog().getocproperties(); foreach (string groupname in ocprops.getgroupnames()) {     pdoptionalcontentgroup group = ocprops.getgroup(groupname);     cosbase cosbase = group.getcosobject();     pdpage grouppage = new pdpage((cosdictionary)cosbase);     pdpagecontentstream cs = new pdpagecontentstream(doc, grouppage, true, false);     cs.begintext();     cs.setfont(font, 12);     cs.movetextpositionbyamount(150, 200);     cs.drawstring("testing added group:" + groupname);     cs.endtext();     cs.close();     doc.save(src); } 

(in comment op indicated can use 1.8.x version of pdfbox. thus, code here 1.8'ish, tested against pdfbox 1.8.12 java.)

in comment question "how resource names optional content group in pdf?" tilman hausherr suggested use pdfbox class layerutility template own solutions.

thus, example how add existing ocg helper method (based on layerutility.appendformaslayer) shows how add text existing or new ocg. should simple adapt adding content want add...

void addtexttolayer(pddocument document, int pagenumber, string layername, float x, float y, string text) throws ioexception {     pddocumentcatalog catalog = document.getdocumentcatalog();     pdoptionalcontentproperties ocprops = catalog.getocproperties();     if (ocprops == null)     {         ocprops = new pdoptionalcontentproperties();         catalog.setocproperties(ocprops);     }     pdoptionalcontentgroup layer = null;     if (ocprops.hasgroup(layername))     {         layer = ocprops.getgroup(layername);     }     else     {         layer = new pdoptionalcontentgroup(layername);         ocprops.addgroup(layer);     }      pdpage page = (pdpage) document.getdocumentcatalog().getallpages().get(pagenumber);      pdresources resources = page.findresources();     if (resources == null)     {         resources = new pdresources();         page.setresources(resources);     }     pdpropertylist props = resources.getproperties();     if (props == null)     {         props = new pdpropertylist();         resources.setproperties(props);     }      //find first free resource name pattern "mc<index>"     int index = 0;     pdoptionalcontentgroup ocg;     cosname resourcename;         {         resourcename = cosname.getpdfname("mc" + index);         ocg = props.getoptionalcontentgroup(resourcename);         index++;     } while (ocg != null);     //put mapping our new layer/ocg     props.putmapping(resourcename, layer);      pdfont font = pdtype1font.helvetica;      pdpagecontentstream contentstream = new pdpagecontentstream(document, page, true, true, true);     contentstream.beginmarkedcontentsequence(cosname.oc, resourcename);     contentstream.begintext();     contentstream.setfont(font, 12);     contentstream.movetextpositionbyamount(x, y);     contentstream.drawstring(text);     contentstream.endtext();     contentstream.endmarkedcontentsequence();      contentstream.close(); } 

(addcontenttoocg helper method addtexttolayer)

you can use this

pddocument document = new pddocument(); pdpage page = new pdpage(); document.addpage(page);  addtexttolayer(document, 0, "mylayer", 30, 600, "text in new layer 'mylayer'"); addtexttolayer(document, 0, "myotherlayer", 230, 550, "text in new layer 'myotherlayer'"); addtexttolayer(document, 0, "mylayer", 30, 500, "text in existing layer 'mylayer'"); addtexttolayer(document, 0, "myotherlayer", 230, 450, "text in existing layer 'myotherlayer'");  document.save(new file(result_folder, "textinocgs.pdf")); document.close(); 

(addcontenttoocg test method testaddcontenttoneworexistingocg)

to add text existing or not yet existing ocgs.


Comments

Popular posts from this blog

Command prompt result in label. Python 2.7 -

javascript - How do I use URL parameters to change link href on page? -

amazon web services - AWS Route53 Trying To Get Site To Resolve To www -