我整天都在尝试从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;
}
慕少森
侃侃尔雅