第一次发出打印命令时,我正在下面。
“此页面上存在错误.Acrobat可能无法正确显示页面。请 联系创建pdf文档的人来纠正问题“。
打印出来非常好。第二次打印命令没有出错。
请帮我解释为什么第一次打印出现此错误。
这是我创建PDF的代码的一部分
PdfContentByte cb = writer.DirectContent;
cb.BeginText();
Font NormalFont = FontFactory.GetFont("Arial", 12, Font.NORMAL, Color.BLACK);
// Add an image to a fixed position
iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(Server.MapPath("~/images/images/banner.tiff"));
img.SetAbsolutePosition(35, 760);
img.ScalePercent(50);
cb.AddImage(img);
// Draw a line by setting the line width and position
cb.SetLineWidth(2);
cb.MoveTo(20, 740);
cb.LineTo(570, 740);
cb.Stroke();
//Header Details
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();
// Acknowledgement section
cb.BeginText();
writeText(cb, "XXXXXXXXXXXXXXXX", 20, 140, f_cb, 12);
cb.EndText();
cb.EndText();
请帮我弄清楚是什么问题。
答案 0 :(得分:4)
您有嵌套的文本块。这是非法的PDF语法。我想最近版本的iTextSharp会对此发出警告,所以我猜你使用的是旧版本。
这是错误的:
cb.BeginText();
...
cb.BeginText();
...
cb.EndText();
...
cb.EndText();
这是对的:
cb.BeginText();
...
cb.EndText();
...
cb.BeginText();
...
cb.EndText();
此外:ISO-32000-1告诉您在文本块中禁止某些操作。
这是错误的:
cb.BeginText();
...
cb.AddImage(img);
...
cb.EndText();
这是对的:
cb.BeginText();
...
cb.EndText();
...
cb.AddImage(img);
最后,在创建文本块时必须使用某些运算符。例如:你总是需要setFontAndSize()
(我不知道你在writeText()
做了什么,但我假设你正确设置了字体。)
无论如何:您选择在最低级别使用iTextSharp,几乎手动编写PDF语法。这假定您从内到外了解ISO-32000-1。如果不这样做,则应使用某些高级对象(例如ColumnText
)将内容定位在绝对位置。