我正在使用iText 5创建一个pdf,并希望添加一个页脚。我做了所有的事情,比如书" iText in action"在第14章说。
没有错误,但页脚没有出现。 有人可以告诉我我做错了吗?
我的代码:
public class PdfBuilder {
private Document document;
public void newDocument(String file) {
document = new Document(PageSize.A4);
writer = PdfWriter.getInstance(document, new FileOutputStream(file));
MyFooter footerEvent = new MyFooter();
writer.setPageEvent(footerEvent);
document.open();
...
document.close();
writer.flush();
writer.close();
}
class MyFooter extends PdfPageEventHelper {
public void onEndPage(PdfWriter writer, Document document) {
PdfContentByte cb = writer.getDirectContent();
ColumnText.showTextAligned(cb, Element.ALIGN_CENTER, footer(), (document.right() - document.left()) / 2
+ document.leftMargin(), document.top() + 10, 0);
}
private Phrase footer() {
Font ffont = new Font(Font.FontFamily.UNDEFINED, 5, Font.ITALIC);
Phrase p = new Phrase("this is a footer");
return p;
}
}
答案 0 :(得分:1)
您报告的问题无法复制。我已经采用了您的示例,并使用此事件创建了TextFooter示例:
class MyFooter extends PdfPageEventHelper {
Font ffont = new Font(Font.FontFamily.UNDEFINED, 5, Font.ITALIC);
public void onEndPage(PdfWriter writer, Document document) {
PdfContentByte cb = writer.getDirectContent();
Phrase header = new Phrase("this is a header", ffont);
Phrase footer = new Phrase("this is a footer", ffont);
ColumnText.showTextAligned(cb, Element.ALIGN_CENTER,
header,
(document.right() - document.left()) / 2 + document.leftMargin(),
document.top() + 10, 0);
ColumnText.showTextAligned(cb, Element.ALIGN_CENTER,
footer,
(document.right() - document.left()) / 2 + document.leftMargin(),
document.bottom() - 10, 0);
}
}
请注意,我仅通过创建Font
和Paragraph
实例一次来提高性能。我还介绍了一个页脚和标题。您声称要添加页脚,但实际上您添加了标题。
top()
方法为您提供页面顶部,因此您可能需要计算相对于页面y
的{{1}}位置。
您的bottom()
方法中也存在错误:
footer()
您定义名为private Phrase footer() {
Font ffont = new Font(Font.FontFamily.UNDEFINED, 5, Font.ITALIC);
Phrase p = new Phrase("this is a footer");
return p;
}
的{{1}},但您不使用它。我想你打算写:
Font
现在,当我们查看resulting PDF时,我们会清楚地看到作为页眉和页脚添加到每个页面的文本。
答案 1 :(得分:0)
使用PdfContentByte的showTextAligned方法我们可以在页面中添加页脚。我们不应该将短语内容作为字符串传递给showTextAligned方法作为参数之一。如果要在将其传递给方法之前格式化页脚内容。下面是示例代码。
PdfContentByte cb = writer.getDirectContent();
cb.showTextAligned(Element.ALIGN_CENTER, "this is a footer", (document.right() - document.left()) / 2 + document.leftMargin(), document.bottom() - 10, 0);