0

我有一个项目,我需要拆分非常大的 PDF 文件,每个文件包含 150 到 20 万页。我目前正在使用 iTextSharp DLL 来拆分一些具有可由 Adob​​e Reader 创建的“标准”书签的 PDF。我还使用 PDFsharp 从没有这些“标准”书签的 PDF 中提取文本,然后我将它们从数据库中解析为关键字并将它们拆分为更小的 PDF。然而,与第一种方法相反,这非常慢。


但是,没有“标准”书签的 PDF 有索引/书签。问题是这些是由 SOLindexer 创建的(链接到产品页面)。我能够在内部 COS 树中找到这些索引/书签。PDF 内部结构中到我想要到达的位置的路径是“trailer/Info/SSEDictionary/Document_MemberStatements”。在这个目录中(如果可以这样称呼的话)我可以点击 -DATA- 并打开一个记事本文件,其中包含我需要的所有帐号、姓名和东西(当然格式很奇怪,但可读),我相信这些是我可以放入字典的值。


在 iTextSharp 和 PDFsharp 中,您可以通过执行,例如,var stuff = reader.Info.Values或者也许访问 Info 部分var stuff = reader.Info.Keys,但这些似乎是死胡同,因为我无法从那里获取 SSEDictionary 内容。iTextSharp 还允许您查看预告片,并且我能够从那里获取密钥,但过去我无法深入到最低级别。我知道有一种方法可以使用 PDFsharp 从内部获取东西,如下所示:

PdfSharp.Pdf.PdfDocument inputDocument = PdfSharp.Pdf.IO.PdfReader.Open(MapPath("PDFs/Member Statements/06-2012.pdf"), PdfDocumentOpenMode.ReadOnly);
PdfSharp.Pdf.PdfDictionary dictionary = (PdfSharp.Pdf.PdfDictionary)inputDocument.Internals.Catalog.Elements.GetObject("/Outlines"); 

但是,我无法弄清楚如何使其适应我目前的情况以及获得我需要的东西的途径。此外,我不太确定如何在 iTextSharp(我最喜欢的两个库)中做到这一点。因此,我的问题是:您将如何在代码中获得字典(我相信我打开的文本文件中的所有内容都是字典)?另外,该代码会是什么样子?我对 PDF 的内部结构有相当的了解,但我只是不知道如何到达那里。谢谢!

4

1 回答 1

0

PDFVole是一个基于 iText 的开源工具,可让您浏览 PDF 文件的内部结构。也许您可以看一下它的源代码并获得一些想法?如果我是你,我会从这个开始:PDFTreeParser.java

于 2012-07-13T20:47:36.197 回答