0

それぞれ 15 万から 20 万ページを含む非常に大きな PDF ファイルを分割する必要があるプロジェクトがあります。現在、iTextSharp DLL を使用して、Adobe 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 (2 つのライブラリの中で私のお気に入り) でこれを正確に行う方法がよくわかりません。したがって、私の質問は次のとおりです。コードで辞書 (開いたテキスト ファイル内のすべてのものがあると思います) をどのように取得しますか? また、そのコードはどのようになりますか? PDF の内部構造についてはよく理解していますが、そこにたどり着く方法がよくわかりません。ありがとう!

4

1 に答える 1

0

PDFVoleは、PDF ファイルの内部構造をナビゲートできる iText ベースのオープン ソース ツールです。そのソース コードを見て、アイデアを得ることができますか? 私があなただったら、これから始めます: PDFTreeParser.java

于 2012-07-13T20:47:36.197 に答える