java - PDFBox:处理非常大的 PDF。

标签 java pdfbox

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

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

首先,我尝试编写一个简单的程序,它只是在 PDDocument 中打开 PDF 并将每一页复制到另一个 PDDocument:http://ideone.com/arKhB

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

两个例子都耗尽了内存。

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

最佳答案

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

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

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

2018 年 4 月 17 日更新:FAQ 中描述了更多节省内存的技巧。 .尚未描述但处于 Activity 状态,因为 2.0.9 在进行渲染时使用 PDFRenderer.setSubsamplingAllowed(true) 进行子采样(跳过像素行/行)。这为包含大量图像文件的 PDF 文件节省了空间。

关于java - PDFBox:处理非常大的 PDF。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11301818/

相关文章:

java - 创建我自己的右键单击事件

java - 如何使用 PDFBOX 从 pdf 中删除整个书签

java - 如何在jackson中处理不同类型但相同键的json

Java Pong 游戏从桨中弹起球

java - 使用图像 JavaFX 创建图像边框

java - 使用 Apache PDFBox 提取文本时出现错误字符?

java - 使用 pdfbox 在 PDF 中获取正确(旋转)的图像尺寸

java - PDF框2.0 : invisible lines on rotated page - clip path issue

java - 使用 pdfbox 2.0.X jar 进行文本提取

java - 使用 SwingUtilities.invokeLater 专注于 JDialog?