在 iOS 中以流的形式读取加密的 PDF
Posted
技术标签:
【中文标题】在 iOS 中以流的形式读取加密的 PDF【英文标题】:Read encrypted PDF as a stream in iOS 【发布时间】:2012-08-06 12:41:22 【问题描述】:我想(使用我自己的密钥加密)。我的想法是我可以分块解密文档并将其传递给渲染器,而不是解密整个文档,这不是一个选项,因为:
-
解密整个文档会更慢
如果文档很大,那么我无法将整个解密内容放入内存中
写入磁盘不是一种选择,因为我不希望文档的解密副本在磁盘上的任何地方散落,即使是很短的时间间隔。
我知道我们可以通过 UIWebView 使用异步 URL 请求来做到这一点;但 UIWebView 对我来说太慢了;尤其是大型 PDF。
有人可以建议使用 QLPreviewController(QuickLaunch 框架)或 CGPDFDocument 执行此操作的任何方法吗?
谢谢!
【问题讨论】:
【参考方案1】:CGPDFDocumentCreateWithProvider(provider)
怎么样?provider
是用 CGDataProviderCreateDirect()
或 CGDataProviderCreateSequential()
创建的?
我没有使用这些功能,但它们似乎可以满足您的需求。
但 Core Graphics 可能会将整个 PDF 文档缓存在内存中或临时文件中。
原因是 PDF 是一种结构化格式,包含许多对象(引用文档中的其他对象)和目录。目录通常位于文档的末尾,必须先阅读,然后才能阅读任何对象。
【讨论】:
我可以通过线性化我所有的 PDF(即将 TOC 移动到文件的开头)来绕过 TOC 在末尾。 是的,我的意思只是您无法控制 Core Graphics 的功能。即使对于最后一页,它也需要 TOC,可能还需要文件开头的资源,因此缓存是有正当理由的。试试看,用 Instruments 检查内存消耗。以上是关于在 iOS 中以流的形式读取加密的 PDF的主要内容,如果未能解决你的问题,请参考以下文章