如何以最有效的方式使用pdfbox将10000 pdf合并为一个

时间:2016-07-06 08:51:39

标签: pdfbox

PDFBox api适用于较少数量的文件。但我需要将10000个pdf文件合并为一个,当我传递10000个文件(大约5gb)时,它会占用5gb ram并最终耗尽内存。 在PDFBox中是否有这样的要求的实现。 我尝试调整它,因为我使用AutoClosedInputStream,它在读取后自动关闭,但输出仍然相同。

1 个答案:

答案 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);
}

}