亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用Quartz在iOS上獲取PDF超鏈接

使用Quartz在iOS上獲取PDF超鏈接

iOS
郎朗坤 2019-12-10 13:12:31
我整天都在嘗試從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)。



查看完整回答
反對 回復 2019-12-11
?
海綿寶寶撒

TA貢獻1809條經驗 獲得超8個贊

我一定很困惑,因為如果我使用以下命令,這一切都會起作用:


CGRect rect = CGRectMake(coords[0],coords[1],coords[2]-coords[0]+1,coords[3]-coords[1]+1);

也許以后我會濫用嗎?PDF提供了角落,而CGRect需要一個角落和一個大小。


查看完整回答
反對 回復 2019-12-11
  • 3 回答
  • 0 關注
  • 451 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號