Itext 如何使用PageEvent将图像添加到页眉
我找不到一个如何将图像添加到每页页眉的示例 在itext In action第二版中,我发现: 如果水印是图像,则可以选择:可以将其与PdfContent一起添加- 方法,或者可以将其包装在ColumnText对象中,或者可以将其 在桌子的一个单元格内 所以我试着:Itext 如何使用PageEvent将图像添加到页眉,itext,Itext,我找不到一个如何将图像添加到每页页眉的示例 在itext In action第二版中,我发现: 如果水印是图像,则可以选择:可以将其与PdfContent一起添加- 方法,或者可以将其包装在ColumnText对象中,或者可以将其 在桌子的一个单元格内 所以我试着: public void onEndPage(PdfWriter writer, Document document) { try { PdfContentByte cb = writer.getDirectC
public void onEndPage(PdfWriter writer, Document document) {
try {
PdfContentByte cb = writer.getDirectContent();
cb.saveState();
cb.beginText();
cb.addImage(image);
cb.addTemplate(total, document.right()/2, document.top() + 8);
cb.restoreState();
cb.endText();
} catch (DocumentException ex) {
Logger.getLogger(ImageHeader.class.getName()).log(Level.SEVERE, null, ex);
}
}
但我得到了:
com.itextpdf.text.DocumentException:com.itextpdf.text.exceptions.illegalpdfsyntaxeexception:begin/end文本运算符不平衡
有人能给我举个简单的例子说明如何做到这一点吗
另外,我的itext版本是5.4,所以我不能使用HeaderFooter对象
编辑:
我无法通过PDFContentByte.addImage()实现我想要的,但我使用了一个表:
public void onEndPage(PdfWriter writer, Document document) {
PdfPTable table = new PdfPTable(1);
table.setTotalWidth(150f);
table.setLockedWidth(true);
table.addCell(new Celula.Builder(image).borda(0).build());
table.writeSelectedRows(0, -1, (document.right() + document.rightMargin()) / 2 - logo.getScaledWidth(), document.top() + 70f, writer.getDirectContent());
}
代码片段中有几处错误。在代码片段之外,可能还有更多错误 在您的代码片段中:将
saveState()
/restoreState()
与beginText()
/endText()
嵌套。将此更改为:
cb.saveState();
...
cb.beginText();
...
cb.endText();
...
cb.restoreState();
您正在创建一个文本对象(使用beginText()
/endText()
),但在此文本对象内使用非法运算符。如果不使用setFontAndSize()
,文本对象无效,并且:未在文本块中添加任何文本(表单XObject不计算在内,因为它可能有自己的文本块)
addTemplate()
方法中的坐标错误:cb.addTemplate(总计,document.right()/2,document.top()+8)代码>
document.right()/2
仅当document.left()
等于0时才正确
document.top()+8
将内容添加到页面可见区域之外(document.top()-8
更好)
您使用addImage()
添加图像,但我们不知道您是否为该图像定义了坐标
你引用了我写的那本书,但作为那本书的作者,我觉得你没有读我写的东西。如果你去掉了所有的cb.
东西,除了addImage()
和addTemplate()
?您没有执行文本操作,也没有修改堆栈,因此不需要执行这些操作。如果删除这些行,我仍然会收到相同的错误。谢谢Bruno。你说得对,虽然我在一两年前读了整本书,但我需要再读几章。我只是想我可以做到这一点,只阅读与页面事件相关的部分。再次阅读后,我发现了一些与模板大小和文档边距有关的错误。即使在那之后,我也无法通过PDFContentByte将图像添加到标题中。幸运的是,正如我在原帖中编辑的那样,我通过你书中引用的其他方法之一,成功地完成了我所需要的。