我使用以下代码绘制和旋转PDF文件。它与iOS 5.x完全正常,但在iOS 4.3下只有一个白页显示调试器中出现错误:
无效`内容':不是流数组。
错误发生在“CGContextDrawPDFPage(context,pdfPage);”
之后为什么它适用于iOS 5.x但不适用于4.3.x?我尝试了不同的PDF文件,但我仍然得到了相同的结果。
我如何克服这个问题?
pdfpage定义为:
- (void)setPage:(CGPDFPageRef)newPage
{
CGPDFPageRelease(self->pdfPage);
self->pdfPage = CGPDFPageRetain(newPage);
}
发生的方法:
-(void)drawLayer:(CALayer*)layer inContext:(CGContextRef)context
{
// First fill the background with white.
CGContextSetRGBFillColor(context, 1.0,1.0,1.0,1.0);
CGContextFillRect(context,self.bounds);
CGContextSaveGState(context);
int rotate = CGPDFPageGetRotationAngle(pdfPage);
switch (rotate) {
case 0:
CGContextTranslateCTM(context, 0.0, self.bounds.size.height);
CGContextScaleCTM(context, 1, -1);
break;
case 90:
CGContextScaleCTM(context, 1.0, -1.0);
CGContextRotateCTM(context, -M_PI / 2);
break;
case 180:
case -180:
CGContextScaleCTM(context, 1, -1);
CGContextTranslateCTM(context, self.bounds.size.width, 0);
CGContextRotateCTM(context, M_PI);
break;
case 270:
case -90:
CGContextTranslateCTM(context, self.bounds.size.height, self.bounds.size.width);
CGContextRotateCTM(context, M_PI / 2);
CGContextScaleCTM(context, -1, 1);
break;
}
CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
CGContextSetRenderingIntent(context, kCGRenderingIntentDefault);
CGContextScaleCTM(context, myScale,myScale);
CGContextDrawPDFPage(context, pdfPage); // the error shows up right after executing this line
CGContextRestoreGState(context);
}
答案 0 :(得分:0)
根据PDF规范,页面字典中的/ Contents条目可以是流对象或流对象数组。根据错误消息,似乎iOS 4.3没有正确实现PDF规范,它总是期望/ Contents条目的流数组和您的文件使用单个流对象。 iOS 5可能解决了这个问题。
答案 1 :(得分:0)
首先尝试CGPDFDocumentRetain(yourCGPDFDocumentRef)
。