用 Freemarker 生成 word 文档1. 用word写一个需要导出的word模板,然后存为xml格式2. 将xml中需要动态修改内容的地方,换成freemarker的标识符,例如: ${year} 年度工作报告 3. 用代码生成: import freemarker.template.Configuration; import freemarker.template.Template; import java.io.*; import java.util.HashMap; import java.util.Map; /** * @Class name: CreateDoc * * Short description on the purpose of the program. * @author : youfeng * @modified : 8/29/11 */ public class CreateDoc { private Configuration configuration = null; public CreateDoc() { configuration = new Configuration(); configuration.setDefaultEncoding("utf-8"); } public void create() throws Exception { Map map = new HashMap(); map.put("date", "2011"); map.put("modifyDate", "2011/8/29"); map.put("modifyUser", "Zhu You Feng"); configuration.setClassForTemplateLoading(this.getClass(), "/docTemplate/"); Template t = configuration.getTemplate("doc1.ftl"); File outFile = new File("D:/outFile.doc"); Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile))); t.process(map, out); } public static void main(String[] args) throws Exception { new CreateDoc().create(); } } 添加图片如果你需要在word中添加图片,那你就在第一步制作模板时,加入一张图片占位,然后打开xml文档,可以看到如下的一片base64编码后的代码:1 iVBORw0…(很省略很省略)…CC只要将base64的代码替换成例如:${image},如下:1 ${image}这里要注意“>${image}<”这尖括号中间不能加任何其他的诸如空格,tab,换行等符号。
然后用代码生成: import freemarker.template.Configuration; import freemarker.template.Template; import sun.misc.BASE64Encoder; import java.io.*; import java.util.HashMap; import java.util.Map; /** * @Class name: CreateDoc * @author: youfeng * @modified: 8/29/11 */ public class CreateDocWithImage { private Configuration configuration = null; public CreateDocWithImage() { configuration = new Configuration(); configuration.setDefaultEncoding("utf-8"); } public void create() throws Exception { Map map = new HashMap(); map.put("year", "2011"); map.put("person", "Zhu You Feng"); map.put("image", getImageStr()); configuration.setClassForTemplateLoading(this.getClass(), "/docTemplate/"); Template t = configuration.getTemplate("doc2.ftl"); File outFile = new File("D:/outFile.doc"); Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile))); t.process(map, out); } private String getImageStr() { String imgFile = "d:/test.jpg"; InputStream in = null; byte[] data = null; try { in = new FileInputStream(imgFile); data = new byte[in.available()]; in.read(data); in.close(); } catch (IOException e) { e.printStackTrace(); } BASE64Encoder encoder = new BASE64Encoder(); return encoder.encode(data); } public static void main(String[] args) throws Exception { new CreateDocWithImage().create(); } } 自定义载入模板 import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; import sun.misc.BASE64Encoder; import java.io.*; import java.util.HashMap; import java.util.Map; public class DocumentGenerator { private Configuration configuration = null; public static void main(String[] args) throws Exception { Map map = new HashMap(); map.put("date", "2012"); map.put("modifyDate", "2011/8/29"); map.put("modifyUser", "Zhu You Feng"); new DocumentGenerator().createDoc("", "D:/outFile2.doc", map); } public DocumentGenerator() { configuration = new Configuration(); configuration.setDefaultEncoding("utf-8"); configuration.setClassicCompatible(true); configuration.setTemplateLoader(new ByteArrayStreamTemplateLoader(new ByteArrayInputStream( getBytesFromFile(new File("D:/ownProject/freemarkerToDoc/src/main/resources/docTemp。