Q:
Ideal solution would be to give a Name to the Text Group, then I could
reference it and have it delete itself before I write the new
information.
A:
Probably the easiest thing to do, is add a
FormXobject. The benefit of this, is you can add custom metadata to
the form xobject object. Also it isolates the graphics, so you can
easily modify it.
Here is sample code to do this.
This code will add text at position x,y in page coordinates (aka User Space).
PDFRect bbox = new PDFRect();
writer.Begin(doc);
Font font = Font.Create(doc, Font.StandardType1Font.e_helvetica);
element = builder.CreateTextBegin(font, 12);
writer.WriteElement(element);
element = builder.CreateTextRun("Original Text");
element.GetBBox(bbox);
writer.WriteElement(element);
element = builder.CreateTextEnd();
writer.WriteElement(element);
Obj form_xobject = writer.End();
form_xobject.PutRect("BBox", bbox.x1, bbox.y1, bbox.x2, bbox.y2);
form_xobject.PutString("my_key", "my_val");
element = builder.CreateForm(form_xobject);
writer.Begin(page, ElementWriter.WriteMode.e_overlay, false);
element.GetGState().SetTransform(1,0,0,1,x,y);
writer.WritePlacedElement(element);
writer.End();
And this code will locate and replace the target
reader.Begin(page);
Element element;
while((element = reader.Next()) != null)
{
if(element.GetType() == Element.Type.e_form)
{
Obj form_xobject = element.GetXObject();
Obj key_obj = form_xobject.FindObj("my_key");
if (key_obj != null)
{
found = true;
PDFRect bbox = new PDFRect();
writer.Begin(form_xobject, true);
Font font = Font.Create(doc, Font.StandardType1Font.e_helvetica);
element = builder.CreateTextBegin(font, 12);
//element.GetGState().SetTransform(1, 0, 0, 1, x, y);
writer.WriteElement(element);
element = builder.CreateTextRun("New Modified Text");
element.GetBBox(bbox);
writer.WriteElement(element);
element = builder.CreateTextEnd();
writer.WriteElement(element);
writer.End();
form_xobject.PutRect("BBox", bbox.x1, bbox.y1, bbox.x2, bbox.y2);
}
}
}