10

我正在处理一些非常大的 PDF,有些超过 7GB。PDF 有多达 20,000 页和许多全页彩色图像。我想使用 PDFBox 来处理 PDF,但由于我尝试打开 PDF 时出现 OutOfMemoryError 的大小。

我正在使用 Intellij、java 6 在 Windows 7 上使用版本 pdfbox-app-1.6.0。

首先,我尝试编写一个简单的程序,该程序仅在 PDDocument 中打开 PDF 并将每个页面处理到另一个 PDDocument:http: //ideone.com/arKhB

接下来我尝试使用 PDFBox CopyDoc示例。

这两个示例都内存不足。

我假设这是因为 PDFBox 试图将整个文档读入内存。有没有办法让它一次只打开一页?我知道这会是较慢的处理,但目前我无法处理任何事情。

4

1 回答 1

13

在 2.0.* 版本中,像这样打开 PDF:

PDDocument doc = PDDocument.load(file, MemoryUsageSetting.setupTempFileOnly());

这会将缓冲内存使用设置为仅使用大小不受限制的临时文件(无主内存)。

17.4.2018 更新:FAQ中描述了更多节省内存的技巧。尚未描述但自 2.0.9 以来处于活动状态PDFRenderer.setSubsamplingAllowed(true),在进行渲染时会进行二次采样(跳过像素行/行)。这为包含大量图像文件的 PDF 文件节省了空间。

于 2016-08-09T20:09:32.390 回答