【发布时间】:2012-07-13 19:40:40
【问题描述】:
我有一个项目,我需要拆分非常大的 PDF 文件,每个文件包含 150 到 20 万页。我目前正在使用 iTextSharp DLL 来拆分一些具有可由 Adobe Reader 创建的“标准”书签的 PDF。我还使用 PDFsharp 从没有这些“标准”书签的 PDF 中提取文本,然后我将它们从数据库中解析为关键字并将它们拆分为更小的 PDF。然而,与第一种方法相反,这是非常慢。
但是,没有“标准”书签的 PDF 有索引/书签。 问题是这些是由 SOLindexer(Link to product page) 创建的。我能够在内部 COS 树中找到这些索引/书签。 PDF 内部结构中到我想要到达的位置的路径是“trailer/Info/SSEDictionary/Document_MemberStatements”。在这个目录中(如果可以这样称呼的话)我可以点击 -DATA- 并打开一个记事本文件,其中包含我需要的所有帐号、姓名和东西(当然格式很奇怪,但可读),我相信这些是我可以放入字典的值。
在 iTextSharp 和 PDFsharp 中,您可以通过例如 var stuff = reader.Info.Values 或 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 的内部结构有相当的了解,但我只是不知道如何到达那里。谢谢!
【问题讨论】:
-
能否用一个简短的编程相关问题替换这堵文字墙?
-
我在做的时候想过这个问题,但我觉得我无法更简洁地解释我的情况。
-
分离成不同的段落会有所帮助...
标签: c# asp.net pdf itextsharp pdfsharp