itext pdf header

时间:2011-02-21 13:13:36

标签: java pdf-generation itext

我正在使用iText 5.0.5创建一个pdf输出 我正在从数据库中以字节的形式读取数据,然后使用HTMLWorker将其添加到文档中以生成pdf BUt我无法在该pdf文档的每个paage上添加标题 请帮忙。

1 个答案:

答案 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());
}