iText 7 PdfReader是否支持部分阅读?

时间:2018-12-13 17:28:52

标签: itext7

我正在从iText 5迁移到7的过程中。我们正在处理庞大的PDF文件,因此完全不希望将整个PDF解析到内存中。在5中,PdfReader上有一个特殊的构造函数,该构造函数强制使用“部分模式”。 iText 7是始终解析整个PDF还是始终有效地使用“部分模式”?

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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