一、 关键词
POI:Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能
POI-TL:基于Apache POI的Word模板引擎,通过插件机制使其具有高度扩展性
word格式:
1. doc:POI组件HWPF组件支持对doc文件的操作
2. docx:POI组件XWPF组件支持对docx文件的操作
3. POI-TL使用的是XWPF组件,所以更好的支持docx文件的操作。
二、 简单用法示例
1. 依赖
org.apache.poi
poi
4.1.0
org.apache.poi
poi-ooxml
4.1.0
com.deepoove
poi-tl
1.5.0
2. word模板
3. 初始化数据
public Map initWordData() throws Exception {
Map renderData = new HashMap<>();
// 文本标题
TextRenderData title = new TextRenderData("这是一个标题");
renderData.put("title", title);
// 文本副标题
TextRenderData subTitle = new TextRenderData("这是一个副标题");
renderData.put("sub_title", subTitle);
// 文本内容
StringBuilder contentValue = new StringBuilder()
.append("内容一")
.append(System.lineSeparator())
.append("内容二")
.append(System.lineSeparator())
.append("内容三")
.append(System.lineSeparator())
.append("内容四")
.append(System.lineSeparator())
.append("......");
TextRenderData content = new TextRenderData("00C1FF" ,contentValue.toString());
renderData.put("content", content);
// 作者信息
Map author = new HashMap<>();
author.put("name", "作者");
author.put("email", new HyperLinkTextRenderData("[email protected]","https://www.baidu.com"));
PictureRenderData avatar = new PictureRenderData(100, 100, ".jpg", BytePictureUtils.getUrlBufferedImage("https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1566878817&di=ecc0bc000703c669f5d660ca9bb70f17&src=http://img11.photophoto.cn/20090505/0035035789118626_s.jpg"));
author.put("avatar", avatar);
renderData.put("author", author);
// 表格1 (使用表格模板)
RowRenderData header = RowRenderData.build("单元格1", "单元格2");
RowRenderData row1 = RowRenderData.build("测试11", "测试12");
RowRenderData row2 = RowRenderData.build("测试21", "测试22");
List table1RenderData = new ArrayList<>();
table1RenderData.add(row1);
table1RenderData.add(row2);
MiniTableRenderData miniTableRenderData = new MiniTableRenderData(header, table1RenderData, MiniTableRenderData.WIDTH_A4_MEDIUM_FULL);
renderData.put("table1", miniTableRenderData);
// 表格2 (需要添加填充表信息策略)
List table2RenderData = new ArrayList<>();
table2RenderData.add(RowRenderData.build("张三","地址xxx"));
table2RenderData.add(RowRenderData.build("李四","地址xxx"));
renderData.put("table2", table2RenderData);
return renderData;
}
4. 定义现有表格填充数据策略
// 自定义表格填充策略
public class DetailTablePolicy extends DynamicTableRenderPolicy {
// 填充的起始行,
// 注意:行号从0开始
p