CGPDFPageDrawingTransform не вращает страницу - PullRequest
1 голос
/ 03 марта 2011

Код ниже предназначен для отображения страниц PDF при правильной обработке любых ненулевых углов поворота, которые могут быть указаны для каждой страницы. Мой тестовый PDF-файл содержит несколько страниц, и одна из них имеет угол поворота 180 градусов, который код правильно определяет, но вызов CGPDFPageGetDrawingTransform (за которым следует CGContextContactCTM) не имеет никакого эффекта. Страница отображается без поворота. Что я делаю не так?

CGContextSaveGState(context);

CGRect drawRect=self.bounds;
CGRect cropBox = CGPDFPageGetBoxRect(pdfPage, kCGPDFCropBox);

int rotationAngle=CGPDFPageGetRotationAngle(pdfPage);

if (kDebug>1) {
    NSLog(@"***** page rotation angle is %d",rotationAngle);
}

CGContextTranslateCTM(context, drawRect.origin.x, drawRect.origin.y);

CGAffineTransform transform = CGPDFPageGetDrawingTransform(pdfPage, kCGPDFCropBox, cropBox, rotationAngle, true);
CGContextConcatCTM (context, transform);

float xScaleFactor=drawRect.size.width / cropBox.size.width;
float yScaleFactor=drawRect.size.height / cropBox.size.height;

CGContextTranslateCTM(context, -CGRectGetMinX(cropBox), CGRectGetMaxY(cropBox)*yScaleFactor);
CGContextScaleCTM(context, xScaleFactor, -yScaleFactor);

CGContextClipToRect(context, cropBox);
CGContextDrawPDFPage(context, pdfPage);

CGContextRestoreGState(context);

Спасибо,

// Скотт

1 Ответ

1 голос
/ 05 марта 2011

Итак, после тщательного перечитывания API для CGPDFPageGetDrawingTransform я обнаружил, что значение атрибута страницы / ROTATE ДОБАВЛЕНО к углу поворота, который вы указали при вызове метода. В моей ситуации выше, значение параметра / ROTATE, равное 180., получало его в переменном вращении и передавало его, чтобы получить преобразование. Итак, 180 + 180 = 360 = нет видимого вращения.

Теперь я вызываю GPDFPageGetDrawingTransform с углом поворота 0,0. Все в / ROTATE добавляется, и вуаля, я получаю правильные результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...