Van*_*ana 1 pdf adobe pdf-generation itext
我第一次给出打印命令。
“此页面存在错误。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();
Run Code Online (Sandbox Code Playgroud)
请帮我知道是什么问题。
您有嵌套的文本块。这是非法的 PDF 语法。我认为 iTextSharp 的最新版本会警告您这一点,所以我猜您正在使用旧版本。
这是错误的:
cb.BeginText();
...
cb.BeginText();
...
cb.EndText();
...
cb.EndText();
Run Code Online (Sandbox Code Playgroud)
这是对的:
cb.BeginText();
...
cb.EndText();
...
cb.BeginText();
...
cb.EndText();
Run Code Online (Sandbox Code Playgroud)
此外:ISO-32000-1 告诉您在文本块内禁止某些操作。
这是错误的:
cb.BeginText();
...
cb.AddImage(img);
...
cb.EndText();
Run Code Online (Sandbox Code Playgroud)
这是对的:
cb.BeginText();
...
cb.EndText();
...
cb.AddImage(img);
Run Code Online (Sandbox Code Playgroud)
最后,在创建文本块时,一些运算符是必需的。例如:你总是需要setFontAndSize()(我不知道你在做什么writeText(),但我假设你正确设置了字体)。
无论如何:您选择在最低级别使用 iTextSharp,几乎手动编写 PDF 语法。这假设您对 ISO-32000-1 了如指掌。如果不这样做,您应该使用一些高级对象,例如ColumnText将内容放置在绝对位置。
| 归档时间: |
|
| 查看次数: |
2017 次 |
| 最近记录: |