繁体   English   中英

标头在使用itext创建的pdf文档的首页上不可见

[英]header is not visible on first page of pdf document created with itext

我正在尝试在报表的每一页中添加页眉尾页脚,但在第一页上没有页眉。 我正在覆盖PdfPageEventHelper的onStartPage和onEndPage方法。 我的代码:

public class HeaderFooterPageEvent extends PdfPageEventHelper {

public void onStartPage(PdfWriter writer, Document document) {
    Image leftUpper = Image.getInstance("leftUpper.png");
    leftUpper.setAbsolutePosition(0, 0);
    Chunk chunk = new Chunk(leftUpper, 0, -45);
    HeaderFooter header = new HeaderFooter(new Phrase(chunk), false);
    header.setBorder(Rectangle.NO_BORDER);
    document.setHeader(header);
}

public void onEndPage(PdfWriter writer, Document document) {
    Image img = Image.getInstance("reportFooter.png");
    img.setAbsolutePosition(0, 0);
    img.scaleAbsolute(595, 50)
    writer.getDirectContent().addImage(img);
}

}

页脚工作正常,但首页缺少页眉。 我究竟做错了什么?

您的代码真的很奇怪。 您正在将过时的HeaderFooter功能(很早以前已从iText中删除)与较新的页面事件功能混合在一起。

如果要使用过时的HeaderFooter类,则不应引入页面事件。 在这种情况下,您的错误是您没有在document.open()之前设置标头。 请注意,如果您选择此选项,则不应在商业环境中使用您的应用程序,因为您正在使用的iText版本不适合商业用途,如StackExchange的开源Beta中所述。

如果要使用页面事件(建议这样做),则违反了以下基本规则之一:不要在onStartPage()方法中添加任何内容。 所有这些都在免费电子书《 StackOverflow的最佳iText问题》中进行了说明 ,您可以其中找到问题的参考(以及相应的答案),例如:

您的onStartPage()方法包含几个错误。 请丢弃该代码,并改编您的onEndPage()方法:

public void onEndPage(PdfWriter writer, Document document) {
    Image img = Image.getInstance("reportFooter.png");
    img.setAbsolutePosition(0, 0);
    img.scaleAbsolute(595, 50)
    writer.getDirectContent().addImage(img);
}

您的onEndPage()方法会在页面底部添加一个图像:该图像用作页脚。 如果您还想添加标题,则需要像下面这样修改该方法:

public void onEndPage(PdfWriter writer, Document document) {
    Image header = Image.getInstance("reportHeader.png");
    header.setAbsolutePosition(792, 0);
    header.scaleAbsolute(595, 50)
    writer.getDirectContent().addImage(header);
    Image footer = Image.getInstance("reportFooter.png");
    footer.setAbsolutePosition(0, 0);
    footer.scaleAbsolute(595, 50)
    writer.getDirectContent().addImage(footer);
}

在此代码段中,我假设页面大小为A4:842 x 595个用户单位,并且有50个用户单位的边距,因为我将页眉和页脚的尺寸定义为595 x 50个用户单位。 我在y = 0处添加了页脚,在y = 792 (即842 - 50 )处添加了页眉。 如果您为文档定义的边距小于50,则内容和页眉或页脚将重叠。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM