我正在使用iText 5.0.5创建一个pdf输出 我正在从数据库中以字节的形式读取数据,然后使用HTMLWorker将其添加到文档中以生成pdf BUt我无法在该pdf文档的每个paage上添加标题 请帮忙。
答案 0 :(得分:2)
1)最新的iText是5.0.6。
2)要创建页眉和页脚,您需要使用PdfPageEvent
界面。这通常是从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格式。为此,你将不得不做一些关于hackery的事。
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());
}