Загрузка PDF на iPad слишком медленная - PullRequest
0 голосов
/ 25 июля 2011

Я разрабатываю приложение, которое отображает PDF-файл с использованием CoreGraphics.Я показываю одну страницу PDF за раз.В viewDidLoad у меня есть следующий код:

NSString *pdfFullPath = [[NSBundle mainBundle] pathForResource:@"catalogue" ofType:@"pdf"];
pdf = CGPDFDocumentCreateWithURL((__bridge CFURLRef)[NSURL fileURLWithPath:pdfFullPath]);

currentPage = [[_dataObject description] intValue];

[pdfView setImage:[self imageFromPDF:pdf withPageNumber:currentPage withScale:1.5]];

[_dataObject description] содержит номер текущей страницы в виде строки.

Тогда у меня есть этот метод, который отображает PDF:

- (UIImage *)imageFromPDF:(CGPDFDocumentRef)_pdf withPageNumber:(NSUInteger)pageNumber withScale:(CGFloat)scale
{
    if(pageNumber > 0 && pageNumber <= CGPDFDocumentGetNumberOfPages(_pdf))
    {
        CGPDFPageRef pdfPage = CGPDFDocumentGetPage(_pdf, pageNumber);
        CGRect tmpRect = CGPDFPageGetBoxRect(pdfPage,kCGPDFMediaBox);
        CGRect rect = CGRectMake(tmpRect.origin.x, tmpRect.origin.y, tmpRect.size.width * scale, tmpRect.size.height * scale);
        UIGraphicsBeginImageContext(rect.size);
        CGContextRef context = UIGraphicsGetCurrentContext();
        CGContextTranslateCTM(context, 0, rect.size.height);
        CGContextScaleCTM(context, scale, -scale);
        CGContextDrawPDFPage(context, pdfPage);
        UIImage *pdfImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

        return pdfImage;
    }

    return nil;
}

Это очень медленный процесс, который полностью блокирует приложение при вызове imageFromPDF, и поэтому я ищу какой-либо способ оптимизировать процесс, чтобы он был быстрее.Есть идеи?

1 Ответ

0 голосов
/ 02 августа 2011

В итоге я сохранил каждую страницу PDF-файла в виде изображения на iPad. Название изображений - это номер страницы. При переходе на новую страницу я проверяю, существует ли файл на iPad. Например. для страницы 4 я бы проверил, существует ли «4.jpg», если это так, я покажу «4.jpg», иначе я отрендю страницу и сохраню ее.

Этот подход может занять много места на iPad, но для меня это не проблема, так как приложение не окажется в App Store, но будет использоваться для продавцов в компании.

...