Как 'annot' CGPDFDictionary 'Rect' переводится в цель c Rect - PullRequest
1 голос
/ 23 ноября 2010

Как 'annot' CGPDFDictionary 'Rect' переводится в цель c Rect:

1 Ответ

5 голосов
/ 23 ноября 2010

Adobes PDF Spec состояния:

Прямоугольники используются для описания местоположений на странице и ограничительных рамок для различных объектов.Прямоугольник должен быть записан как массив из четырех чисел, дающих координаты пары диагонально противоположных углов.

Хотя прямоугольники обычно задаются их нижним левым и верхним правым углами, допустимо указывать любоедва по диагонали противоположных угла.Приложения, обрабатывающие PDF, должны быть готовы нормализовать такие прямоугольники в ситуациях, когда требуются определенные углы.Как правило, массив принимает форму [llx lly urx ury], определяющую координаты нижнего левого x, нижнего левого y, верхнего правого x и верхнего правого y прямоугольника в указанном порядке.Предполагается, что остальные два угла прямоугольника имеют координаты (llx, ury) и (urx, lly).

Таким образом, это означает, что прямоугольный перевод не является собственным, как показано здесь и должно быть так:

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

См. код Bellow (оригинальный код BrainFeeder ), чтобы увидеть контекст массива координат:

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]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...