我整天都在嘗試從iPad應(yīng)用程序中的PDF獲取超鏈接元數(shù)據(jù)。CGPDF * API真是一場(chǎng)噩夢(mèng),我在網(wǎng)上找到的關(guān)于這一切的唯一信息是我必須尋找“ Annots”字典,但我在PDF中找不到它。我什至使用舊的Voyeur Xcode樣本來檢查我的測(cè)試PDF文件,但沒有找到該“ Annots”字典的痕跡...要知道,這是一個(gè)功能,我在每一個(gè)PDF閱讀器看-這個(gè)同樣的問題已經(jīng)被 問 多 時(shí)間在這里沒有真正的實(shí)際的答案。我通常從不直接請(qǐng)求示例代碼,但是顯然這次我真的很需要……有人可以使用示例代碼來工作嗎?更新:我剛剛意識(shí)到,完成我的PDF測(cè)試的那個(gè)人只是將URL插入為文本,而不是真正的注釋。他嘗試添加注釋,我的代碼現(xiàn)在可以正常工作...但這不是我所需要的,因此看來我必須分析文本并搜索URL。但這是另一個(gè)故事...更新2:所以我終于想出了一些有效的代碼。我將其發(fā)布在這里,希望對(duì)您有所幫助。假定PDF文檔實(shí)際上包含注釋。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; }
使用Quartz在iOS上獲取PDF超鏈接
喵喵時(shí)光機(jī)
2019-10-24 11:21:12