我正在开发一个使用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
时完全锁定应用程序,因此我正在寻找任何方法来优化过程,以便更快。有什么想法吗?
答案 0 :(得分:0)
我最终做的是将PDF的每一页保存为iPad上的图像。图像的名称是页码。当我翻到新页面时,我会检查iPad上是否存在该文件。例如。对于第4页,我会检查“4.jpg”是否存在,如果存在,我将显示“4.jpg”否则我将渲染页面并保存。
这种方法可能会占用iPad上的大量空间,但对于我的使用而言,这并不是一个问题,因为该应用程序不会最终在App Store上使用,但会用于公司的销售人员。