PDFKit在swift中使用,您可以使用PDFDocument打开pdf文件.这很简单,效果很好.但我正在构建一个适合我需求的自定义pdf查看器(适用于漫画书pdf),我遇到了一个问题.在查看器中,我不需要将整个pdf文件存储在内存中.我一次只需要几页.
此外,pdfs仅包含图像.没有文字或任何东西.
实例化a时PDFDocument,整个pdf数据被加载到内存中.如果你有非常庞大的pdf文件(超过1GB),这不是最佳的(并且可能会在某些设备上崩溃).据我所知,PDFKit中没有办法只加载pdf文档的部分内容.
我能做些什么吗?我还没有找到一个可以做到这一点的swift/obj-c库(虽然我真的不知道搜索它的正确关键字).
我的解决方法是预处理pdf并使用在.documents director(或类似)中将每个页面保存为图像FileManager.这将导致大量文件,但会解决内存问题.不过,我不确定我喜欢这种方法.
更新:
所以我做了@Prcela和@Sahil Manchanda提出的建议.它似乎现在正在发挥作用.
@yms:嗯,确实可能是个问题.当只有图像时,这甚至会发生吗?在pdf中没有任何其他内容.
@ Carpsen90:它们是本地的(保存在文档目录中).
编辑:我没有接受下面的答案,或给它赏金.这是自动的.它没有解决问题.它仍然将整个PDF加载到内存中!
是否可以在iphone中以编程方式将多个pdf文件合并为一个pdf文件.我已经从程序的不同部分创建了单独的页面,现在需要将它们合并到一个文件中
根据PDF 1.7 规范,第 90 页,第 3.4 节:
前面的部分描述了单个对象的语法。本节介绍如何在 PDF 文件中组织对象以实现高效的随机访问和增量更新。规范的 PDF 文件最初由四个元素组成(见图 3.2):
标识文件符合的 PDF 规范版本的单行标题
包含构成文件中包含的文档的对象的主体
包含有关文件中间接对象信息的交叉引用表
提供交叉引用表的位置和文件正文中某些特殊对象的位置的预告片
基本上,该结构具有标题,然后是正文内容,然后是交叉引用表,最后是给出外部参照表位置的尾部。这里的关键部分是trailer和xref表位于文件的末尾,该xref表包含正文内容的相关元数据(主要是 10 位字节偏移量)。
鉴于外部参照表本身位于PDF 文件的最末尾:
查看我部分下载的 PDF 文件的屏幕截图:
