码迷,mamicode.com
首页 > 编程语言 > 详细

Java 使用模板生成 Word 文件---基于 Freemarker 模板框架

时间:2019-11-01 09:59:46      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:desktop   user   back   static   red   格式   软件   tor   很多   

Java项目引入 Freemarker 插件自行完成。

 

步骤如下:

1、编写 Word 模板,并将模板中要用代码动态生成数据用 Freemarker 变量取代,即${变量名},如${username};

2、把该 word 文档 另存为 xml 文件(格式选择 Word 2003 XML,注意是另存为,不是改扩展名为 xml),然后再改扩展名为 ftl;

3、用编辑软件打开最后的 ftl 文件,并用查找功能查找第一步中定义的变量名,如:username,

就会发现 Word 软件在将 Word 转为 xml 过程中,在${username}之前插入了很过多余的字符(通常是 Word 中带有的格式),将第一步中定义的所有变量名全部还原为${变量名} 的格式,即:删除${username} 插入的多余字符。这步特别重要,直接决定了后面能够正确将数据落到模板中

如下图:${username}  之间被插入了很多的格式字符,所以需要将黄线部分的字符串删除。

技术图片

 

 

 4、执行代码,将模板中的变量用数据填充进去

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;

import freemarker.template.Configuration;
import freemarker.template.Template;

public class FreeMarkerUtils {
    
    
    
    public static void main(String[] args) {
        try {
            Map<String,String> dataMap = new HashMap<String,String>();
            dataMap.put("clinicName", "爱齿口腔(滨海门诊部)");
            dataMap.put("username", "张三");
            dataMap.put("phone", "23456789876");
            dataMap.put("IDNo", "130803299911211789");
            dataMap.put("gender", "男");
            dataMap.put("birthday", "1998-11-21");
            dataMap.put("RightUp", "右上1");
            dataMap.put("LeftUp", "左上1");
            dataMap.put("RightDown", "右下1");
            dataMap.put("LeftDown", "左上1");
            dataMap.put("opearationDate", "2019-11-01");
            dataMap.put("amountDaXie", "壹佰伍拾元整");
            dataMap.put("amount", "150.00");
            dataMap.put("currentDate", "2019年11月01日");
            dataMap.put("currentDate", "2019年11月01日");
            
            Configuration configuration = new Configuration();
            configuration.setDefaultEncoding("utf-8");
            //指定模板路径的第二种方式,我的路径是D:/      还有其他方式
            configuration.setDirectoryForTemplateLoading(new File("C:/Users/user/Desktop"));
            
            // 输出文档路径及名称
            File outFile = new File("D:/test.doc");
            //以utf-8的编码读取ftl文件
            Template t =  configuration.getTemplate("6_种植牙手术意外投保单(4)-2003-3.ftl","utf-8");
            Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"),10240);
            t.process(dataMap, out);
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
}

 

 

 

 

 

参考:

https://www.cnblogs.com/xinde123/p/8581963.html

https://www.cnblogs.com/cnsdhzzl/p/10644597.html

 

原文链接:

https://www.cnblogs.com/poterliu/p/11774854.html

 

Java 使用模板生成 Word 文件---基于 Freemarker 模板框架

标签:desktop   user   back   static   red   格式   软件   tor   很多   

原文地址:https://www.cnblogs.com/poterliu/p/11774854.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!