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/