iOS 4.3 PDF文件渲染问题

时间:2012-03-31 07:20:00

标签: objective-c ios pdf ios4

我使用以下代码绘制和旋转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);
}

2 个答案:

答案 0 :(得分:0)

根据PDF规范,页面字典中的/ Contents条目可以是流对象或流对象数组。根据错误消息,似乎iOS 4.3没有正确实现PDF规范,它总是期望/ Contents条目的流数组和您的文件使用单个流对象。 iOS 5可能解决了这个问题。

答案 1 :(得分:0)

首先尝试CGPDFDocumentRetain(yourCGPDFDocumentRef)