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();
|
}
|
}
|