Когда и где вы закрываете PDDocument? - PullRequest
0 голосов
/ 25 февраля 2019

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

1 Ответ

0 голосов
/ 25 февраля 2019

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

...