当前位置: 首页 > 知识库问答 >
问题:

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

雍河
2023-03-14

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

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

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

共有1个答案

羊越
2023-03-14

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

此外,在iText7中的PdfObject具有释放()方法,该方法将该对象从内存中释放出来,并且如果需要,该对象将被再次读取。但是如果您使用了很多高级API,那么释放()可能就没那么有用了,实际上创建几个PdfDocument实例可能会更有用和简单。

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

 类似资料:
  • STOMP规范规定订阅必须有id头。 https://stomp.github.io/stomp-specification-1.2.html#SUBSCRIBE_id_Header 订阅id标头 由于单个连接可以与服务器有多个打开的订阅,因此必须在框架中包含id标头以唯一标识订阅。id标头允许客户端和服务器将后续消息或取消订阅帧与原始订阅关联。在同一连接中,不同的订阅必须使用不同的订阅标识符。

  • Cap'n Proto是否支持分隔消息? 我的目标是将多条消息写入文件管道,并在写入时实时读取。 所以... > 解析器必须能够检测不完整的消息并等待。

  • 问题内容: 因此,我希望将其转换为这样的Java代码: JAXB是否可能? 曾经看到一些WebService Client存根生成器正在执行此操作,但也许不确定axis2 Webservice。 问题答案: 的 JAXB(JSR-222) 规范没有盖产生快速失败逻辑到域模型。现在,一种常见的做法是以注释(或XML)的形式表示验证规则,并对它们进行验证。 Bean验证(JSR-303) 对此进行了标

  • 问题内容: 我正在尝试执行一个简单的INSERT并返回标识(自动递增主键)。我试过了 我收到以下错误 SQLite是否支持SCOPE_IDENTITY? 如果可以,该如何使用? 如果不是,我(最好是“线程安全”)的替代方案是什么? 问题答案: 查看常见问题解答。该sqlite3_last_insert_rowid()函数将做到这一点。不过要小心触发器。

  • 我正在使用RDF4J工作台: 尽管我可以在github上的RDF4J存储库中看到对GeoSPARQL的引用,但目前似乎还没有实现。我在已清除的“带RDFS自旋支持的内存存储”存储库上运行了这个SPARQL更新查询,以在RDF4J工作台上设置测试: 这导致一个存储库具有一个事实。 现在,我尝试通过以下查询查找与文字多边形的重叠,该查询应该可以找到上面设置的一个事实: 此查询以HTML的形式给出了一个