加载PDF时iOS延迟

加载PDF时iOS延迟,ios,objective-c,pdf,pdf-generation,cgcontext,Ios,Objective C,Pdf,Pdf Generation,Cgcontext,因此,我的应用程序使用,许多PDF的这些工作表需要很长时间才能加载(在iPad2、iOS 7上需要10秒以上),因此我想如果我可以在ApplicationIDFinishLaunching()将单独的工作表加载到文件目录中-然后我可以引用用户目录中的文件,它们的加载速度会更快-但这绝对没有什么区别 下面是我的DrawRect()方法,它负责显示PDF CGContextRef ctx = UIGraphicsGetCurrentContext(); //PDF might be transpar

因此,我的应用程序使用,许多PDF的这些工作表需要很长时间才能加载(在iPad2、iOS 7上需要10秒以上),因此我想如果我可以在ApplicationIDFinishLaunching()将单独的工作表加载到文件目录中-然后我可以引用用户目录中的文件,它们的加载速度会更快-但这绝对没有什么区别

下面是我的DrawRect()方法,它负责显示PDF

CGContextRef ctx = UIGraphicsGetCurrentContext();
//PDF might be transparent, assume white paper - set White Background
[[UIColor whiteColor] set];
CGContextFillRect(ctx, rect);

//PDF File Path
//"pdf" refers to the location in the directory where the file is saved"
CGPDFPageRef page1 = CGPDFDocumentGetPage(pdf, 1);

//Flip coordinates
CGContextGetCTM(ctx);
CGContextScaleCTM(ctx, 1, -1);
CGContextTranslateCTM(ctx, 0, -rect.size.height);

//Get the rectangle of the cropped inside
CGRect mediaRect = CGPDFPageGetBoxRect(page1, kCGPDFCropBox);

CGContextScaleCTM(ctx, rect.size.width / mediaRect.size.width,
                  rect.size.height / mediaRect.size.height);

//Draw PDF
CGContextDrawPDFPage(ctx, page1);
CGPDFDocumentRelease(pdf);
在idInit()方法中声明的文件所在目录中的位置

非常感谢您的帮助、指导、建议,以及关于我在哪些方面出了问题,以及如何加快加载速度的任何意见

编辑

@Davidvandries感谢您的建议,事实证明,我使用的PDF文件实际上相当大(约1MB),我从测试中学到的是,如果我进一步压缩PDF文件,使其=<500kbs,那么我在加载时间上没有问题-但压缩文件,导致PDF中一些嵌入图像的图像质量下降:也可能是iPad2——我将尝试在更新的设备上运行它,并添加到本文中

还有其他建议吗


任务

可以考虑从PDF页面创建图像,在后台线程中通过“代码> NScase DeXCHCHYASYC

要从pdf页面创建图像,请执行以下操作:

+(UIImage *)getPDFPage:(CGPDFPageRef) page rect:(CGRect) rect
{

    CGRect pageRect = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);


    UIGraphicsBeginImageContext(pageRect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextTranslateCTM(context, 0.0, pageRect.size.height);

    CGContextScaleCTM(context, 1.0, -1.0);

    CGContextDrawPDFPage(context, page);

    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();
    return img;
}
编辑:

此代码将为您提供一个由PDF文件决定大小的图像(上面代码中的
pageRect
)。因此,缩放级别将由可用介质决定。查看
CGPDFPageGetBoxRect
的不同值

请记住,这些图像可能会占用大量内存。您可以使用以下方法将图像保存到磁盘:

NSData *imageData = UIImagePNGRepresentation(pdfImage);

然后在需要时加载相关页面。从iUnit磁盘加载图像非常快。

谢谢你,Esben,我可以这样做:但是我的应用程序会失去无损缩放功能,这是处理PDF文件时的一个主要优势-对吗?@TaskinulHaque我刚刚用一些附加信息更新了我的答案。祝你好运和快乐!这种情况是发生在任何PDF文件中,还是只在特定文件中看到?PDF的某些功能比其他功能更昂贵;例如,包含大量矢量元素和剪辑的复杂页面,以及JPEG-2000编码图像(仅举几例)。除此之外,许多较旧的设备(如iPad2)内存非常有限,处理器处理繁重文件的速度非常慢。但首先要弄清楚它是否是特定于PDF的-只需尝试使用非常简单的PDF文件,看看有什么区别。@Davidvandriesche我想我会将你的答案添加到问题中作为编辑,因为它可能有助于其他人对类似问题的稳定-谢谢你的输入
NSData *imageData = UIImagePNGRepresentation(pdfImage);