"annot"CGPDFDictionary"Rect"如何转换为objective c Rect

Luk*_*ice 1 pdf iphone cocoa-touch ipad ios

"annot"CGPDFDictionary"Rect"如何转换为objective c Rect:

Luk*_*ice 5

Adobes PDF Spec指出:

矩形用于描述页面上的位置和各种对象的边界框.矩形应写为四个数字的数组,给出一对对角线的坐标.

虽然矩形通常由它们的左下角和右上角指定,但是可以指定任意两个对角相对的角.处理PDF的应用程序应准备好在需要特定角落的情况下对这些矩形进行标准化.通常,数组采用[llx lly urx ury]形式,按顺序指定矩形的左下角x,左下角y,右上角y和右上角y坐标.然后假设矩形的另外两个角具有坐标(llx,ury)和(urx,lly).

因此,这意味着,如图所示的矩形翻译不是本地人在这里,应该是这样的:

CGRect rect = CGRectMake(coords[0],coords[3],coords[2]-coords[0],coords[3]-coords[1]);
Run Code Online (Sandbox Code Playgroud)

请参阅代码Bellow(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]);
Run Code Online (Sandbox Code Playgroud)