java_exp_word_freemarker

来源:互联网 发布:信用卡使用心得 知乎 编辑:程序博客网 时间:2024/05/20 05:55
 

1.   说明

        word2003及以上版本文件格式支持xml,利用这一功能,以及freemarker的模板绑订数据功能,输出与模板格式一致的word文档。

2.   使用word编辑模板

        例如:x_form1.docx

3.   替换word模板中的变量

        将word模板中的变量替换成单字符变量,例如a,b,c…1,2,3等。

        例如:x_form2.docx

        注意:以上为方便区分,变量用特殊颜色表示,但在实际开发时,需根据实际模板设定格式。

4.   将替换后的word模板另存为xml

        将其另存为xml格式文档,例如以上文档另存为[x_form.xml]。

5.   将xml修改为freemarker模板

        使用xml编辑工具(例如foxe)将xml中变量替换成freemarker形式的变量,例如:

        循环使用freemarker的循环方式,例如:

6.   编写代码实现导出word

TestXForm.java

import java.io.File;import java.io.FileOutputStream;import java.io.OutputStreamWriter;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Locale;import java.util.Map; import test.freemarker.TestBrandexit;import freemarker.template.Configuration;import freemarker.template.Template; public class TestXForm {                  public static void main(String[] args) throws Exception {                                      Configuration cfg = new Configuration();                   cfg.setEncoding(Locale.getDefault(), "UTF-8");                   cfg.setClassForTemplateLoading(TestBrandexit.class, "/template/");                   Template t = cfg.getTemplate("x_form.xml", "UTF-8");                   Map rootMap = new HashMap();                   rootMap.put("var_a", "a_content");                   rootMap.put("var_b", "b_content");                   rootMap.put("var_1", "1_content");                   rootMap.put("var_2", "2_content");                   rootMap.put("var_3", "3_content");                   rootMap.put("var_4", "4_content");                   rootMap.put("var_5", "5_content");                   rootMap.put("var_6", "6_content");                   rootMap.put("var_7", "7_content");                   rootMap.put("var_8", "8_content");                   List lst = new ArrayList();                   List lst1 = new ArrayList();                   lst1.add("第1行第1列");                   lst1.add("第1行第2列");                   lst1.add("第1行第3列");                   lst1.add("第1行第4列");                   List lst2 = new ArrayList();                   lst2.add("第2行第1列");                   lst2.add("第2行第2列");                   lst2.add("第2行第3列");                   lst2.add("第2行第4列");                   List lst3 = new ArrayList();                   lst3.add("第3行第1列");                   lst3.add("第3行第2列");                   lst3.add("第3行第3列");                   lst3.add("第3行第4列");                   lst.add(lst1);                   lst.add(lst2);                   lst.add(lst3);                   rootMap.put("lst", lst);                   OutputStreamWriter out = new OutputStreamWriter(                                     new FileOutputStream(                                                        new File("d:\\x_form.doc")), "UTF-8");                   t.process(rootMap, out);                   System.out.println("处理成功!");                            }         }


7.   实现效果

8.   补充说明

8.1.  第3步替换模板中变量的原因

        由于多字符变量,在另存为xml文件时,可能会被word存到不同标签下,为第5步修改freemarker模板带来麻烦。

8.2.  修改已编辑好的freemarker模板

        对于编辑好的xml模板,如再使用word修改格式,切勿再另存为xml,直接保存即可,

避免另存时word将freemarker变量拆分到不同标签下,导绑订数据异常。

8.3.  其它

        最好将每个步骤的文档都留有备份,在备不时之需。

Foxe下载地址:http://www.firstobject.com/dn_editor.htm

免费pdf虚拟打印机:

TinyPDF:http://www.tinypdf.com/

BullzipPDFPrinter:http://www.bullzip.com/ 

Pdfcreator:http://sourceforge.net/projects/pdfcreator/

 

原创粉丝点击