云
3 小时以前 1bbfbb26d3ef0b91e06f3074a73bf9f22c3fcfc7
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
42
43
44
45
46
47
48
49
50
51
52
53
package com.ruoyi.common.utils;
 
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.exception.RenderException;
import com.deepoove.poi.policy.RenderPolicy;
import com.deepoove.poi.template.ElementTemplate;
import com.deepoove.poi.template.run.RunTemplate;
import org.apache.poi.xwpf.usermodel.XWPFRun;
 
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
 
/**
 * 日期格式化渲染策略,避免 poi-tl 直接调用 Date.toString() 输出带时区的英文格式
 */
public class DateFormatRenderPolicy implements RenderPolicy {
 
    private final String pattern;
    private final DateTimeFormatter dateTimeFormatter;
 
    public DateFormatRenderPolicy(String pattern) {
        this.pattern = pattern;
        this.dateTimeFormatter = DateTimeFormatter.ofPattern(pattern);
    }
 
    @Override
    public void render(ElementTemplate eleTemplate, Object data, XWPFTemplate template) {
        XWPFRun run = ((RunTemplate) eleTemplate).getRun();
        try {
            run.setText(format(data), 0);
        } catch (Exception e) {
            throw new RenderException("DateFormatRender for " + eleTemplate + " error: " + e.getMessage(), e);
        }
    }
 
    private String format(Object data) {
        if (data == null) {
            return "";
        }
        if (data instanceof Date date) {
            return DateUtils.parseDateToStr(pattern, date);
        }
        if (data instanceof LocalDateTime dateTime) {
            return dateTime.format(dateTimeFormatter);
        }
        if (data instanceof LocalDate date) {
            return date.format(dateTimeFormatter);
        }
        return data.toString();
    }
}