Stamping existing pages with new content

Q:
Currently our code code requires us to open an existing PDF and write a
table of data at the top as a header.

However, after doing that with the code using the element header, the
pdf has the following error upon opening.

Illegal operation ;Tm’ outside text object.

Is there another way we should be doing this? We are using the
ElementBuilder to do this.

public void AddHeader(string applicantName, string applicantSsn, string
essayDescription)
{
int pageCount = Doc.GetPagesCount();
pdftron.PDF.ElementBuilder headerElementBuilder = new
pdftron.PDF.ElementBuilder();
pdftron.PDF.ElementBuilder embarkElementBuilder = new
pdftron.PDF.ElementBuilder();
ElementWriter elementOutStream = new ElementWriter();
ElementReader elementInStream = new ElementReader();
Element currentElement;
Element headerInsertElement;
Element embarkInsertElement;
headerInsertElement =
headerElementBuilder.CreateTextBegin(Font.Create(Doc,
Font.StandardType1Font.e_times_roman), 1);
embarkInsertElement =
embarkElementBuilder.CreateTextBegin(Font.Create(Doc,
Font.StandardType1Font.e_times_bold_italic), 0.75);
GState gstate;

for(int i=1; i<=pageCount; i++) {
PageIterator pageStream = Doc.PageFind(i);
pdftron.PDF.Page oldPage = pageStream.Current();
pdftron.PDF.Page newPage = Doc.PageCreate(oldPage.GetMediaBox());
Doc.PageInsert(pageStream.Next(), newPage);

elementOutStream.Begin(newPage);
headerInsertElement = headerElementBuilder.CreateTextRun(“Name:”);
headerInsertElement.SetTextMatrix(10, 0, 0, 10, 20, 775);
headerInsertElement.GetGState().SetLeading(1);
elementOutStream.WriteElement(headerInsertElement);

}


A:

It seems that although you create text begin element, you never write
it to the page stream.

You need to write the text begin element before any text run element
and you also need to write ‘text end’ element after completing the
block of text. For example:

headerInsertElement =
headerElementBuilder.CreateTextBegin(Font.Create(Doc,
Font.StandardType1Font.e_times_roman), 1);
elementOutStream.WriteElement(headerInsertElement);

headerInsertElement = headerElementBuilder.CreateTextRun(“Social
Insurance/Security #:”);
headerInsertElement.SetTextMatrix(10, 0, 0, 10, 270, 775);
headerInsertElement.GetGState().SetLeading(1);
elementOutStream.WriteElement(headerInsertElement);


elementOutStream.WriteElement(headerElementBuilder.CreateTextEnd());


You can also copy content from one page to another faster if you create
Form Xobject from an existing page. This is illustrated in
ImpositionTest sample project
(http://www.pdftron.com/net/samplecode.html#Imposition).