Я получаю массивы байтов нескольких PDF-файлов из бэкэнд-источника.
Я загружаю все эти массивы байтов в PDDocuments и добавляю их в список, например:
List<PDDocument> pdfs = new ArrayList<>();
for (...the amount of bytearrays...) {
PDDocument pdf = PDDocument.load(bytearray);
pdfs.add(pdf);
}
Затем я объединяю эти PDF-файлы в один PDDocument:
PDDocument mergedPdf = new PDDocument();
PDFMergerUtility PDFmerger = new PDFMergerUtility();
for(...all pdfs in list...) {
PDFmerger.appendDocument(mergedPdf, pdf);
}
Затем я сохраняю mergedPdf в файл:
mergedPdf.save("c:\temp\mergeddoc.pdf");
Теперь мой вопрос: где я могу вызвать метод close() для этих pddocuments?
Это после загрузки? Но тогда это означает, что я больше не могу с ними работать, потому что я закрыл pdf-файлы.
Или это нужно только в конце после сохранения?




Вы в безопасности, если вызовете close() исходные документы после сохранения целевого документа. В более старых версиях PDFBox 2.0.* были ошибки, из-за которых в целевом PDF-файле сохранялись ссылки на исходные PDF-файлы — обычно это были тегированные PDF-файлы. Надеемся, что в версии 2.0.14, которая будет выпущена в ближайшее время (вероятно, в марте), все эти ошибки исправлены, и вы сможете закрыть исходный PDF-файл после вызова appendDocument(). Очевидно, что вы не можете вызвать close() сразу после загрузки, потому что документ нужен для appendDocument().
Ответ Тилмана достаточно отвечает на ваш вопрос? Или еще есть открытые точки? Интересно, потому что вы не отметили его ответ как принятый.