Chr*_*ers 7 pdf pdf-generation bookmarks itext tagged-pdf
我想编写一些带有PDF文档的(java)代码,并从所有书签创建命名目标.我认为iText API是最简单的方法,但我之前从未使用过API.
您将如何使用iText API编写此类代码?iText可以自己进行操作现有PDF所需的解析吗?我正在考虑的那种操作是:
或者是否有更好的API?
跟进:我几个月前向iText提交了一个补丁(现已被接受并且是HEAD的一部分),它为iText添加了文本解析功能.PdfBox(下面提到)在阅读使用外部参照流而不是旧的外部参照表格式的较新PDF时遇到了问题.
另一个库是在分析现有的PDF文件非常好的是PDFBOX 它也可以用于修改现有的PDF.仅供参考 - 这是Lucene使用的文本解析器.
我还要提到iText 确实能够解析PDF文件,它在解析每个页面上的文本内容时并不是很好.如果您正在寻找用于存储书签等的PDF更高级别的构造(字典等)...而且您不介意在阅读PDF规范时让您的手有点脏,您可以绝对做你要问的事情(我们自己做了很多).
该PDF规格大,但可读的大部分,你不必担心散装的它(这是对实际网页内容和渲染面向)如果你正在尝试做的是提取书签.
我只是预先警告您,您可能对此感到失望。iText 并不是真正打算用作解析器。它实际上更适合创建全新的PDF 文档,但您可以尝试一下。
首先,使用 iText,您将无法修改现有的 PDF 文档。不过,您可以做的是制作包含所需附加功能的副本。(如果其他人更了解,请告诉我,这让我发疯。)
您需要做的是从源文件的输入流创建一个 PdfReader 对象。然后为您的目标创建一个 PdfCopy 对象(它只是一个扩展的 PdfWriter,可以更方便地从现有源获取数据)。
据我所知,根本无法从 iText 获取书签。可能需要另一个库。我认为jpedal可能有能力提取它们(它可以将它们作为 XML 文档获取,然后您可能必须解析该文档才能获得您想要的内容。)无论您获取它们,您都可以将它们添加到 java.util 中。列出,并将该列表设置为 PDFCopy 上的大纲。书签本身只是带有一组特定键的 HashMap。我不确定所有的值是什么,但它们包括“标题”、“操作”(这似乎是您指定这是一个命名目的地的地方,尽管我不知道该值是什么)和“URI”(如果这是外部链接则使用 - 我怀疑这将指定您要链接到的指定目的地的名称)。同样,具体细节很难找到。
然后遍历阅读器的页面,将每个页面导入到 PdfCopy。 此页面可能对您有帮助。
抱歉我没能为你提供更多帮助。祝你好运。
PS 如果其他人知道有 (L)GPL 或 BSD 许可的更好工具,我很想听听。