From 8cb310ef93dbc4c15cd25386d42a25c0b57a6cba Mon Sep 17 00:00:00 2001 From: SawyerYong Date: Sat, 18 Feb 2023 07:27:35 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3PDF=E8=BD=AC=E5=9B=BE?= =?UTF-8?q?=E7=89=87,=E5=86=85=E5=AD=98=E6=97=A0=E6=B3=95=E5=9B=9E?= =?UTF-8?q?=E6=94=B6=E5=AF=BC=E8=87=B4=E7=9A=84OOM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: SawyerYong --- .../cn/keking/service/FileHandlerService.java | 2 ++ .../service/cache/NotResourceCache.java | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 server/src/main/java/cn/keking/service/cache/NotResourceCache.java diff --git a/server/src/main/java/cn/keking/service/FileHandlerService.java b/server/src/main/java/cn/keking/service/FileHandlerService.java index 9bf6b1b7..4c55204b 100644 --- a/server/src/main/java/cn/keking/service/FileHandlerService.java +++ b/server/src/main/java/cn/keking/service/FileHandlerService.java @@ -4,6 +4,7 @@ import cn.keking.config.ConfigConstants; import cn.keking.model.FileAttribute; import cn.keking.model.FileType; import cn.keking.service.cache.CacheService; +import cn.keking.service.cache.NotResourceCache; import cn.keking.utils.KkFileUtils; import cn.keking.utils.WebUtils; import com.aspose.cad.CodePages; @@ -198,6 +199,7 @@ public class FileHandlerService { return null; } PDDocument doc = PDDocument.load(pdfFile); + doc.setResourceCache(new NotResourceCache()); int pageCount = doc.getNumberOfPages(); PDFRenderer pdfRenderer = new PDFRenderer(doc); diff --git a/server/src/main/java/cn/keking/service/cache/NotResourceCache.java b/server/src/main/java/cn/keking/service/cache/NotResourceCache.java new file mode 100644 index 00000000..1fd70918 --- /dev/null +++ b/server/src/main/java/cn/keking/service/cache/NotResourceCache.java @@ -0,0 +1,20 @@ +package cn.keking.service.cache; + +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.pdmodel.DefaultResourceCache; +import org.apache.pdfbox.pdmodel.graphics.PDXObject; + +import java.io.IOException; + +/** + * @author: Sawyer.Yong + * @since: 2023/02/18 14:45 + * 解决图片 SoftReference 导致内存无法被回收导致的OOM, 详见 https://issues.apache.org/jira/browse/PDFBOX-3700 + */ +public class NotResourceCache extends DefaultResourceCache { + + @Override + public void put(COSObject indirect, PDXObject xobject) throws IOException { + // do nothing + } +}