使用itextsharp生成的PDF在执行第一个打印命令时出现错误

使用itextsharp生成的PDF在执行第一个打印命令时出现错误,pdf,adobe,pdf-generation,itextsharp,Pdf,Adobe,Pdf Generation,Itextsharp,我第一次在下面给打印命令 “此页上存在错误。Acrobat可能无法正确显示该页。请 请与创建pdf文档的人员联系以更正问题” 打印出来很好。第二次打印输出命令没有给出任何错误 请帮助我为什么第一次出现此错误 这是我创建PDF的部分代码 PdfContentByte cb = writer.DirectContent; cb.BeginText(); Font NormalFont = FontFactory.GetFont("Arial", 12, Font.NORMAL, Color.BLAC

我第一次在下面给打印命令

“此页上存在错误。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();

请帮助我了解问题所在。

您有嵌套的文本块。这是非法的PDF语法。我认为iTextSharp的最新版本警告您这一点,所以我猜您使用的是旧版本

这是错误的:

cb.BeginText();
...
cb.BeginText();
...
cb.EndText();
...
cb.EndText();
cb.BeginText();
...
cb.AddImage(img);
...
cb.EndText();
这是正确的:

cb.BeginText();
...
cb.EndText();
...
cb.BeginText();
...
cb.EndText();
cb.BeginText();
...
cb.EndText();
...
cb.AddImage(img);
此外:ISO-32000-1告诉您在文本块内禁止某些操作

这是错误的:

cb.BeginText();
...
cb.BeginText();
...
cb.EndText();
...
cb.EndText();
cb.BeginText();
...
cb.AddImage(img);
...
cb.EndText();
这是正确的:

cb.BeginText();
...
cb.EndText();
...
cb.BeginText();
...
cb.EndText();
cb.BeginText();
...
cb.EndText();
...
cb.AddImage(img);
最后,在创建文本块时,某些运算符是必需的。例如:您总是需要
setFontAndSize()
(我不知道您在
writeText()
中做什么,但我假设您正确设置了字体)


在任何情况下:您选择在最低级别使用iTextSharp,几乎是手动编写PDF语法。这假设您对ISO-32000-1了如指掌。如果没有,则应使用一些高级对象,例如
ColumnText
将内容定位在绝对位置。

您有嵌套的文本块。这是非法的PDF语法。我认为iTextSharp的最新版本警告您这一点,所以我猜您使用的是旧版本

这是错误的:

cb.BeginText();
...
cb.BeginText();
...
cb.EndText();
...
cb.EndText();
cb.BeginText();
...
cb.AddImage(img);
...
cb.EndText();
这是正确的:

cb.BeginText();
...
cb.EndText();
...
cb.BeginText();
...
cb.EndText();
cb.BeginText();
...
cb.EndText();
...
cb.AddImage(img);
此外:ISO-32000-1告诉您在文本块内禁止某些操作

这是错误的:

cb.BeginText();
...
cb.BeginText();
...
cb.EndText();
...
cb.EndText();
cb.BeginText();
...
cb.AddImage(img);
...
cb.EndText();
这是正确的:

cb.BeginText();
...
cb.EndText();
...
cb.BeginText();
...
cb.EndText();
cb.BeginText();
...
cb.EndText();
...
cb.AddImage(img);
最后,在创建文本块时,某些运算符是必需的。例如:您总是需要
setFontAndSize()
(我不知道您在
writeText()
中做什么,但我假设您正确设置了字体)

在任何情况下:您选择在最低级别使用iTextSharp,几乎是手动编写PDF语法。这假设您对ISO-32000-1了如指掌。如果没有,则应该使用一些高级对象,例如
ColumnText
,将内容定位在绝对位置