【问题标题】:Does iText 7 PdfReader support partial reading?iText 7 PdfReader 是否支持部分阅读?
【发布时间】:2018-12-13 17:28:52
【问题描述】:

我正在从 iText 5 迁移到 7。我们处理巨大的 PDF 文件,因此将整个 PDF 解析到内存中根本不可取。在 5 中,PdfReader 上有一个特殊的构造函数,它强制“部分模式”。 iText 7 总是解析整个 PDF 还是总是有效地使用“部分模式”?

查看 iText 7 源代码,似乎 PdfReader 不再缓存文档内容。相反,PdfDocument 负责缓存。这意味着应该可以为每个页面创建一个新的 PdfDocument,这与 PdfReader 中的 iText 5“部分模式”具有相同的效果。

如果有人能证实我的想法,我将不胜感激。

【问题讨论】:

    标签: itext7


    【解决方案1】:

    iText7 支持部分(或者我宁愿称之为惰性)阅读模式,默认情况下它是活动的。这意味着将根据需要读取/加载对象。当然,在任何情况下都会读取一些必要的东西(如交叉引用表、目录等,以及嵌套的直接对象)。

    另外,PdfObject 在 iText7 中有 release() 方法,它可以从内存中释放该对象,如果需要,该对象将被再次读取。但如果您使用大量高级 API,那么 release() 可能没有那么有用,实际上创建多个 PdfDocument 实例可能更有用和简单。

    重要提示:由于文件很大,它们可能位于磁盘上,因此使用PdfReader(String)PdfReader(File) 构造函数非常重要。那些利用随机读取的可能性。否则,如果你只是传递一个InputStream,流将首先被完全读入内存,然后再构造文档。当然,这仍然为数据结构节省了一些内存,但将源文档保留在内存中,我认为这是不希望的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 2016-06-18
      相关资源
      最近更新 更多