PDF itext TOC 生成

发布于 2024-11-01 04:02:37 字数 182 浏览 6 评论 0原文

我必须将多个 PDF 文档合并为一个 PDF 文档。除此之外,我还必须生成目录。原始文档将包含具有特定样式的文本(例如 H1)。此特殊文本成为目录的一部分。

曾使用 iText 合并多个 PDF 文件。我无法找到示例/API 解析文档以查找具有样式 H1 的所有内容。 生成 TOC 是下一个挑战。

I have to merge multiple PDF documents into a single PDF document. Besides this, I have to generate TOC. The original documents will contain text with a specific style (say H1). This special text becomes part of TOC.

Have used iText for merging multiple PDF files. I am unable to find example/API on parsing the document to find all the contents having style H1.
Generating TOC is next challenge.

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

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

发布评论

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

评论(1

初雪 2024-11-08 04:02:37

你不知道。 PDF 没有样式。它们具有“当前图形状态”,其中包括:

  • 当前变换矩阵(CTM)。
  • 中风与填充颜​​色
  • 剪切路径
  • 字体和 其他文本状态内容的大小
  • (字符间距、字间距、行距、文本渲染模式...)
    • 包括与 CTM 结合的单独文本转换矩阵。

所以首先你必须跟踪所有这些东西(iText 主要可以为你做)。然后,您必须确定“H1”文本有多大,并锁定该尺寸屏幕尺寸中的所有文本,同时考虑 CTM、文本矩阵和字体大小(iText 会再次为您做这件事,IIRC) )。

为了让像您这样的人的生活更加精彩,您正在查看的文本完全有可能根本不是文本。它可能是路径,也可能是位图……此时您需要 OCR,而且我认为您不会通过 OCR 获得太多大小信息。

您需要编写一个 TextRenderListener 来确定给定文本片段的最终大小(以及它是否是最后一段文本的一部分)并过滤掉所有太小的内容。然后,您将根据找到的文本构建目录。

You don't. PDFs don't have styles. They have "current Graphic State", which includes:

  • current transformation matrix (CTM).
  • stroke & fill colors
  • clipping path
  • font & size
  • gobs of other text state stuff (char spacing, word spacing, leading, text render mode...)
    • Including a separate text transformation matrix which is combined with the CTM.

So first you have to track all this stuff (which iText can mostly do for you). Then you have to determine how big "H1" text is, and latch on to all the text that is in that size screen size, taking the CTM, text matrix, and font size into account (which iText will do for you again, IIRC).

And just to make life more exciting for folks like yourself, it's entirely possible that the text you're looking at isn't text at all. It could be paths, or a bitmap... at which point you need OCR, and I don't think you'll get much in the way of size info with OCR.

You'll need to write a TextRenderListener that determines the final size of a given piece of text (and whether or not its a part of the last piece) and filter out all the stuff that's too small. You'll then build your TOC based on the text you find.

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