我正在使用 iText 5.0.5 创建一个 pdf 输出。
我正在从数据库中以字节形式读取数据,然后使用 HTMLWorker 将其添加到文档中以生成 pdf。
但我无法在该 pdf 文档的每个页面上添加页眉。
请帮忙。
最佳答案
1) 最新的iText是5.0.6。
2) 要创建页眉和页脚,您需要使用 PdfPageEvent
接口(interface)。这通常是通过从 PdfPageEventHelper
派生来完成的,并仅覆盖您需要的方法。
在 PdfPageEvent
中,您必须使用 PdfContentByte
绘制到 PDF。好消息是,您可以使用 ColumnText
将对齐文本添加到给定的边界框中,并且它会为您处理换行符。
public class HeaderFooterPageEvent extends PdfPageEventHelper {
private String headerStr, footerStr;
private Rectangle hBox, fBox;
public HeaderFooterPageEvent(String hStr, Rectangle _hBox, String fString, Rectangle _fBox) {
headerStr = hStr;
hBox = _hBox;
footerStr = fStr;
fBox = _fBox;
}
public onEndPage(PdfWriter writer, Document doc) {
// draw the header text.
ColumnText.showTextAligned(writer.getDirectContent(),
Element.ALIGN_RIGHT, headerStr, hBox.getRight(), hBox.getTop, 0);
// draw the footer text.
ColumnText.showTextAligned(writer.getDirectContent(),
Element.ALIGN_RIGHT, footerStr, fBox.getRight(), fBox.getTop, 0);
}
}
如果您的页眉和页脚采用 HTML 格式,则此方法效果不佳。为此,您必须进行一些迂回的黑客攻击。
1) 创建一个新的 Document/PdfWriter,其页边距与页眉的大小(高度和宽度)相匹配。
2) 将所有标题 HTML 渲染到该页面中。
3)保存pdf。
4) 将该 PDF 页面导入到您的其他文档中,并如下绘制:
public onEndPage(PdfWriter writer, Document doc) {
PdfReader reader = new PdfReader(headerPDFPath);
PdfImportedPage headerPageImport = writer.getImportedPage(reader, 1); // 1 -> first page
PdfContentByte cb = writer.getDirectContent();
cb.addTemplate(headerPageImport, hBox.bottom(), hBox.left());
}
关于java - itext pdf 标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5066372/