java poi-tl处理world动态表格

简单的模板处理可以参考以下链接:

https://blog.csdn.net/liushimiao0104/article/details/78520120

我用的是一下版本

    
      com.deepoove
      poi-tl
      1.4.2
    

关于poi-tl

poi-tl:poi template language 一个基于poi的word模板生成文档的开源组件。

文档介绍:http://deepoove.com/poi-tl/

GitHub地址:https://github.com/Sayi/poi-tl

1、关于动态表格的处理,文档已经写的比较详情了,我只做简单的实际运用的介绍

detail_table:问表格定义的参数名,可以写在模板表格的任意位置。

DetailTablePolicy:自己建的class,用于处理这个表格,

这行代码相当于这个获取了这个表格交给这个类处理。

关于此处的文件路径,只做参考,项目框架不一样,以及系统不一样可能获取文件的路径有点差异。如果文件找不到需要自己去处理。

Configure config = Configure.newBuilder().customPolicy("detail_table", new DetailTablePolicy()).build();
XWPFTemplate template = XWPFTemplate.compile("src/test/resources/付款通知书.docx", config).render(datas);

如果world有多个数据需要自定义表格的话,换成以下写法

 	Configure configs=Configure.createDefault();
    	configs.customPolicy("Table1",  new DetailTablePolicy());
    	configs.customPolicy("Table2",  new DetailTablePolicy());    	
        XWPFTemplate template = XWPFTemplate.compile(worldTemplate,configs);
        template.render(dataMap);

datas,数据,一般是map

ldatas.put("detail_table",null);

      Style headTextStyle = new Style();
      TableStyle headStyle = new TableStyle();
      TableStyle rowStyle = new TableStyle();

      headTextStyle.setFontFamily("Hei");
      headTextStyle.setFontSize(9);
      headTextStyle.setColor("000000");
      
 
      List headArr=new ArrayList();
      for (int i = 0; i < 3; i++) {           
          RowRenderData header = RowRenderData.build(new TextRenderData("姓名",headTextStyle), new TextRenderData("电话",headTextStyle));
          headArr.add(header);
        }
      
      
      datas.put("detail_table", headArr);

2、编写DetailTablePolicy类

table就是这个获取的表格,可以操作此表格的位置信息,

data就是detail_table的数据,数据自己定义,因为我自己的数据需要控制字体大小,所有用的List 的格式。

import com.deepoove.poi.NiceXWPFDocument;
import com.deepoove.poi.data.RowRenderData;
import com.deepoove.poi.policy.DynamicTableRenderPolicy;
import com.deepoove.poi.policy.MiniTableRenderPolicy;
import java.util.List;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;

/**
 * Created by on 2019/5/28.
 */
public class DetailTablePolicy extends DynamicTableRenderPolicy {

  // 货品填充数据所在行数
  //int goodsStartRow = 2;
  // 人工费填充数据所在行数
  int laborsStartRow = 1;

  @Override
  public void render(XWPFTable table, Object data) {
    if (null == data) return;
   // DetailData detailData = (DetailData) data;

    List labors =(List)data;
    if (null != labors) {
      table.removeRow(laborsStartRow);
      // 循环插入行
      for (int i = 0; i < labors.size(); i++) {
        XWPFTableRow insertNewTableRow = table.insertNewTableRow(laborsStartRow);
        //处理一行有几列        
            for (int j = 0; j < 2; j++)	insertNewTableRow.createCell();

        // 合并单元格
       // NiceXWPFDocument.mergeCellsHorizonal(table, laborsStartRow, 0, 3);
        MiniTableRenderPolicy.renderRow(table, laborsStartRow, labors.get(i));
      }
    }

 
  }

}

表格样式控制可参考

https://github.com/Sayi/poi-tl/blob/master/src/test/java/com/deepoove/poi/tl/example/PaymentExample.java

提示:如果是world转PDF,下载的功能,用springboot框架打包,发布到windows上,需要在c盘的windows->system32,文件下放入jacob-1.19-x64.dll文件,项目也需要使用jacob-1.19.jar包。

你可能感兴趣的:(poi-tl)