Когда и где вы закрываете PDDocument?

Я получаю массивы байтов нескольких 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-файлы. Или это нужно только в конце после сохранения?

Ответ Тилмана достаточно отвечает на ваш вопрос? Или еще есть открытые точки? Интересно, потому что вы не отметили его ответ как принятый.

mkl 26.03.2019 08:49
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
109
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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