Как наиболее эффективно объединить 10000 pdf в один, используя pdfbox

PDFBox API хорошо работает для меньшего количества файлов. Но мне нужно объединить 10000 PDF-файлов в один, и когда я передаю 10000 файлов (около 5 ГБ), это занимает 5 ГБ оперативной памяти и, наконец, не хватает памяти. Есть ли реализация для такого требования в PDFBox. Я пытался настроить его для этого я использовал AutoClosedInputStream, который автоматически закрывается после чтения, но вывод остается тем же.

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

}

Другие вопросы по тегам