itext7 - iText 7 PdfReader 是否支持部分阅读?
问题描述
我正在从 iText 5 迁移到 7。我们处理巨大的 PDF 文件,因此将整个 PDF 解析到内存中根本不可取。在 5 中,PdfReader 上有一个特殊的构造函数,它强制“部分模式”。iText 7 总是解析整个 PDF 还是总是有效地使用“部分模式”?
查看 iText 7 源代码,似乎 PdfReader 不再缓存文档内容。相反,PdfDocument 负责缓存。这意味着应该可以为每个页面创建一个新的 PdfDocument,这与 PdfReader 中的 iText 5“部分模式”具有相同的效果。
如果有人能证实我的想法,我将不胜感激。
解决方案
iText7 支持部分(或者我宁愿称之为惰性)阅读模式,默认情况下它是活动的。这意味着将根据需要读取/加载对象。当然,在任何情况下都会读取一些必要的东西(如交叉引用表、目录等,以及嵌套的直接对象)。
此外,在 iText7 中PdfObject
有release()
方法,该方法从内存中释放该对象,如果需要,该对象将被再次读取。但是,如果您使用大量高级 API,则release()
可能没有那么有用,并且确实创建多个PdfDocument
实例可能更有用和更简单。
重要说明:由于文件很大,它们可能位于磁盘上,因此使用PdfReader(String)
或PdfReader(File)
构造函数非常重要。那些利用随机读取的可能性。否则,如果您简单地传递一个InputStream
,则流将首先完全读入内存,然后将构造文档。这当然仍然为数据结构节省了一些内存,但将源文档保留在内存中,我认为这是不希望的。
推荐阅读
- python-3.x - 如何将可导航字符串转换为文件对象
- javascript - 使用正则表达式在 2 个完整的跨度标签之间选择文本
- bash - 如何使用 lxc exc 以特定用户身份发出多个命令
- r - 使用正则表达式替换区分大小写的断字
- react-native - React Native Redux - 登录后重定向
- r - 从R中的2个因子制作1个因子
- angular - 如何修复预期 $.length = 2 等于 1
- python - 寻求有关用于从外部“.py”文件动态导入函数的代码的建议
- javascript - cv.Mat 不是构造函数 opencv
- reactjs - 如何根据服务器调用制作动态表单