在iPad上加载PDF太慢了

时间:2011-07-25 11:44:12

标签: performance ipad pdf core-graphics render

我正在开发一个使用CoreGraphics渲染PDF文件的应用程序。我一次只显示一页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 :(得分:0)

我最终做的是将PDF的每一页保存为iPad上的图像。图像的名称是页码。当我翻到新页面时,我会检查iPad上是否存在该文件。例如。对于第4页,我会检查“4.jpg”是否存在,如果存在,我将显示“4.jpg”否则我将渲染页面并保存。

这种方法可能会占用iPad上的大量空间,但对于我的使用而言,这并不是一个问题,因为该应用程序不会最终在App Store上使用,但会用于公司的销售人员。