itext pdf 标题

发布于 2024-10-18 04:22:34 字数 130 浏览 2 评论 0原文

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

i am creating one pdf output using iText 5.0.5.
I am reading the data in the form of bytes from database and then adding it to the document using HTMLWorker to generate pdf.
BUt i am not able to add header on each paage for that pdf document.
please help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心作怪 2024-10-25 04:22:34

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

如果您的 header & 则效果不太好。页脚是 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());
}

1) The latest iText is 5.0.6.

2) To create a page header and footer, you need to use the PdfPageEvent interface. This is generally done by deriving from PdfPageEventHelper, and overriding just the methods you need.

In the PdfPageEvent, you must draw to the PDF using a PdfContentByte. The good news is that you can use a ColumnText to add aligned text into a given bounding box, and it'll handle line breaks for you.

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

This won't work so well if your header & footer are in HTML. For that you'll have to do some round-about hackery.

1) Create a new Document/PdfWriter with page margins matching the size (height & width) of your header.
2) Render all the header HTML into that page.
3) save the pdf.
4) Import that PDF page into your other document, and draw it thusly:

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());
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文