java通过poi-tl使用word模版生成word文件

问题描述:使用work模板文件来生成word文件。

问题解决:1、使用apache poi 来生成word文件  2、使用Poi-tl生成 

本章主要讲如何使用poi-tl通过模版文件生成word文件。



关于poi-tl

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

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

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

代码地址:见github的junit测试用例 


中文文档地址: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


poi-tl使用

1.首先在工程中引用poi-tl:


    com.deepoove
    poi-tl
    0.0.3

2.使用方法
  @org.junit.Test
    public void testPicture(){
    	final String tt="asdfasdfa";
    	Map datas = new HashMap() {
			{
				//本地图片
				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() {
					{
						add(new TextRenderData("FFFFFF",tt));
						add(new TextRenderData("FFFFFF", "活动时间或次数"));
					}
				}, new ArrayList() {
					{
						add("在成都唱歌在成都唱歌在成都唱歌在成都唱歌在成都唱歌;2");
						add("在上海唱歌在上海唱歌在上海唱歌在上海唱歌在上海唱歌在上海唱歌在上海唱歌;3");
					}
				}, "no datas", 8600));
				put("aaa",new NumbericRenderData(new ArrayList(){{
					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();
		}
	
    }




模版如下图:

java通过poi-tl使用word模版生成word文件_第1张图片




输出结果如下:



java通过poi-tl使用word模版生成word文件_第2张图片

你可能感兴趣的:(java)