我正在尝试通过 iText 合并 1000 个 PDF 文件。我不确定内存泄漏发生在哪里。下面是示例代码。请注意,我将在合并到父文件后立即删除子 pdf 文件。请指出下面代码中的错误,或者有没有更好的方法可以在没有内存概念的情况下做到这一点。这个过程是通过 servlet(不是独立程序)完成的

FileInputStream local_fis = null;
BufferedInputStream local_bis = null;
File localFileObj = null;
for(int taIdx=0;taIdx<totalSize;taIdx++){
    frObj = (Form3AReportObject)reportRows.get(taIdx);
    localfilename = companyId + "_" +  frObj.empNumber + ".pdf";

    local_fis = new FileInputStream(localfilename);
    local_bis = new BufferedInputStream(local_fis);
    pdfReader = new PdfReader(local_bis);

    cb = pdfWriter.getDirectContent();
    document.newPage();
    page = pdfWriter.getImportedPage(pdfReader, 1);
    cb.addTemplate(page, 0, 0);
    local_bis.close();
    local_fis.close();

    localFileObj = new File(localfilename);
    localFileObj.delete();
}
document.close();

最佳答案

您可能想尝试以下操作(为清楚起见,异常处理、文件关闭和删除已删除):

for(int taIdx = 0; taIdx < totalSize; taIdx++) {
    Form3AReportObject frObj = (Form3AReportObject)reportRows.get(taIdx);

    localfilename = companyId + "_" +  frObj.empNumber + ".pdf";

    FileInputStream local_fis = new FileInputStream(localfilename);

    pdfWriter.freeReader(new PdfReader(local_fis));

    pdfWriter.flush();
}

pdfWriter.close();

关于java - 通过 iText 合并 1000 个 PDF 会引发 java.lang.OutOfMemoryError : Java heap space,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1260895/

10-16 07:01