pdfbox处理pdf操作转换图片 Caused by: java.lang.OutOfMemoryError: Java heap space内存溢出
·
前言
pdfbox会文件小非常耗内存, 容易内存溢出 Caused by: java.lang.OutOfMemoryError: Java
heap space
一、优化方案
1.使用此代码加载文件来使用临时文件
PDDocument document = PDDocument.load(file.getInputStream(), MemoryUsageSetting.setupTempFileOnly()
Api
public static PDDocument load(InputStream input) throws IOException {
return load((InputStream)input, "", (InputStream)null, (String)null, MemoryUsageSetting.setupMainMemoryOnly());
}
public static PDDocument load(InputStream input, MemoryUsageSetting memUsageSetting) throws IOException {
return load((InputStream)input, "", (InputStream)null, (String)null, memUsageSetting);
}
2.及时关闭使用try-resouces关闭不用的流
try (PDDocument document = PDDocument.load(file.getInputStream(), MemoryUsageSetting.setupTempFileOnly()
))
3.设置下采样
PDFRenderer pdfRenderer = new PDFRenderer(document);
//允许下采样
pdfRenderer.setSubsamplingAllowed(true);
4.renderImageWithDPI 的dpi分辨率设置小一点最好不要超过300dpi,耗时量大容易崩溃
BufferedImage bim = pdfRenderer.renderImageWithDPI(page, dpi, ImageType.RGB);
5.设置xmx(设置jvm内存)
原配置
nohup java -jar -Xms128m -Xmx512m
改为
nohup java -jar -Xms1g -Xmx2g
6.DefaultResourceCache.java里的put方法用了SoftReference:无法回收
解决方案重写继承 DefaultResourceCache类的put方法不做任何处理
@Override
public void put(COSObject indirect, PDXObject xobject) throws IOException {
xobjects.put(indirect, new SoftReference<PDXObject>(xobject));
}
7.分页处理及时释放不用的流
// 释放资源
bim.flush();
// 关闭PDF文档
document.close();
pdf转图片上传oss预览
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)