package com.estate.expert.admin.stat.report.render; import com.deepoove.poi.data.PictureRenderData; import com.deepoove.poi.data.Pictures; import com.deepoove.poi.policy.PictureRenderPolicy; import com.estate.expert.admin.service.UserFileService; import lombok.AllArgsConstructor; /** * 自定义图片渲染策略 */ @AllArgsConstructor public class CustomPictureRenderPolicy extends PictureRenderPolicy { private UserFileService userFileService; /** * 渲染图片 * @param source 源 * @return 图片渲染数据 * @throws Exception 异常 */ @Override public PictureRenderData cast(Object source) throws Exception { var id = (Integer)source; var file = userFileService.get(id); if(file == null){ return null; } var resource = userFileService.resolveResource(file); if(resource == null){ return null; } // 设置图片尺寸:宽度8.8cm,高度6.8cm // Word中1cm ≈ 37.795像素(96 DPI),所以8.8cm ≈ 333像素,6.8cm ≈ 257像素 var data = Pictures.ofStream(resource.getInputStream()).size(333, 257).create(); return super.cast(data); } }