何时何地关闭 PDDocument?
When and where do you close a 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);
}
然后我将合并的 Pdf 保存到文件中:
mergedPdf.save("c:\temp\mergeddoc.pdf");
我现在的问题是:我在哪里调用这些 pddocuments 的 close() 方法?
这是在加载它们之后吗?但这意味着我无法再与他们合作,因为我已经关闭了 pdf。
还是只在我保存后才需要?
如果您在保存目标文档后对源文档调用 close()
是最安全的。旧的 PDFBox 2.0.* 版本中存在错误,其中目标 PDF 仍然保留对源 PDF 的引用——通常这些是标记的 PDF。即将发布(可能在 3 月)的 2.0.14 版本修复了所有这些错误,希望您可以在调用 appendDocument()
后关闭源 PDF。显然不能加载后直接调用close()
,因为appendDocument()
.
需要文档
我从后端源获取了几个 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);
}
然后我将合并的 Pdf 保存到文件中:
mergedPdf.save("c:\temp\mergeddoc.pdf");
我现在的问题是:我在哪里调用这些 pddocuments 的 close() 方法?
这是在加载它们之后吗?但这意味着我无法再与他们合作,因为我已经关闭了 pdf。
还是只在我保存后才需要?
如果您在保存目标文档后对源文档调用 close()
是最安全的。旧的 PDFBox 2.0.* 版本中存在错误,其中目标 PDF 仍然保留对源 PDF 的引用——通常这些是标记的 PDF。即将发布(可能在 3 月)的 2.0.14 版本修复了所有这些错误,希望您可以在调用 appendDocument()
后关闭源 PDF。显然不能加载后直接调用close()
,因为appendDocument()
.