1.使用FreeMarker模板引擎:模板数据模型=输出
1) FreeMarker模板:使用FreeMarker特定标签的纯文本文件。
2)数据模型:存储数据的数据结构,通常是散列存储结构(如: Hash)
3) FreeMarker框架负责将数据从一个数据模型合并到模板中,以生成输出。
2.将从属关系引入POM文件:
Dependency
GroupIdorg.freemarker/groupId
artifactidfreemarker/artifactidversion 2 . 3 . 23/version/dependency 3。创建模板文件:
将Word模板保存为XML格式的文档,然后将XML文档后缀保存为ftl修改为。
显示模板文件内容:
Html
头(电影)
meta http-equiv=' content-type ' content=' text/html;Charset=UTF-8 '
TitleInsert title here/title
/head
菩提
H1 $ {orgname}-$ {status}/h1
# if ' A '==' $ { answer1 } '
${orgName}……。
/#if
# if ' A '==' $ { answer2 } '
${orgName}成年即将到来
/#if
/body
/html4。测试工具类:
import Java . io . buffered writer;
import Java . io . file;
import Java . io . fileoutputstream;
import Java . io . outputstreamwriter;
import Java . io . writer;
Import Java。
import Java . util . *;
Import org。
Import org。Factory
Import
Import
Public class WordExportUtil {
private static logger logger=logger fac):
private static wordexportutil service=null;
Private WordExportUtil() {
超级();
}
public static wordexportutil getinstance(){
If(服务=空){
同步){
If(服务=空){
service=new WordExportUtil();
}
}
}
返回服务;
}
/* *
*
* @ param template file path eg :/template/te
* @param dataMap
* @ param export file path eg :/tmp/te
* @param loadType设置路径加载方法。1-绝对路径;2-项目相对路径
* @return
* @throws Exception
*/
public file create docfile(string template file path、mapstring、object data map、string export file path和int load type)
Template t=null
configuration configuration=new configuration);
con(' UTF-8 ');
Try {
template file path=path replace(template file path);
String ftlPath=(0,('/'));
If(加载类型==1) {
Con(新文件(ftl路径));//FTL文件所在的位置
}else {
Con()、ftl path);//类加载方式查找模板文件路径
}
string ftl file=('/')1);
T=con (ftl文件);//模板文件名
Fileoutfile=new file(导出文件路径);
Writer out=null
out=new buffered writer(new output stream writer(new file output stream(outfile)));
T.process(数据地图,输出);
} catch (Exception e) {
LOGGER.error(“导出word文档时出错”,e);
throw e;
}
Return null
}
/* *
将*路径中的\更改为/
* @param path
* @return
*/
private string path replace(string path){
While(路径!=空(' \ \') {
Path=('\\ ','/');
}
Return path
}
public static void main(string[]args){
Mapstring、object data map=new hashmapstring、object();
Getdata(数据地图);
string template file=' c : \ \ users \ \ admin \ \ desktop \ \医疗鉴定报告。FTL ';
string export file=' c : \ \ users \ \ admin \ \ desktop \ \医疗鉴定报告' calendar.millisecond '。
Try {
Wordex()。createdocfile(样板文件、数据映射、导出文件、1);
} catch (Exception e) {
//TODO Auto-generated catch block
e . printstacktrace();
}
}
/* *
*用于测试
* @param dataMap
*/
public static void getdata(mapstring、对象数据映射){
Da('orgName ',' * * * * * ');
Da('answer1 ',' A ');
Da('answer2 ',' A ');
Da(“状态”,“健康状况”);
}
}
5.语法参考
$ {.}: freemarker将输出实际值以替换花括号中的表达式。这些表达式称为interpolation(插值)。
FTL标签(FreeMarker模板的语言标签)的名称以#开头。(自定义FTL标签必须使用@而不是#。)。
注释:注释和HTML注释也相似,但用# - and -标识。与HTML注释不同,FTL注释不会出现在输出中。