java - itext pdf 标题

标签 java pdf-generation itext

我正在使用 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/

相关文章:

java - 如何重命名jtree中的节点

java - 如何使用 Java 8 lambda 将对象添加到另一个列表内的列表中

pdf - 当我使用 itext 调用 BaseFont.createFont() 时,如何知道正确的编码?

java - 如何在从 ITextRenderer 和 Thymeleaf HTML 模板生成的 PDF 文件中显示 Unicode(十六进制)字符

java - 从父构造函数调用参数

java - 自定义按钮尺寸不正确?

c# - 在 C# 中从 XML XSLT 创建 PDF 的最佳方式

python - 在 PDF 文档中查找可输入表单字段的字段名称?

c# - 如何在 ASP.NET MVC 中应用脚本和样式后从 HTML View 生成 PDF

java - iText 删除签名(扁平化过程)但保留其视觉表示