首页 文章

itext pdf header

提问于
浏览
1

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

1 回答

  • 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 格式,这将无法正常工作。为此,你将不得不做一些 round-about 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());
    }
    

相关问题