2010-12-21 88 views
0

這個問題已被問到,我知道。但是,沒有人回答得很好。我想知道如何在iPhone上解析PDF的「目錄」。文檔告訴我使用CGPDFDocumentGetCatalog,但不知道如何使用它。他們只是說它會返回一本字典。另外,我找不到任何示例代碼。有什麼建議麼?PDF目錄解析與iOS石英2D

回答

0

它基本上只是解析CGPDFDictionary堪稱CGPDFPage「綱要」。

// 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) 

棘手的開始與得到正確的目的地,因爲有沒有在PDF參考野生定義,但還在外面(horray,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和解析字典。 (幾個星期前,我遇到了一個Count = -10的文檔)Go To Figure

我不能發佈完整的代碼,因爲它來自我的商業PDF庫PSPDFKit,我需要靠它;)但這應該讓你開始。

+0

負值計數值表示輪廓在查看器中摺疊顯示。正值計數值表示輪廓在查看器中展開顯示。 – iPDFdev 2012-07-16 14:06:09

+0

該死的,謝謝你!你永遠不會停止學習PDF相關的東西。雖然這似乎很模糊。 (爲什麼不爲這個額外的屬性?)謝謝! – steipete 2012-07-16 14:28:47