iOS 4.3 PDF-файл рендеринга проблема - PullRequest
0 голосов
/ 31 марта 2012

Я использую следующий код для рисования и вращения файла PDF.Он отлично работает с iOS 5.x, но под iOS 4.3 появляется только белая страница с ошибкой в ​​отладчике:

недопустимое `Contents ': не массивпотоков.

Ошибка возникает сразу после "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 голосов
/ 25 декабря 2012

Попробуйте сначала сделать CGPDFDocumentRetain(yourCGPDFDocumentRef).

0 голосов
/ 02 апреля 2012

В соответствии со спецификацией PDF запись / Contents в словаре страницы может быть либо объектом потока, либо массивом объектов потока. Судя по сообщению об ошибке, кажется, что iOS 4.3 неправильно реализует спецификацию PDF, она всегда ожидает массив потоков для записи / Contents, а ваши файлы используют один объект потока. iOS 5, вероятно, исправил эту проблему.

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