以下代码旨在显示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);
谢谢,
//斯科特
答案 0 :(得分:1)
因此,在仔细重新阅读CGPDFPageGetDrawingTransform的API之后,我发现page的/ ROTATE属性的值被添加到您在方法调用中指定的旋转角度。在我上面的情况中,页面的/ ROTATE发生在180.在rotationAngle var中抓取它并传递它以获得转换。所以,180 + 180 = 360 =无可见旋转。
我现在调用GPDFPageGetDrawingTransform,旋转角度为0.0。添加/ ROTATE中的任何内容,瞧,我得到了正确的结果。