我正在尝试合并约15个PDF文件到一个单一的PDF文件。它的工作大部分时间,但有时会得到OutofMemory Java堆空间错误。我想避免临时文件的创建。下面是我的代码。
public static byte[] mergePdf(List < InputStream > inputStreams) {
Document document = new Document();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
PdfCopy copy = new PdfSmartCopy(document, byteArrayOutputStream);
document.open();
for (InputStream inputStream: inputStreams) {
PdfReader pdfReader = new PdfReader(inputStream);
copy.addDocument(pdfReader);
copy.freeReader(pdfReader);
pdfReader.close();
}
document.close();
return byteArrayOutputStream.toByteArray();
}
1条答案
按热度按时间hwamh0ep1#
如果你把它发送到OutputStream(例如通过http --这似乎是真的,因为你不想把它存储在磁盘上),那么不要使用中间的ByteArrayOutputStream(这是RAM的消耗)--直接把它发送到OutputStream--把OutputStream传递给创建pdf的方法,这样你就完全避免了把它保存在内存中。