在 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的主要内容,如果未能解决你的问题,请参考以下文章

使用 AFNetworking 2.0 从 iOS 应用程序以流的形式上传 100 张图像

nodejs+koa以流的形式返回数据

Java学习笔记42(序列化流)

将zip文件以流的形式输出到页面

java以流的形式输出文件

excel导出以流的形式