Java PDFBox:使用非常大的PDF。

Java PDFBox:使用非常大的PDF。,java,pdfbox,Java,Pdfbox,我正在使用一些非常大的PDF,一些尺寸超过7GB。PDF有多达20000页和许多全页彩色图像。我想使用PDFBox来处理PDF,但由于我在尝试打开PDF时从内存错误中得到的大小 我正在使用Intellij,java 6在Windows 7上使用pdfbox-app-1.6.0版本 首先,我试着编写一个简单的程序,在一个PDDocument中打开PDF,并将每个页面复制到另一个PDDocument: 接下来,我尝试使用PDFBox示例 两个示例都耗尽了内存 我假设这是因为PDFBox试图将整个文档

我正在使用一些非常大的PDF,一些尺寸超过7GB。PDF有多达20000页和许多全页彩色图像。我想使用PDFBox来处理PDF,但由于我在尝试打开PDF时从内存错误中得到的大小

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

首先,我试着编写一个简单的程序,在一个PDDocument中打开PDF,并将每个页面复制到另一个PDDocument:

接下来,我尝试使用PDFBox示例

两个示例都耗尽了内存


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

在2.0.*版本中,按如下方式打开PDF:

PDDocument doc = PDDocument.load(file, MemoryUsageSetting.setupTempFileOnly());
这将设置缓冲内存使用,以便仅使用大小不受限制的临时文件(无主内存)


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

请参见“可能将PDF文件拆分为一个列表,循环列表,一次读取一定数量的页面”。@DNA-感谢您的链接。在发布之前,我已经检查了所有标有PDFBox的问题,但在搜索过程中遗漏了那个问题。@Pengo你有没有找到解决这个问题的方法?理论上,您可能只是增加了-Xmx20000M或更多的内存使用,并使用了虚拟内存或安装了更多。我的PDF要小得多,在保存操作期间,它们使用20 GB的内存。我被告知没有办法避免这一点,只是一个图书馆问题。嗨,我也有同样的问题,但我正在处理pdf文件中的单词(文本)。我试图在一个pdf文件中索引1000万个单词,但它给了我内存不足的错误:java堆空间。我试过你上面的建议,但仍然不能解决问题。还有其他想法吗?使用-Xmx增加内存。并始终确保您使用的是最新的PDFBox版本。我使用的是PDFBox 2.0。我还尝试改变-Xmx。它仍然会从记忆中消失,2.0是什么?那么-Xmx值是多少?我在工作中使用-Xmx1g,有时使用-Xmx4g。如果它仍然不这样做,最好是共享PDF,这是复制错误的最小可能代码,并用它创建一个新问题。但我想知道什么样的PDF文件会超过一百万字?我只是想通过压力测试看看PDFbox能处理多少这样的问题。