使用iTextSharp和PDFsharp从PDF的Internals获取值的字典

时间:2012-07-13 19:40:40

标签: c# asp.net pdf itextsharp pdfsharp

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


但是,没有“标准”书签的PDF具有索引/书签。 问题是这些是由SOLindexer(Link to product page)创建的。我能够在内部COS树中找到这些索引/书签。 PDF的内部结构中我想要到达的位置是“trailer / Info / SSEDictionary / Document_MemberStatements”。在这个目录中(如果可以调用它)我可以点击-DATA-并打开一个记事本文件,其中包含我需要的所有帐号,名称和内容(当然格式很奇怪,但可读),我相信这些是我可以放在字典中的价值观。


在iTextSharp和PDFsharp中,您可以通过执行var stuff = reader.Info.Valuesvar 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的内部结构有一个很好的理解,但我不太清楚如何实现这一目标。谢谢!

1 个答案:

答案 0 :(得分:0)

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