【发布时间】:2011-05-14 09:47:08
【问题描述】:
'annot' CGPDFDictionary 'Rect' 如何转换为目标 c Rect:
【问题讨论】:
标签: iphone cocoa-touch ipad pdf ios
'annot' CGPDFDictionary 'Rect' 如何转换为目标 c Rect:
【问题讨论】:
标签: iphone cocoa-touch ipad pdf ios
Adobes PDF Spec 状态:
矩形用于描述 页面上的位置和边界框 对于各种对象。一个长方形 应写为四个数组 给出坐标的数字 一对对角对角。
虽然矩形通常是 由它们的左下角和 右上角,可以接受 指定任意两个对角线 角落。处理 PDF 的应用程序 应准备使此类正常化 矩形在以下情况下 需要特定的角。 通常,数组采用以下形式 [llx lly urx ury] 指定 左下 x,左下 y, 右上 x 和右上 y 矩形的坐标,在那个 命令。其他两个角 然后假设矩形有 坐标 (llx, ury) 和 (urx, lly)。
因此,这意味着 rect 翻译不是原生的,如 here 所示,应该是这样的:
CGRect rect = CGRectMake(coords[0],coords[3],coords[2]-coords[0],coords[3]-coords[1]);
查看下面的代码(BrainFeeder 的原始代码)以查看 coords 数组的上下文:
CGPDFArrayRef rectArray;
if(CGPDFDictionaryGetArray(annotDict, "Rect", &rectArray)) {
//continue;
CGPDFReal coords[4];
for( int k = 0; k < arrayCount; ++k ) {
CGPDFObjectRef rectObj;
if(!CGPDFArrayGetObject(rectArray, k, &rectObj)) {
continue;
}
CGPDFReal coord;
if(!CGPDFObjectGetValue(rectObj, kCGPDFObjectTypeReal, &coord)) {
continue;
}
coords[k] = coord;
}
}
//blx,bly,trx,try>tlx,tly,w,h
CGRect rect = CGRectMake(coords[0],coords[3],coords[2]-coords[0],coords[3]-coords[1]);
【讨论】:
CGRect rect = CGRectMake(coords[0],coords[1],coords[2]-coords[0],coords[3]-coords[1]); 而不是CGRect rect = CGRectMake(coords[0],coords[3],coords[2]-coords[0],coords[3]-coords[1]);(注意y 参数;它使用索引1 坐标代替索引3)。无论如何,这对我有用。