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

使用iText API为PDF文件中的所有书签创建目标,pdf,pdf-generation,itext,bookmarks,tagged-pdf,Pdf,Pdf Generation,Itext,Bookmarks,Tagged Pdf,我想编写一些(java)代码,以获取PDF文档,并从所有书签中创建命名目的地。我认为iTextAPI是实现这一点的最简单方法,但我以前从未使用过该API 您将如何使用iTextAPI编写此类代码?iText是否可以自行执行操作现有PDF所需的解析?我想到的操纵方式有: 开放 查找书签 创建目的地 保存 接近 还是有其他更好的API?我会提前警告您,您可能会对此感到失望。iText实际上并不打算用作解析器。它实际上更多的是用于创建全新的PDF文档,但您可以尝试一下 首先,使用iText,您将无

我想编写一些(java)代码,以获取PDF文档,并从所有书签中创建命名目的地。我认为iTextAPI是实现这一点的最简单方法,但我以前从未使用过该API

您将如何使用iTextAPI编写此类代码?iText是否可以自行执行操作现有PDF所需的解析?我想到的操纵方式有:

  • 开放
  • 查找书签
  • 创建目的地
  • 保存
  • 接近

还是有其他更好的API?

我会提前警告您,您可能会对此感到失望。iText实际上并不打算用作解析器。它实际上更多的是用于创建全新的PDF文档,但您可以尝试一下

首先,使用iText,您将无法修改现有的PDF文档。不过,您可以做的是制作一个具有所需附加功能的副本。(如果有人知道得更清楚,请告诉我,这让我发疯。)

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

据我所知,这些书签根本无法从iText获得。可能需要另一个图书馆。我认为您可能有能力提取它们(它可以将它们作为XML文档获取,然后您可能需要对其进行解析以获取所需内容)。但是,您可以将它们添加到java.util.List中,并将该列表设置为PDFCopy上的大纲。书签本身只是带有一组特定键的哈希映射。我不确定所有的值都是什么,但它们包括“Title”、“Action”(您可能会在其中指定这是一个命名目的地,尽管我不知道该值是什么),以及“URI”(如果这是一个外部链接,则使用该值——我怀疑这将指定您链接到的命名目的地的名称)。同样,细节很难找到

然后迭代读卡器的页面,将每个页面导入PdfCopy。我可以帮你

对不起,我帮不了你什么忙。祝你好运


另外,如果有人知道一个更好的工具是(L)GPL或BSD许可的,我很乐意听到它。

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


另一个非常擅长解析现有PDF文件的库是,它还可以用于修改现有PDF文件。仅供参考-这是Lucene使用的文本解析器

我还将提到,iText确实能够解析PDF文件,但它不擅长解析每个页面上的文本内容。如果您想访问用于存储书签等的PDF高级结构(字典等)。。。你不介意阅读PDF规范时弄脏你的手,你完全可以做你想做的事情(我们自己做了很多)


这本书虽然很大,但大部分内容都是可读的,如果你只想提取书签的话,你不必担心它的大部分内容(这是为了实际的页面内容和呈现)。

谢谢,这就足够让我继续前进了。