poitl动态表格

花了三天时间学会了poitl的动态表格的用法,

package com.occamedu;

import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.data.RowRenderData;
import com.deepoove.poi.data.Rows;
import com.deepoove.poi.data.TableRenderData;
import com.deepoove.poi.policy.HackLoopTableRenderPolicy;
import com.deepoove.poi.util.TableTools;
import com.occamedu.bean.good;
import com.occamedu.poiTestDemo.DetailTablePolicy;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author xlf
 * @team occam
 * @email 956324914@qq.com
 * @date 2021/4/4 20:48
 * @description
 */
public class testDemo {

    public static String testWordTemplate = "D:/template.docx";
    public static String testRenderWordPath = "D:/template_2.docx";
    public static String testPDFPath = "D:/template.pdf";
    private static String wordTemplatePath = "C:\\Users\\Administrator\\Desktop\\O型学霸知识传输服务确认函模板.docx";
    private static String RenderWordPath = "C:\\Users\\Administrator\\Desktop\\template_2.docx";

    public static void renderWord(String param) throws IOException {

        //good list创建
        good good = new good("xlf","xxx","aa","asdf");
        good good1 = new good("xxx","xlf","aa","adfsgd");
        good good2 = new good("xxx","xxx","xxx","xxx");
        List<good> goods = new ArrayList<>();
        goods.add(good);
        goods.add(good1);
        goods.add(good2);

        RowRenderData data = Rows.of("aaa","xxa",
                "aaa","aaa").center().create();
        RowRenderData data1 = Rows.of("aaa","xxa","aaf","aaf").center().create();
        List<RowRenderData> list = new ArrayList<>();
        list.add(data);
        list.add(data1);
        good1.setGoods(list);

        //将数据装入map中
        Map<String,Object> datas = new HashMap<>();
        datas.put("name",param);
        datas.put("numbertobe",goods);
//        datas.put("total",100);
        datas.put("course",list);


        HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy(true);
        //配置,渲染
        Configure config = Configure.builder()
                .bind("numbertobe",policy)
                .bind("course",new DetailTablePolicy())
                .build();
        XWPFTemplate template = XWPFTemplate.compile(testWordTemplate,config).render(
                datas
        );
        FileOutputStream out;
        template.writeToFile(testRenderWordPath);
        template.close();

    }

    public static void main(String[] args) throws IOException {
        String s = "s";
        int year = 2021;
        String month = "12";
        StringBuilder mon = new StringBuilder();
        if (month.length() == 1) {
            mon.append(0).append(month);
        } else {
            mon.append(month);
        }
        String mont = mon.toString();
        String param = s.concat("s").concat("p").concat("xlf").concat(String.valueOf(year).substring(2)).concat(mont);
        renderWord(param);
//        PdfUtil.doc2pdf("C:\\Users\\Administrator\\Desktop\\template_2.docx","C:\\Users\\Administrator\\Desktop\\template_2.pdf");
    }

}

package com.occamedu.poiTestDemo;

import com.deepoove.poi.data.RowRenderData;
import com.deepoove.poi.policy.DynamicTableRenderPolicy;
import com.deepoove.poi.policy.TableRenderPolicy;
import com.deepoove.poi.util.TableTools;
import com.occamedu.bean.good;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;

import java.util.ArrayList;
import java.util.List;

public class DetailTablePolicy extends DynamicTableRenderPolicy {

  @Override
  public void render(XWPFTable table, Object data) throws Exception {
    // 货品填充数据所在行数
    int goodsStartRow = 2;
    if (null == data) {
      return;
    }
    List<RowRenderData> goods = (List<RowRenderData>)data;
     if (goods != null) {
      table.removeRow(goodsStartRow);
      for (int i = 0; i < goods.size(); i++) {
        XWPFTableRow insertNewTableRow = table.insertNewTableRow(goodsStartRow);
        for (int j = 0; j < 4; j++) {
          insertNewTableRow.createCell();
        }
        TableRenderPolicy.Helper.renderRow(table.getRow(goodsStartRow), goods.get(i));
      }
      TableTools.mergeCellsVertically(table,1,2,3);
      TableTools.mergeCellsVertically(table,0,2,3);
    }
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值