我整天都在嘗試從iPad應用程序中的PDF獲取超鏈接元數據。CGPDF * API真是一場噩夢,我在網上找到的關于這一切的唯一信息是我必須尋找“ Annots”字典,但我在PDF中找不到它。我什至使用舊的Voyeur Xcode樣本來檢查我的測試PDF文件,但沒有找到該“ Annots”字典的痕跡...要知道,這是一個功能,我在每一個PDF閱讀器看-這個同樣的問題已經被 問 多 時間在這里沒有真正的實際的答案。我通常從不直接請求示例代碼,但是顯然這次我真的很需要……有人可以使用示例代碼來工作嗎?更新:我剛剛意識到,完成我的PDF測試的那個人只是將URL插入為文本,而不是真正的注釋。他嘗試添加注釋,我的代碼現在可以正常工作...但這不是我所需要的,因此看來我必須分析文本并搜索URL。但這是另一個故事...更新2:所以我終于想出了一些有效的代碼。我將其發布在這里,希望對您有所幫助。假定PDF文檔實際上包含注釋。for(int i=0; i<pageCount; i++) { CGPDFPageRef page = CGPDFDocumentGetPage(doc, i+1); CGPDFDictionaryRef pageDictionary = CGPDFPageGetDictionary(page); CGPDFArrayRef outputArray; if(!CGPDFDictionaryGetArray(pageDictionary, "Annots", &outputArray)) { return; } int arrayCount = CGPDFArrayGetCount( outputArray ); if(!arrayCount) { continue; } for( int j = 0; j < arrayCount; ++j ) { CGPDFObjectRef aDictObj; if(!CGPDFArrayGetObject(outputArray, j, &aDictObj)) { return; } CGPDFDictionaryRef annotDict; if(!CGPDFObjectGetValue(aDictObj, kCGPDFObjectTypeDictionary, &annotDict)) { return; } CGPDFDictionaryRef aDict; if(!CGPDFDictionaryGetDictionary(annotDict, "A", &aDict)) { return; } CGPDFStringRef uriStringRef; if(!CGPDFDictionaryGetString(aDict, "URI", &uriStringRef)) { return; } CGPDFArrayRef rectArray; if(!CGPDFDictionaryGetArray(annotDict, "Rect", &rectArray)) { return; } int arrayCount = CGPDFArrayGetCount( rectArray ); CGPDFReal coords[4]; for( int k = 0; k < arrayCount; ++k ) { CGPDFObjectRef rectObj; if(!CGPDFArrayGetObject(rectArray, k, &rectObj)) { return; } CGPDFReal coord; if(!CGPDFObjectGetValue(rectObj, kCGPDFObjectTypeReal, &coord)) { return; } coords[k] = coord; }
3 回答

30秒到達戰場
TA貢獻1828條經驗 獲得超6個贊
這是獲取至少每頁注釋CGPDFDictionary的基本思想。之后,您應該可以在Adobe的PDF規范的幫助下找到答案。
1.)獲取CGPDFDocumentRef。
2.)獲取每個頁面。
3)在每個頁面上,使用CGPDFDictionaryGetArray(pageDictionary, "Annots", &outputArray)
pageDictionary是表示CGPDFPage的CGPDFDictionary,而outputArray是存儲該頁面的Annots數組的變量(CGPDFArrayRef)。

海綿寶寶撒
TA貢獻1809條經驗 獲得超8個贊
我一定很困惑,因為如果我使用以下命令,這一切都會起作用:
CGRect rect = CGRectMake(coords[0],coords[1],coords[2]-coords[0]+1,coords[3]-coords[1]+1);
也許以后我會濫用嗎?PDF提供了角落,而CGRect需要一個角落和一個大小。
- 3 回答
- 0 關注
- 451 瀏覽
添加回答
舉報
0/150
提交
取消