我正在使用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()
方法使您位于页面顶部,因此也许您打算计算y
相对于页面顶部的位置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;
}
您定义了一个Font
named ffont
,但是您不使用它。我想你打算写:
private Phrase footer() {
Font ffont = new Font(Font.FontFamily.UNDEFINED, 5, Font.ITALIC);
Phrase p = new Phrase("this is a footer", ffont);
return p;
}
现在,当我们查看生成的PDF时,我们清楚地看到了作为每个页面的页眉和页脚添加的文本。
问题内容: 我在将新的简单XWPFTable添加到XWPFHeader(或Footer)时遇到了严重的麻烦。不幸的是,似乎只有一个人遇到相同的问题(https://bz.apache.org/bugzilla/show_bug.cgi?id=57366#c0)。 有谁有办法实现这一目标? 任何帮助将不胜感激! 亲切的问候… 〜丹尼尔 问题答案: 这可以使用公共XWPFTable insertNew
亲切的问候... ~丹尼尔
问题内容: 如何使用itext从html源向pdf添加标头? 当前,我们扩展了PdfPageEventHelper并覆盖了这些方法。工作正常,但是当我进入2个以上页面时,它将引发RuntimeWorkerException。 问题答案: 通常, 禁止 在事件中添加内容。这是 禁止 添加内容到的对象。您应该使用而 不是 文档在方法中添加页眉和页脚。此外:通过一遍又一遍地解析HTML,您正在浪费大量C
问题内容: 我花了一点时间试图找出一种将标头添加到的方法,但未成功。 这是我到目前为止所得到的: 在似乎是处理的配置对象的项目。由于找不到任何方法,因此决定使用方法,并将标头视图添加到第一个位置以用作标头。 Aaand这就是事情变得更糟的地方: 在尝试创建的不同时刻调用了几次之后(还尝试在设置所有内容(甚至是适配器的数据)后添加视图),我意识到我不知道这是否是正确的方法(并且它看起来不是)。 PS
我花了一点时间试图找到一种方法来向添加一个标头,但没有成功。 这是我目前得到的: 似乎是处理项的对象。由于我找不到任何方法,所以我决定使用的方法,并在第一个位置添加header视图以充当header。 这就是事情变得更丑陋的地方: 在创建活动的不同时刻,尝试调用的几次(也尝试在设置好所有内容后添加视图,甚至适配器的数据)之后,我意识到我不知道这是否是正确的方法(而且看起来并不正确)。 PS:另外,
我当前正试图添加一个链接到pdf文档的页脚页眉,但是库给出了以下错误System.IndexoutOfrangeException:“请求的页码0已超出范围。”当使用IText7库将链接添加到标头时。 我在IText7中找不到任何关于这个问题的在线代码示例,ITextSharp中的解决方案不再适用。 我的问题是我如何添加一个链接到一个外部网站到PDF的标题?当前的行为是库中的bug还是有意的? 包