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 + } +}