xwpftemplate的时间设置_Java操作Word('docx'), 填充模板文件并转为pdf

Java操作Word('docx'), 填充模板文件并转为pdf

1. pom相关依赖工具poi-tl (操作word文档模板) + jacob (将操作后的word模板转为pdf)

com.deepoove

poi-tl

1.9.1

com.jacob

jacob

1.17

system

${project.basedir}/src/main/resources/lib/jacob.jar

2. 对word模板进行插入数据操作使用poi-tl操作word需要创建一个用于向word插入数据的Map集合, word模板中标签格式为"{ {标签}}", 其中标签内容为Map 的key.

98cb7cf90bc1dd4a17ee964f0e9d6759.gif// 项目根路径

String abPath = new File("").getAbsolutePath() + "/src/main/resources";

// 创建用于插入数据的Map

Map map = new HashMap<>();

map.put(, );

...

// 填充word文档

XWPFTemplate template = XWPFTemplate.compile(abPath + "").render(map);

// 输出文档

template.writeAndClose(new FileOutPutStream(""));

3. 对word模板的表格执行插入数据操作(动态表格)使用poi-tl操作word的表格,动态的插入数据,需要用到poi-tl的可选插件进行自定义渲染策略, 首先在word需要操作的表格中的任意单元格添加标签“{ {标签}}”

98cb7cf90bc1dd4a17ee964f0e9d6759.gif自定义渲染策略/**

* 自定义渲染策略

*

* @author

*/

public class DetailTablePolicy extends DynamicTableRenderPolicy {

// 表格起始行行数

int tableStartRow = 1;

/**

* 自定义渲染策略

*

* @data 传入的封装好的数据

*/

@Override

public void render(XWPFTable table, Object data) throws Exception {

// 如果数据为空,直接返回

if (null == data) return;

// 封装数据List的数据封装对象

NdrwhkhzbData detailData = (NdrwhkhzbData) data;

// 获取当前列表行高

int height = table.getRow(2).getHeight();

// 从封装对象中获取数据集合

List datas = detailData.getNdrwhkhzbs();

if (null != datas) {

// 循环移除空白表格中数据数量的空白行

for (int i = 1; i 

table.removeRow(i);

}

// 循环插入数据

for (int i = 0; i 

// 新增一行空白行

XWPFTableRow insertNewTableRow = table.insertNewTableRow(tableStartRow);

// 设置行高

insertNewTableRow.setHeight(height);

// 循环添加单元格(4为每行单元格数量)

for (int j = 0; j 

insertNewTableRow.createCell();

}

// 填充表格

TableRenderPolicy.Helper.renderRow(table.getRow(tableStartRow), datas.get(i));

}

}

}

}把自定义渲染策略当做工具类, 在主逻辑中直接配置使用/**

* 操作年度任务和考核指标表

*

* @throws IOException 输入输出流异常

*/

private void createNdrwhkhzb(Integer uid, String dirPath) throws IOException {

PageData datas = new PageData();

NdrwhkhzbData detailTable = new NdrwhkhzbData();

List nds = new ArrayList<>();

// 根据uid查询年度任务和考核指标数据

List list = ndrwhkhzbService.selectNdrwhkhzbByUid(uid);

for (NdrwhkhzbEntity ndrwhkhzbEntity : list) {

RowRenderData rrd = Rows.of(ndrwhkhzbEntity.getNd(), ndrwhkhzbEntity.getNdrw(), ndrwhkhzbEntity.getNdkhzb()

, ndrwhkhzbEntity.getZyrwdsjjd()).center().create();

nds.add(rrd);

}

detailTable.setNdrwhkhzbs(nds);

datas.setNdrwhkhzbData(detailTable);

// 配置表格

Configure config = Configure.builder().bind("detail_table", new DetailTablePolicy()).build();

// 调用渲染策略进行填充

XWPFTemplate template =

XWPFTemplate.compile(dirPath + "/" + uid + "_Complete.docx", config).render(datas);

// 写入表格中

template.writeToFile(dirPath + "/" + uid + "_Complete.docx");

}用到的一些实体类// PageData

public class PageData {

@Name("detail_table")

private N

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值