如何将文本添加为页眉或页脚?
How to add text as a header or footer?
我正在使用 iText 5 创建一个 pdf 文件并想添加一个页脚。我做了第 14 章 "iText in action" 书中所说的一切。
没有错误,但没有显示页脚。
有人可以告诉我我做错了什么吗?
我的代码:
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;
}
}
您报告的问题无法重现。我以你的例子为例,我用这个事件创建了 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()
方法为您提供页面顶部,因此您可能打算计算相对于页面 bottom()
的 y
位置。
您的 footer()
方法也有错误:
private Phrase footer() {
Font ffont = new Font(Font.FontFamily.UNDEFINED, 5, Font.ITALIC);
Phrase p = new Phrase("this is a footer");
return p;
}
您定义了一个名为 ffont
的 Font
,但您没有使用它。我想你是想写:
private Phrase footer() {
Font ffont = new Font(Font.FontFamily.UNDEFINED, 5, Font.ITALIC);
Phrase p = new Phrase("this is a footer", ffont);
return p;
}
现在当我们查看 resulting PDF 时,我们清楚地看到作为页眉和页脚添加到每个页面的文本。
通过使用 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);
我正在使用 iText 5 创建一个 pdf 文件并想添加一个页脚。我做了第 14 章 "iText in action" 书中所说的一切。
没有错误,但没有显示页脚。 有人可以告诉我我做错了什么吗?
我的代码:
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;
}
}
您报告的问题无法重现。我以你的例子为例,我用这个事件创建了 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()
方法为您提供页面顶部,因此您可能打算计算相对于页面 bottom()
的 y
位置。
您的 footer()
方法也有错误:
private Phrase footer() {
Font ffont = new Font(Font.FontFamily.UNDEFINED, 5, Font.ITALIC);
Phrase p = new Phrase("this is a footer");
return p;
}
您定义了一个名为 ffont
的 Font
,但您没有使用它。我想你是想写:
private Phrase footer() {
Font ffont = new Font(Font.FontFamily.UNDEFINED, 5, Font.ITALIC);
Phrase p = new Phrase("this is a footer", ffont);
return p;
}
现在当我们查看 resulting PDF 时,我们清楚地看到作为页眉和页脚添加到每个页面的文本。
通过使用 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);