问题描述:使用work模板文件来生成word文件。
问题解决:1、使用apache poi 来生成word文件 2、使用Poi-tl生成
本章主要讲如何使用poi-tl通过模版文件生成word文件。
关于poi-tl
中文文档地址:https://github.com/Sayi/poi-tl/wiki/1.%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3
poi-tl 语法
所有的语法结构都是以 {{ 开始,以 }} 结束(在下一版本中,语法将支持自定义),文档的样式继承模板标签的样式,也可以在渲染数据中指定,实现了样式的最大自由化。
{{template}}
普通文本,渲染数据为:String或者TextRenderData
{{@template}}
图片,渲染数据为:PictureRenderData
{{#template}}
表格,渲染数据为:TableRenderData
{{*template}}
列表,渲染数据为:NumbericRenderData
{{template}}
普通文本,渲染数据为:String或者TextRenderData
{{@template}}
图片,渲染数据为:PictureRenderData
{{#template}}
表格,渲染数据为:TableRenderData
{{*template}}
列表,渲染数据为:NumbericRenderData
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>0.0.3</version>
</dependency>
2.使用方法
@org.junit.Test
public void testPicture(){
final String tt="asdfasdfa";
Map<String, Object> datas = new HashMap<String, Object>() {
{
//本地图片
put("photo", new PictureRenderData(100, 116, 图片路径+"/111.jpg"));
put("name","刘一刀");
put("oname","");
put("xb","男");
put("csrq","19900104");
put("mz","汉族");
put("zzmm","团员");
put("sfzjh","511024199001034543");
put("xjh","G511024199001034543");
put("txdz","四川省内江市威远县");
put("p191","1887282822");
put("thinkTable",new TableRenderData(new ArrayList<RenderData>() {
{
add(new TextRenderData("FFFFFF",tt));
add(new TextRenderData("FFFFFF", "活动时间或次数"));
}
}, new ArrayList<Object>() {
{
add("在成都唱歌在成都唱歌在成都唱歌在成都唱歌在成都唱歌;2");
add("在上海唱歌在上海唱歌在上海唱歌在上海唱歌在上海唱歌在上海唱歌在上海唱歌;3");
}
}, "no datas", 8600));
put("aaa",new NumbericRenderData(new ArrayList<TextRenderData>(){{
add(new TextRenderData("FF00FF", "活动内容"));
add(new TextRenderData("FF00FF", "活动时间或次数"));
add(new TextRenderData("FF00FF", "在成都唱歌在成都唱歌在成都唱歌在成都唱歌在成都唱歌;2"));
add(new TextRenderData("FF00FF", "在上海唱歌在上海唱歌在上海唱歌在上海唱歌在上海唱歌在上海唱歌在上海唱歌;3"));
}}));
// //本地图片byte数据
// put("localBytePicture", new PictureRenderData(100, 120, ".png", BytePictureUtils.getLocalByteArray(new File("src/test/resources/logo.png"))));
// //网路图片
// put("urlPicture", new PictureRenderData(100, 100, ".png", BytePictureUtils.getUrlByteArray("https://avatars3.githubusercontent.com/u/1394854?v=3&s=40")));
// // java 图片
// put("bufferImagePicture", new PictureRenderData(100, 120, ".png", BytePictureUtils.getBufferByteArray(bufferImage)));
}
};
XWPFTemplate template = XWPFTemplate.compile(模版文件目录+"/aaaa.docx")
.render(datas);
// XWPFTemplate template = XWPFTemplate.compile("/opt/gzkgfiles/template/evaluate/qarchive.docx")
// .render(datas);
FileOutputStream out;
try {
out = new FileOutputStream(输出路径+"/out_picture1.docx");
template.write(out);
out.flush();
out.close();
template.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
模版如下图:
输出结果如下: