[英]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.