在我的 pdf 中,我需要有多个页眉和页脚。在页眉中,我希望标题在左侧,一些文本在中间。
同样在页脚中,我需要在左侧打印我的公司名称,在中间打印页码,并在右侧打印有关我表格中内容的一些信息。
我看过很多帖子,但我没有得到创建这个的正确想法。有人请帮我一些示例代码片段。谢谢
应使用“页面事件”添加页眉和页脚。如果您需要一些示例,只需在官方网站上查找关键字页眉/页脚即可。
只需创建一个扩展PdfPageEventHelper
并实现该onEndPage()
方法的类。阅读文档的人不会犯使用该onStartPage()
方法的常见错误,但也许您忽略了这一点,因此我将其添加为额外的警告。
使用该方法将您的类的实例添加到 PdfWriter 对象setPageEvent()
。
我不知道我是否理解您所说的“多个”标题是什么意思。如果您有多个页面事件实现,您可以使用该setPageEvent()
方法将它们全部添加,它们都会被执行。如果要从一个页面事件实现切换到另一个,则需要先使用setPageEvent(null)
。
也许您希望不同页面的标题不同,只需在页面事件实现中使用成员变量并在此过程中更改它。在名为MovieHistory2的书中示例之一中,标题的文本存储在String
名为 的数组中header
。
页眉的位置取决于页码:
public void onEndPage(PdfWriter writer, Document document) {
Rectangle rect = writer.getBoxSize("art");
switch(writer.getPageNumber() % 2) {
case 0:
ColumnText.showTextAligned(writer.getDirectContent(),
Element.ALIGN_RIGHT, header[0],
rect.getRight(), rect.getTop(), 0);
break;
case 1:
ColumnText.showTextAligned(writer.getDirectContent(),
Element.ALIGN_LEFT, header[1],
rect.getLeft(), rect.getTop(), 0);
break;
}
ColumnText.showTextAligned(writer.getDirectContent(),
Element.ALIGN_CENTER, new Phrase(String.format("page %d", pagenumber)),
(rect.getLeft() + rect.getRight()) / 2, rect.getBottom() - 18, 0);
}
对于偶数页码,页眉添加到右侧;对于左侧的奇数页码。如您所见,页脚居中。
您还提到了一个标题表。如果您想使用表格,请查看MovieCountries1示例。
你说:“我看过这么多帖子,但我没有找到创建这个的正确想法。” 通过阅读文档,您将获得正确的想法,更具体地说是“iText in Action — Second Edition”一书的第 5 章,我所指的代码片段取自其中。