2010-12-21 14 views
0

この質問は以前にもわかっています。しかし、誰もそれにうまく答えていません。 iPhone上でPDFの「目次」を解析する方法が不思議です。ドキュメントはCGPDFDocumentGetCatalogを使用するように指示しますが、使用方法は教えていません。彼らが言うのは、それが辞書を返すということだけです。また、私はサンプルコードを見つけることができません。助言がありますか?PDF目次iOSでの解析Quartz 2D

答えて

0

基本的にはちょうどCGPDFDictionaryはCGPDFPageで「アウトライン」と呼ばれる構文解析していますですSO上で見られる最も近いもののように見えます。

// get outline & loop through dictionary... 
    CGPDFDictionaryRef outlineRef; 
    if(CGPDFDictionaryGetDictionary(pdfDocDictionary, "Outlines", &outlineRef)) { 
    } 

次に、最初の要素から始まり、あなたの方法を解析します。

CGPDFDictionaryGetDictionary(outlineRef, "First", &firstEntry) 

タイトルとデスティネーションを取得します。

NSString *outlineTitle = PSPDFStringFromPDFDict(outlineElementRef, @"Title"); 
    CGPDFDictionaryGetObject(outlineElementRef, "Dest", &destinationRef) 

(horray、PDF!)それを格納するにはいくつかの方法、プラスPDFリファレンスにまだ出て野生で定義されていないいくつかの方法があるので、トリッキーなことは、正しい宛先を取得することから始まります。それだけで壊れていて、あなたはそれに対処しなければなりません。

はたとえば、あなたが

CGPDFInteger elements; 
if(CGPDFDictionaryGetInteger(outlineRef, "Count", &elements)) { 
    PSPDFLog(@"parsing outline: %ld elements. (Count will be ignored anyway)", (long int)elements); 
}else { 
    PSPDFLogError(@"Error while parsing outline. No outlineRef?"); 
} 

を使用して、アウトライン辞書のカウントを取得するしかし、それは、時には数により壊れたPDF作成ツールに無効であることに注意があります。 PDFをHTMLとして見てください。たとえそれが壊れたとしても、パーサーは可能な限り多くのデータを表示するために最善を尽くします。だから私のアドバイスはカウントを無視し、とにかく辞書を解析することです。 (数週間前にCount = -10だった文書に遭遇しました)

私の商用PDFライブラリPSPDFKitから完全なコードを投稿することはできません。それ;)しかし、これはあなたを開始する必要があります。

+0

負のカウント値は、アウトラインがビューアに折りたたまれて表示されることを意味します。正のカウント値は、アウトラインがビューア内で拡大表示されていることを示します。 – iPDFdev

+0

くそー、ありがとう!あなたはPDF関連のものの学習を止めることは決してありません。これはかなり不明瞭ですが。 (なぜそれのための追加のプロパティはありません?)ありがとう! – steipete