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