JAVA用Freemarker生成word使用小结

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

JAVA用Freemarker生成word使用小结

肖教燎,2016年5月2日

一、制作word模板。

1、先使用记事本,将所需的文字录好,将所需的变量用英文字母表示(如

xinming,xinbie),变量尽量复杂一点,再拷入到word中,最好是word2003。

2、将word另存为Word 2003 XML格式。

3、可以将XML文件用可以可美化的软件打开,以便更好搜索。(非必要)

4、搜索变量,如搜索到xinming,将其改为${xinming},所有变量以此类推。

5、如果涉及到数据是一个集合,则需遍历数据,通常是表格中的数据,如word

模板中为一行,但要调用多行数据写入word。方法如下:搜索,如<#list users as user>;搜索随后的,后面加上;将集合里的变量用替代名替代,如${user},如果该list的变量是一个复杂变量,还可以是这种形式,如${ername}。

6、将文件的扩展名改为ftl。

二、生成word步骤及可能出现的问题。

1、下载freemarker,下载网址:

https:///projects/freemarker/?source=typ_redirect

2、主要有以下几个过程:创建freemarker.template.Configuration、freemarker.template.Template对象,将数据放入一个Map对象,调用Template.process方法,即生成新的word文档。

3、问题1:经常出现有FileNotFoundException问题,模块文件默认是放在类所在目录的(即src的相关目录下,这点很奇怪,一般我们会认为在项目根目录)。经研究官方的API,原来freemarker在加载模板时,建议使用TemplateLoader指定从哪个目录开始加载模板,并且将模板加载在缓存中,以TemplateLoader的两个实现类举例说明:

一是FileTemplateLoader文件模板加载器,可以通过文件的绝对路径加载模板:Configuration cfg = new Configuration();

TemplateLoadertemplateLoader=null;

templateLoader=new FileTemplateLoader(new File("项目根路径"));

String path="/WEB-INF/classes/com/xxx/tag/templates/page/xxx.ftl";

cfg.setTemplateLoader(templateLoader);

Template t=cfg.getTemplate(path,"UTF-8");

二是ClassTemplateLoader类模板加载器,通过指定类所在的目录来指定模板所在根路径,即指定类在哪个目录,那么这个目录就是加载模块文件的根目录:templateLoader=new ClassTemplateLoader(PageTag.class,"templates/");

cfg.setTemplateLoader(templateLoader);

Template t=cfg.getTemplate("work.ftl","UTF-8");

或者:

cfg.setClassForTemplateLoading(this.getClass(), "templates/");

Tmplatet = cfg.getTemplate("work.ftl");

三是对于web项目,并且使用了spring,则可以通过spring来配置你模板文件的根目录:

UTF-8

4、问题2:生成的word无法打开文档,因为xml有非法字符的问题。

如果使用new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile))),则生成的文件无法在word下打开,应设置编码格式,如下:

newBufferedWriter(new OutputStreamWriter(new

FileOutputStream(outFile),"UTF-8"));

三、生成word实例(已经过测试)。

环境:JavasSE-1.7、eclipse-jee-mars-2-win32-x86_64

1、制作word模板如下:

文件名定为:skmd.doc

另存为:skmd.xml

2、eclipse下建立项目test,导入freemarker.jar(Add External Archives…)

建立两个package:cn.xjl.print2word、cn.xjl.print2word.template。

将skmd.xml移至cn.xjl.print2word.template,将其中的变量进行修改。

bianji、teacher、danyindate分别修改为${bianji}、${teacher}、${danyindate}。

搜索到第二个

搜索随后,在后面加上,并将里面的xuhao、xuehao、xinming分别修改为:${xsheng.xuhao}、${xsheng.xuehao}、${xsheng.xinming}。

将文件名修改为skmd.ftl。

修改情况如下图:

相关文档
最新文档