我是 ItextSharp 的新手,只是想知道如何在页面结束事件后将页眉和页脚放在边距之外?似乎当我使用 onendpage 事件而不是在页边距之外添加页脚时,它会在页边距内部添加,并且当它超过应该添加到页边距之外的底部边距时,它总是会产生 stackoverflow 异常?
是否有任何设置可以告诉在边距之外的文档页脚中添加文本(或者它是填充)?
提前致谢。
我是 ItextSharp 的新手,只是想知道如何在页面结束事件后将页眉和页脚放在边距之外?似乎当我使用 onendpage 事件而不是在页边距之外添加页脚时,它会在页边距内部添加,并且当它超过应该添加到页边距之外的底部边距时,它总是会产生 stackoverflow 异常?
是否有任何设置可以告诉在边距之外的文档页脚中添加文本(或者它是填充)?
提前致谢。
找到它,我只使用 columntext,虽然我真的不喜欢使用 columntext :) 并使用 setsimplecolumn。
由于您是 iText 的新手...当您正在寻找有关某些特定主题的示例时,您应该首先查看来自iText in Action - 2nd Edition的示例的关键字列表。在您的情况下,关键字页眉/页脚是合适的。此处引用的第一个示例part1.chapter05.MovieHistory2已经向您展示了如何添加页眉和页脚。
首先,正如您已经提到自己的那样,您应该使用页面事件,onEndPage
确切地说,最容易通过扩展来完成PdfPageEventHelper.
此外,根据您似乎不知道的问题,您不应通过调用或类似的方式添加页眉或页脚,document.add
因为此类添加会进入现在已经完成的主页区域(onEndPage
毕竟我们在.. .)。相反,您应该使用直接内容访问来定位页眉和页脚。
该示例是这样的:
/**
* Adds the header and the footer.
* @see com.itextpdf.text.pdf.PdfPageEventHelper#onEndPage(
* com.itextpdf.text.pdf.PdfWriter, com.itextpdf.text.Document)
*/
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);
}
ColumnText.showTextAligned
允许您将页眉、页脚等准确定位在页面上所需的位置,通常在顶部和底部边距之外,而不会导致生成任何新页面或任何其他不需要的效果。