我正在構建一個顯示PDF的iPad應用程序,我希望能夠顯示目錄和讓用戶導航到相關頁面。如何獲取iOS(iPad)中的PDF目錄(大綱)數據?
在這一點上,我已經投入了幾個小時的研究,看起來PDFKit [iOS不支持],我唯一的選擇是手動解析PDF元數據。
我已經看過幾種解決方案,但他們都沒有提及一點 - 如何將「大綱」元數據中的頁面與項目的實際頁碼相關聯。我用[偷窺工具]檢查了我的PDF文檔,並且可以在樹中看到輪廓。
[此解決方案]幫助我找出如何導航Outline/A/S/D樹以找到「Dest」對象,但它使用[self.pages indexOfObjectIdenticalTo:destPageDic]執行某種對象比較。我不明白。
我已閱讀[從Adobe官方PDF規格],以及部分「12.3.2.3命名目的地」描述了一個大綱條目可以指向一個頁面的方式:
而不是直接與被定義 表 151中所示的顯式語法,可以通過名稱對象 (PDF1.1)或字節字符串(PDF1.2)間接地指向目的地 。
而與此線,是完全無法理解我繼續說:
該項的值應是 字典,其中每個鍵是一個 目的地名稱和相應的 值是定義 目的地的數組,使用 表151中顯示的語法,或具有D 條目(其值是這樣的數組)的字典。
這是指366頁,「12.3.2.2顯式目標」,其中一個表描述一個頁面:「在每種情況下,頁是一個間接引用頁對象」
所以是的結果CGPDFDocumentGetPage或CGPDFPageGetDictionary是「對頁面對象的間接引用」?
我發現了一個討論的[lists.apple.com上的線程]。 [此評論]意味着您可以比較給定頁面的CGPDFPageGetDictionary對象的地址(內存中?),並將其與PDF元數據的「大綱」樹中的頁面進行比較。
但是,當我查看「大綱」樹中頁面對象的地址並將它們與地址進行比較時,它們絕不會相同。該線程中使用的行「TTDPRINT(@」%d =>%p「,k + 1,dict);」在內存中打印「dict」作爲指針..沒有理由相信返回的對象與返回其他地方的對象相同..他們會在內存中的不同位置!
我最後的希望是從蘋果的命令行「outline」工具[本書中提到](作爲[由此線程提出])查看源代碼,但我無法在任何地方找到它。底線 - 是否有人對PDF概述如何工作有所瞭解,或者瞭解一些讀取PDF概述的開放源代碼(最好是objective-c)?
ARGG:我有各種各樣的聯繫張貼在這裏,但顯然一個新用戶只能發佈一個鏈接在一個時間
這是一個很好的答案。你最終的目標應該是創建一個nsdictionary,其中包含title->頁碼的鍵/ val對。這將構成TOC。 – shawnwall 2011-02-01 19:35:37
實際上,您無法直接將outlinePageRef與CGPDFPageRef進行比較,但您可以將其與「CGPDFPageGetDictionary(page)」進行比較。 – 0xced 2011-02-02 00:35:51