What is causing syntax errors in a page created with iText?

I am getting the following error when I want to print a PDF generated with iTextSharp" "An error exists on this page. Acrobat may not display the page correctly. please contact the person wh

I am getting the following error when I want to print a PDF generated with iTextSharp"

"An error exists on this page. Acrobat may not display the page correctly. please contact the person who created the pdf document to correct the problem"

The document prints fine, but why do I get this error? This is my code:

PdfContentByte cb = writer.DirectContent;
cb.BeginText();
Font NormalFont = FontFactory.GetFont("Arial", 12, Font.NORMAL, Color.BLACK);
iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance("/banner.tiff");
img.SetAbsolutePosition(35, 760);
img.ScalePercent(50);
cb.AddImage(img);
cb.SetLineWidth(2);
cb.MoveTo(20, 740);
cb.LineTo(570, 740);
cb.Stroke();
cb.BeginText();
writeText(cb, drHead["EmpName"].ToString(), 25, 745, f_cb, 14);
writeText(cb, "Employee ID:", 450, 745, f_cn, 12);
writeText(cb, drHead["EmployeeID"].ToString(), 515, 745, f_cb, 12);
cb.EndText();
cb.BeginText();
writeText(cb, "XXXX:", 25, 725, f_cb, 8);
cb.EndText();
cb.SetLineWidth(2);
cb.MoveTo(20, 675);
cb.LineTo(570, 675);
cb.Stroke();
cb.EndText();
cb.BeginText();
writeText(cb, "XXXXXXXXXXXXXXXX", 20, 140, f_cb, 12);
cb.EndText();
cb.EndText();
Please help me to know what is the issue.

Posted on StackOverflow on Jan 23, 2014 by Vandana

You have nested text blocks. That's illegal PDF syntax. I think recent versions of iTextSharp warn you about this, so I guess you're using an old version.

This is wrong:

cb.BeginText();
...
cb.BeginText();
...
cb.EndText();
...
cb.EndText();

This is right:

cb.BeginText();
...
cb.EndText();
...
cb.BeginText();
...
cb.EndText();

Moreover: ISO-32000-1 tells you that some operations are forbidden inside a text block.

This is wrong:

cb.BeginText();
...
cb.AddImage(img);
...
cb.EndText();

This is right:

cb.BeginText();
...
cb.EndText();
...
cb.AddImage(img);

Finally, some operators are mandatory when creating a text block. For instance: you always need setFontAndSize() (I don't know what you're doing in writeText(), but I assume you're setting the font correctly).

In any case: you have chosen to use iTextSharp at the lowest level, writing PDF syntax almost manually. This assumes that you know ISO-32000-1 inside-out. If you don't, you should use some of the high-level objects, such as ColumnText to position content at absolute positions.


Share this article

Ready to use iText?

Try our iText 7 Library and add-ons FREE for 30 days. Test your proof of concept, and see if our solution is right for you.

Get my FREE trial
Contact

Still have questions? 

We're happy to answer your questions. Reach out to us and we'll get back to you shortly.

Contact us
Stay updated

Join 11,000+ subscribers and become an iText PDF expert by staying up to date with our new products, updates, tips, technical solutions and happenings.

Subscribe Now