从多个文档创建整理时,java.lang.OutOfMemoryError:服务器中出现Java堆空间错误,应用程序关闭。
下面是一个示例代码段,
PdfReader objReader = new PdfReader(new ByteArrayInputStream(content));
PdfDocument srcPdfDocument = new PdfDocument(objReader);
Document srcDocument = new Document(srcPdfDocument);
WriterProperties wp = new WriterProperties();
wp.setPdfVersion(PdfVersion.PDF_1_7);
PdfDocument destPdfDoc = new PdfDocument(new PdfWriter(baos,wp));
Document destDocument = new Document(destPdfDoc);
PdfMerger merger = new PdfMerger(destPdfDoc, true,true);
merger.merge(srcPdfDocument, 1, srcPdfDocument.getNumberOfPages());
//finally block
finally{
if(srcPdfDocument != null && !srcPdfDocument.isClosed()) {
srcPdfDocument.close();
}
if(srcDocument != null) {
srcDocument.close();
}
if(destPdfDoc != null && !destPdfDoc.isClosed()) {
destPdfDoc.close();
}
if(destDocument != null) {
destDocument.close();
}
}
如果整理了大型文档(文件大小,以GB为单位)或标记结构损坏的文档(服务器日志中的错误-com.itextpdf.kernel.pdf.tagging.ParentTreeHandler标记结构损坏:遇到无效的标记内容引用-不会'不会引用任何页面或任何mcid。此内容引用将被忽略),将引发内存不足错误。
有什么方法可以整理文档而不将字节保留在内存中
使用Itext7。请注意,使用Itext 5(PdfCopy),该功能可以正常工作而不会出现问题。