iphone - iOS 提高 PDF 渲染速度

标签 iphone ios ipad pdf render

我正在编写一个应用程序来管理用户的文档并(最终)发布通过 iPhone/iPad 上的网络服务提供的 PDF 文件。这些几乎完全是扫描的 PDF 文件,它们似乎真的让 iOS 设备陷入困境。

我想到的第一个解决方案是简单地将 PDF 托管在 UIWebView 中。这对于“生成的”PDF 文件非常非常有效,但对于扫描的 PDF 文件却不行(我猜这里的区别是光栅与矢量?)。

我的下一个解决方案是实现 UIDocumentInteractionController,据说这会增加活泼度。我可以报告说它确实确实比 UIWebView 快,但它仍然慢得令人无法接受,即使是在较小的 2 页 PDF 文件上也是如此。 (附带一提,“在另一个应用程序中自动打开”功能以及内置打印功能非常棒!)

我读过一两篇关于 QuickLook 框架的文章,我打算研究一下,但我也偶然发现了一些讨论 CGPDFDocument 类等的文章。这些似乎可以更好地控制文档导航(a la xPdf),但我不知道从哪里开始。另外,我什至不确定它是否为我正在做的事情提供了性能优势。

那么,第一个问题:在 iPhone/iPad 上呈现扫描的 PDF 文件的最快方法是什么?

第二个问题:扫描的PDF文件是我公司生成的,所以我对PDF生成设置有一定的控制权。有人知道哪些设置可以提高基于图像的 PDF 文件的加载速度吗?

谢谢!

(顺便说一下:我今天连续写了 19 个小时的代码,所以如果我胡说八道或没有理解,请原谅我!:))

最佳答案

最快的解决方案是使用 CGPDFDocument 类编写您自己的自定义 pdf 解析器和呈现框架。超快 pdf 渲染的秘诀在于使用如下技术:

  • 将全尺寸页面离屏呈现为图像。
  • 仅在特定缩放级别后激活 CATiledLayer 绘图。当用户以默认缩放级别查看您的 pdf 页面时,无需激活 CATiledLayer 绘图,因为它非常昂贵。只显示已经离屏的渲染图像。当用户开始放大时,您可以激活 CATiledLayer。
  • 使用智能算法缓存屏幕外呈现的 pdf 页面。您可以将上一页和下一页缓存为离屏渲染图像。
  • 在速度较快的设备(iPhone 4 或更高版本和 iPad 2 或更高版本)上,您可以启动后台作业,将所有页面渲染到屏幕外并将它们保存到磁盘。
  • 缓存经常使用的有关 pdf 页面的信息,例如:原始矩形、旋转、旋转矩形等。
  • 您将使用大量的 CGPDFPageRef 对象。重要的是要知道这会大大增加内存使用量。一个小技巧是在收到内存警告时关闭并重新打开 CGPDFDocumentRef 对象。

我在 PDFTouch SDK for iOS 中使用了上述所有技术这是我开发的一个快速pdf渲染框架!

关于iphone - iOS 提高 PDF 渲染速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6165999/

相关文章:

ios - 以多页形式保存webview为pdf

objective-c - 模态视图 Controller 未显示在中心

ios - 如何创建可重用的 UIAlertcontroller?

iphone - 如何在 iCloud 中搜索上传的文件

iphone - 如何检查数组中的值是否不为 NULL?

ios - 在 iOS In App Purchase 中,用户是否有可能被收费,并且应用程序收到超时?

iphone - 支持iPhone 4和iPad 1,但不支持iPhone 3GS

ios - FirebaseApp.configure() 在启动时使应用程序崩溃

javascript - 在 Safari 中从 iOS 10 webapp 打开网站

ios - iPad 应用横向启动具有纵向尺寸的 Root View Controller