使用iText API为PDF文件中的所有书签创建目的地

Chr*_*ers 7 pdf pdf-generation bookmarks itext tagged-pdf

我想编写一些带有PDF文档的(java)代码,并从所有书签创建命名目标.我认为iText API是最简单的方法,但我之前从未使用过API.

您将如何使用iText API编写此类代码?iText可以自己进行操作现有PDF所需的解析吗?我正在考虑的那种操作是:

  • 打开,
  • 查找书签,
  • 创建目的地,
  • 保存,
  • 关.

或者是否有更好的API?

Kev*_*Day 5

跟进:我几个月前向iText提交了一个补丁(现已被接受并且是HEAD的一部分),它为iText添加了文本解析功能.PdfBox(下面提到)在阅读使用外部参照流而不是旧的外部参照表格式的较新PDF时遇到了问题.


另一个库在分析现有的PDF文件非常好的是PDFBOX 它也可以用于修改现有的PDF.仅供参考 - 这是Lucene使用的文本解析器.

我还要提到iText 确实能够解析PDF文件,它在解析每个页面上的文本内容时并不是很好.如果您正在寻找用于存储书签等的PDF更高级别的构造(字典等)...而且您不介意在阅读PDF规范时让您的手有点脏,您可以绝对做你要问的事情(我们自己做了很多).

PDF规格大,但可读的大部分,你不必担心散装的它(这是对实际网页内容和渲染面向)如果你正在尝试做的是提取书签.


Ian*_*ird 3

我只是预先警告您,您可能对此感到失望。iText 并不是真正打算用作解析器。它实际上更适合创建全新的PDF 文档,但您可以尝试一下。

首先,使用 iText,您将无法修改现有的 PDF 文档。不过,您可以做的是制作包含所需附加功能的副本。(如果其他人更了解,告诉我,这让我发疯。)

您需要做的是从源文件的输入流创建一个 PdfReader 对象。然后为您的目标创建一个 PdfCopy 对象(它只是一个扩展的 PdfWriter,可以更方便地从现有源获取数据)。

据我所知,根本无法从 iText 获取书签。可能需要另一个库。我认为jpedal可能有能力提取它们(它可以将它们作为 XML 文档获取,然后您可能必须解析该文档才能获得您想要的内容。)无论您获取它们,您都可以将它们添加到 java.util 中。列出,并将该列表设置为 PDFCopy 上的大纲。书签本身只是带有一组特定键的 HashMap。我不确定所有的值是什么,但它们包括“标题”、“操作”(这似乎是您指定这是一个命名目的地的地方,尽管我不知道该值是什么)和“URI”(如果这是外部链接则使用 - 我怀疑这将指定您要链接到的指定目的地的名称)。同样,具体细节很难找到。

然后遍历阅读器的页面,将每个页面导入到 PdfCopy。 此页面可能对您有帮助。

抱歉我没能为你提供更多帮助。祝你好运。

PS 如果其他人知道有 (L)GPL 或 BSD 许可的更好工具,我很想听听。