利用Freemarker生成word的使用(java)

首先向客户获得一份平时需要的word模板,将需要用程序填写的数据使用能够区分的字母,如XXXXX。

第二步就是把word模板,转化为xml文件(word可以另存为xml的),用EditorPlus等工具打开,注意字符编码,word的字符编码为utf-8,所以打开是最好是先不要改动,先看编码是否正确(不正确的改下字符编码),然后格式化一下xml文件,格式化后方面阅读(格式化,网上有很多在线格式化工具),然后寻找你刚才在word中留下的标记,把他们换成freemarker标记,其语法跟struts语法基本一致。

比如:

1、向freemarker传递一个对象,提取一个对象的属性值可以写成${report.planName}。

2、向freemarker传递一个集合,遍历一个集合可以:

<#listtable1_tr as  table1_td>  //遍历开始

${table1_td}
 //输出值

</#list>
  //遍历结束

3、如果遍历一个二维的集合

4、定义一个变量<#assignx=0 />

5、判断对象是否为空

<#ifQA.question??>

${QA.question}

</#if>

第三步输出word,如:

示例

Word模板是这样的

XMl是这样的:

接想来我们使用freemarker标记性语言对动态变化的数据进行处理,由简到难,我们先替换列表数据之外的数据, 每个标记不相同就行。如:

接下来我们替换列表数据,使用<#list>标签进行替换

在列表数据开头写<#list>

结尾写</#list>

替换中间部分

然后保存:

我的xml的保存文件名叫test2.xml.等下会用到这个

接下来开始写程序:

首先你要有这些;就是freemarker的开源包,百度一个,导入就好,

import freemarker.template.Configuration;

import freemarker.template.Template;

import freemarker.template.TemplateException;

TheFreemarker类:

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

public class TheFreemarker {
	private Configuration configuration = null;

	public TheFreemarker() {
		configuration = new Configuration();
		configuration.setDefaultEncoding("UTF-8");
	}

