liujie
2026-05-21 0e5d431f85612bf3abc0515fb6e46e500b5cdfe1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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);
    }
}