package com.estate.expert.admin.stat.report.render; import com.alibaba.fastjson.JSONObject; import com.deepoove.poi.policy.DynamicTableRenderPolicy; import lombok.AllArgsConstructor; import org.apache.poi.xwpf.usermodel.XWPFTable; import java.math.BigInteger; /** * 综合信息表格渲染策略 */ @AllArgsConstructor public class AbstractInfoTablePolicy extends DynamicTableRenderPolicy { private int style = 0; /** * 渲染综合信息表格 * @param table 表格 * @param data 数据 * @throws Exception 异常 */ @Override public void render(XWPFTable table, Object data) throws Exception { var abstractInfo = (JSONObject) data; var score = abstractInfo.getString("项目综合评分"); var level = abstractInfo.getString("项目综合评价"); var scoreMap = abstractInfo.getJSONObject("分项得分"); if(scoreMap == null) return; int index = 1; var keys = scoreMap.keySet().toArray(String[]::new); // reverse for(int i = keys.length - 1; i >= 0; i--){ var info = keys[i]; var value = scoreMap.getString(info); addCol(table, info, value, index++); } if(style == 0) addCol(table, "项目综合评分", score, index); else addCol(table, "项目综合评价", level, index); table.setWidth("100%"); // 将表格的列宽设置为均匀分布 for(int i = 0; i < index + 1; i++){ table.getRow(0).getCell(i).setWidth("1000"); table.getRow(1).getCell(i).setWidth("1000"); } table.getCTTbl().getTblGrid().getGridColArray(0).setW(BigInteger.valueOf(400)); } /** * 添加列 * @param table 表格 * @param title 标题 * @param content 内容 * @param index 索引 */ private void addCol(XWPFTable table, String title, String content, int index){ table.addNewCol(); var titleRow = table.getRow(0); var titleCell = titleRow.getCell(index); RenderHelper.renderContentCell(titleCell, title, true); var contentRow = table.getRow(1); var contentCell = contentRow.getCell(index); RenderHelper.renderContentCell(contentCell, content, false); } }