	public void createDoc() {
		// 要填入模本的数据文件
		Map dataMap = new HashMap();
		getData(dataMap);
		// 设置模本装置方法和路径
		// 这里我们的模板是放在src.model包下面
		configuration.setClassForTemplateLoading(this.getClass(),
				"model");
		Template t = null;
		try {
			t = configuration.getTemplate("test2.xml");	// 装载test2.xml模板
		} catch (IOException e) {
			e.printStackTrace();
		}
		// 输出文档路径及名称
		File outFile = new File("D:/outFileDoc.doc");
		Writer out = null;
		try {
			out = new BufferedWriter(new OutputStreamWriter(
					new FileOutputStream(outFile),"utf-8"));
		} catch (Exception e1) {
			e1.printStackTrace();
		}

		try {
			t.process(dataMap, out);
		} catch (TemplateException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 注意dataMap里存放的数据Key值要与模板中的参数相对应
	 * @param dataMap
	 */
	private void getData(Map dataMap) {
		dataMap.put("name", "小新与小白");//姓名 xml里的标记为${name}
		dataMap.put("Tdate", "2011-12-02");//时间 xml里的标记为${Tdate}
	dataMap.put("address", "北京海淀区");//时间 xml里的标记为${address}
		List table2 = new ArrayList();
		for (int i = 0; i < 5; i++) {
			Table2 t = new Table2();
			t.setApplyno("BBBBBBBB-BB");
			t.setCustname("小新");
			t.setLoandate("2012-12-12");
			t.setRegion("999-999");
			table2.add(t);
		}
		dataMap.put("table2", table2);
	}

Table2 为:

public class Table2 {
	private String applyno;

	private String custname;

	private String loandate;

	private String region;

	public String getApplyno() {
		return applyno;
	}

	public void setApplyno(String applyno) {
		this.applyno = applyno;
	}

	public String getCustname() {
		return custname;
	}

	public void setCustname(String custname) {
		this.custname = custname;
	}

	public String getLoandate() {
		return loandate;
	}

	public void setLoandate(String loandate) {
		this.loandate = loandate;
	}

	public String getRegion() {
		return region;
	}

	public void setRegion(String region) {
		this.region = region;
	}

测试类:

public class Pptest {
	public static void main(String[] args) {
		TheFreemarker tf=new TheFreemarker();
		tf.createDoc();
	}

}

执行结果:

说明

公用事业呼叫中心的质检简报模板制作,需要保证每个数据的名字不变,如果想改变需要自行修改后台代码及相应的实体类

实体类:com.haiyisoft.vo.entity.cc.repo.QCBriefReport

com.haiyisoft.vo.entity.cc.repo.QCBriefReportQATable

相关文章

freemarker导出word——让表格数据行数 列数自动变化

freemarker导出word——跟fusioncharts结合生成图、文word

时间: 2024-10-13 04:55:26

利用Freemarker生成word的使用(java)的相关文章

利用freemarker生成word,word另存为xml文件的标签解析

http://wenku.baidu.com/link?url=YxTZWVP3ssO-e_Br3LIZVq2xOQnqaSz8gLPiRUDN8NIR_wX2-Z25OqwbVn5kXqGiOFYUMBsaMlWcbHld565N5ENMBTrUOp_-rsrsjIMBlgi 1 public class WordUtil { 2 private Configuration configuration=null; 3 4 public WordUtil () { 5 configuration

freemarker生成word文档

利用freemarker生成word文档步骤: 导入jar包:freemarker-2.3.20.jar 新建word模板,调整好样式, word模板另存为2003 xml格式, xml中需要替换的内容用${param}替换,param为参数名称,例如:${name } ,传入参数map.put("name","张三"); 编写java代码,替换xml文档,导出. 1 /** 2 *@文件名称: CreateWord.java 3 *@日期: 2016-5-19 4

利用freemarker生成带fusioncharts图片的word简报

/** * 利用freemarker生成带fusioncharts图片的word简报 *         烟台海颐软件技术论坛 *         作者  牟云飞 新建 *         毕业于2013年山东中医药大学 *         qq:1147417467 *         </p> */

Java利用poi生成word(包含插入图片,动态表格,行合并)

转: Java利用poi生成word(包含插入图片,动态表格,行合并) 2018年12月20日 09:06:51 wjw_11093010 阅读数:70 Java利用poi生成word(包含插入图片,动态表格,行合并) 测试模板样式: Word生成结果: 图表 2需要的jar包:(具体jar可自行去maven下载) 注意:需要严格按照上面版本下载jar包,否则可能出现jar包之间不能匹配的导致代码报错 各种 jar包都可以在这里下载: https://mvnrepository.com/ Tes

使用FreeMarker生成Word文档

FreeMarker简介: FreeMarker是一款模板引擎:即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具,它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件. FreeMarker是免费的,基于Apache许可证2.0版本发布.其模板编写为FreeMarker Template Language(FTL),数据简单.专用的语言.需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算,之后模板显

java使用freemarker 生成word文档

java 生成word文档 最近需要做一个导出word的功能, 在网上搜了下, 有用POI,JXL,iText等jar生成一个word文件然后将数据写到该文件中,API非常繁琐而且拼出来的样式也不美观,于是选择了另一种方式----feemarker基于word模板的导出方式, 这种方式非常简单而且导出的样式美观, 其原理就是先做一个word模板, 该模板中变量数据用${xxx}这种方式填写, 然后再导出时只需读取模板然后用相应的数据替换其中的${xxx}即可. 一,简单模板导出(不含图片, 不含

Java Web项目中使用Freemarker生成Word文档

Web项目中生成Word文档的操作屡见不鲜,基于Java的解决方案也是很多的,包括使用Jacob.Apache POI.Java2Word.iText等各种方式,其实在从Office 2003开始,就可以将Office文档转换成XML文件,这样只要将需要填入的内容放上${}占位符,就可以使用像Freemarker这样的模板引擎将出现占位符的地方替换成真实数据,这种方式较之其他的方案要更为简单. 下面举一个简单的例子,比如在Web页面中填写个人简历,然后点击保存下载到本地,效果图如下所示. 打开下

从数据库中取出数据,使用freemarker生成word文档

这个星期做数据字典功能,有一项任务就是将数据库中的每个表的字段导出,生成word文档,在综合比较网上各种技术之后,参照csdn上骆豪的博客完成了任务. 骆昊的链接:http://blog.csdn.net/jackfrued/article/details/39449021 首先打开word文档,建立自己所需要的模板,然后将word保存为XML的格式,这里可能出现的一个问题就是需要填入的内容放上${}占位符的时候可能会出现字符分离的情况,所以建议先将需要用${}占位符的地方用中文写在word里然

FreeMarker生成word的代码

 用于生成word用的freemarker工具类 package com.ucap.netcheck.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; import java.i