PDFBox api适用于较少数量的文件。但我需要将10000个pdf文件合并为一个,当我传递10000个文件(大约5gb)时,它会占用5gb ram并最终耗尽内存。 在PDFBox中是否有这样的要求的实现。 我尝试调整它,因为我使用AutoClosedInputStream,它在读取后自动关闭,但输出仍然相同。
答案 0 :(得分:1)
我在这里有类似的情况,但我只需要在一个文档中合并1000个文档。
我尝试使用PDFMergerUtility
课程,但我得到了OutOfMemoryError
。所以我重构了我的代码来读取文档,加载第一页(我的源文档只有一页),然后合并,而不是使用PDFMergerUtility。现在工作正常,不再有OutOfMemoryError
。
public void merge(final List<Path> sources, final Path target) {
final int firstPage = 0;
try (PDDocument doc = new PDDocument()) {
for (final Path source : sources) {
try (final PDDocument sdoc = PDDocument.load(source.toFile(), setupTempFileOnly())) {
final PDPage spage = sdoc.getPage(firstPage);
doc.importPage(spage);
}
}
doc.save(target.toAbsolutePath().toString());
} catch (final IOException e) {
throw new IllegalStateException(e);
}
}