2010-11-07 49 views
1

現狀:我有一個包含超鏈接的pdf文檔。我希望我的iPhone應用程序顯示此pdf文檔,並啓用單擊超鏈接。如何顯示包含超鏈接的PDF文檔? (在iOS上)

注意:目前,我試圖用一個UIWebView,它不幸似乎無法檢測鏈接水龍頭這樣做。有一個叫做CGPDF的類的家族,我在文檔中已經讀過。該文件談到了所有關於解析pdf文檔,什麼但沒有具體如何檢測鏈接水龍頭和什麼不(謝謝蘋果)。

回答

5

我無法評論UIWebView,但CGPDF的東西是CoreGraphics的一部分。所以它主要用於繪圖 - 你將有一個PDF對象和一個上下文來繪製它(幾乎可以肯定通過UIView的一個自定義子類來接收),並要求它以一定的比例和位置繪製。如果您是CoreGraphics和/或自定義UIView子類的新手,那麼可能需要一天左右的時間才能進入,但最終會變成幾百行。 CoreGraphics並不知道任何關於用戶交互的內容,所以我認爲蘋果公司認爲它隱含着沒有抽象的概念,因此CoreGraphics也沒有辦法直接幫助你捕捉水龍頭。

有一個示例代碼,用於加載PDF並將其繪製到頂部的上下文this document。 CoreGraphics在OS X和iOS上是一樣的,除了初始座標系是相反的。在OS X上,與PDF相同,在iOS上則相反,所以如果未經調整,PDF將沿着y翻轉。示例顯示代碼之後的部分標題爲'爲PDF頁面創建轉換',並且應該有所幫助 - 您只需應用反轉y的轉換。

關於如何創建包含一些CoreGraphics繪圖步驟的自定義UIView子類,有一個tutorial here

關於捕獲水龍頭,事情會變得更復雜一些。由於文件格式的工作方式,您不需要像完整的PDF檢查那樣執行任何操作。鏈接的東西被吸引看,但他們應該看看每個正常的PDF操作,CoreGraphics可以爲您處理。然後有單獨的表格來描述捕獲水龍頭的邊框矩形和它們應該去的鏈接。這些表格被CoreGraphics解析成易於閱讀的格式,但未經檢查。因此,您可以使用所有工具來查找鏈接的位置,而無需過多地瞭解文件格式,但您仍然需要親自查看它們。

相關的CoreGraphics結構是CGPDFDictionary。您可以獲取最新的PDF規範here,但其中99%與您無關或涵蓋CoreGraphics已實施的內容。您需要在文檔中來回跳轉以將所有位合併到一起,但是您可以在註釋上的第8.4節跳至第488頁。

它最終成爲代碼位合理複雜的組合而且由於商業原因,我無法發佈自己的內容,但是您需要建立頁面名稱到頁碼的映射,遍歷鏈接註釋(這些鏈接是指向已命名頁面的鏈接),並執行某些操作以捕獲點擊。就我個人而言,我只是添加了無形的UIButtons作爲我的自定義PDF視圖的子視圖。很明顯,您應用於PDF的任何變換都需要應用於註釋座標。

總共可能是1,000行。

相關問題