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);
    }
  }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
POI-tl是一个基于Apache POIJava库,用于动态生成Word文档。它提供了一种简单而强大的方式来根据Word模板生成具有动态内容的文档。在使用POI-tl进行动态导出Word文档时,你需要在模板中定义需要替换的标记,并在代码中使用POI-tl的API来填充这些标记。 首先,你需要在项目中添加POI-tl的依赖。具体的依赖配置可以参考\[1\]中提供的文章。 然后,你需要准备一个Word模板,其中包含需要动态填充的内容。在模板中,你可以使用自定义的标记来标识需要替换的部分。这些标记可以是任意的字符串,但需要与代码中的标记保持一致。 接下来,在代码中,你可以使用POI-tl的API来加载模板并替换其中的标记。你可以使用POI-tl提供的方法来设置文本、图片、表格、页眉、页脚等内容。具体的使用方法可以参考\[3\]中提供的教程。 最后,你可以将生成的Word文档导出到文件或直接在浏览器中下载。你可以使用POI-tl提供的方法来实现导出功能。具体的导出方法可以参考\[2\]中提供的代码示例。 总结起来,使用POI-tl动态导出Word文档的步骤包括添加依赖、准备模板、替换标记、导出文档。希望这些信息对你有帮助。 #### 引用[.reference_title] - *1* *2* [SpringBoot+Poi-tl根据Word模板动态生成word(含动态表格、合并单元格)](https://blog.csdn.net/qq_26383975/article/details/112238802)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [poi-tl导出word](https://blog.csdn.net/weixin_43580824/article/details/129549483)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值