如何使用PageEvent将图像添加到页眉

时间:2014-05-06 19:35:19

标签: itext

我找不到如何将图像添加到每个页面的标题的示例。

在第二版的第二版中,我发现了这个:

  

如果您的水印是图片,您可以选择:您可以使用PdfContent-添加它   Byte.addImage()方法,或者你可以将它包装在ColumnText对象中,或者你可以把它   在桌子的一个单元格内。

所以我试过了:

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.IllegalPdfSyntaxException:不平衡的开始/结束文本运算符。

有人可以给我一个如何实现这个目标的简单例子吗?

P.S。我的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());
}

1 个答案:

答案 0 :(得分:1)

您的代码段中有一些问题。在您的代码段之外可能有更多错误。

在您的代码段中:您将saveState() / restoreState()beginText() / endText()嵌套。将其更改为:

cb.saveState();
...
cb.beginText();
...
cb.endText();
...
cb.restoreState();

您正在创建一个文本对象(使用beginText() / endText()),但您在此文本对象中使用了非法运算符。如果不使用setFontAndSize(),文本对象也无效,并且:您没有在文本块中添加任何文本(Form XObject不计算,因为它可能有自己的文本块)

addTemplate()方法中的坐标错误:cb.addTemplate(total, document.right()/2, document.top() + 8);

  • document.right() / 2仅在document.left()等于0时才正确。
  • document.top() + 8在页面的可见区域之外添加内容(document.top() - 8会更好)。

您使用addImage()添加图片,但我们不知道您是否为该图片定义了坐标。

你引用我写的那本书,但作为那本书的作者,我觉得你没有读过我写的东西。