使用itext合并PDF时内存不足Java堆空间

jc3wubiy  于 2022-10-30  发布在  Java
关注(0)|答案(1)|浏览(336)

我正在尝试合并约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();
}
hwamh0ep

hwamh0ep1#

如果你把它发送到OutputStream(例如通过http --这似乎是真的,因为你不想把它存储在磁盘上),那么不要使用中间的ByteArrayOutputStream(这是RAM的消耗)--直接把它发送到OutputStream--把OutputStream传递给创建pdf的方法,这样你就完全避免了把它保存在内存中。

相关问题