【问题标题】:itext pdf headeritext pdf标题
【发布时间】:2011-02-21 13:13:35
【问题描述】:

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

【问题讨论】:

    标签: java pdf-generation itext


    【解决方案1】:

    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,这将无法正常工作。为此,您将不得不做一些迂回的骇客。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-12
      • 2017-12-17
      • 1970-01-01
      • 2018-09-15
      相关资源
      最近更新 更多