Как наиболее эффективно объединить 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);
}
}