Java 使用模板生成 Word 文件---基于 Freemarker 模板框架
Java项目引入 Freemarker 插件自行完成。
步骤如下:
- 、编写 Word 模板,并将模板中要用代码动态生成数据用 Freemarker 变量取代,即${变量名},如${username};
- 、把该 word 文档 另存为 xml 文件(格式选择 Word XML,注意是另存为,不是改扩展名为 xml),然后再改扩展名为 ftl;
- 、用编辑软件打开最后的 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://blog.csdn.net/ai_0922/article/details/82773466
https://www.cnblogs.com/qq742655/p/9003759.html
原文链接:
https://www.cnblogs.com/poterliu/p/11774854.html
Java 使用模板生成 Word 文件---基于 Freemarker 模板框架的更多相关文章
- 利用html模板生成Word文件(服务器端不需要安装Word)
利用html模板生成Word文件(服务器端不需要安装Word) 由于管理的原因,不能在服务器上安装Office相关组件,所以只能采用客户端读取Html模板,后台对模板中标记的字段数据替换并返回给客户端 ...
- 根据PDF模板生成PDF文件(基于iTextSharp)
根据PDF模板生成PDF文件,这里主要借助iTextSharp工具来完成.场景是这样的,假如要做一个电子协议,用过通过在线填写表单数据,然后系统根据用户填写的数据,生成电子档的协议.原理很简单,但是每 ...
- Java使用iText生成word文件的完美解决方案(亲测可行)
JAVA生成WORD文件的方法目前有以下种: 一种是jacob 但是局限于windows平台 往往许多JAVA程序运行于其他操作系统 在此不讨论该方案 一种是pio但是他的excel处理很程序 wor ...
- Java根据Freemarker模板生成Word文件
1. 准备模板 模板 + 数据 = 模型 1.将准备好的Word模板文件另存为.xml文件(PS:建议使用WPS来创建Word文件,不建议用Office) 2.将.xml文件重命名为.ftl文件 3 ...
- freemarker根据模板生成word文件实现导出功能
一.准备工作 1.创建一个03的word文档,动态的数据用占位符标志占位(如testname).然后另存为word2003的xml文件. 2.格式化xml文件,占位符的位置用${testname}代替 ...
- java通过FreeMarker模板生成Excel文件之.ftl模板制作
关于怎么通过freemarker模板生成excel的文章很多,关键点在于怎么制作模板文件.ftl 网上的办法是: (1)把Excel模板的格式调好,另存为xml文件 (2)新建一个.ftl文件,把xm ...
- 根据指定Word模板生成Word文件
最近业务需要批量打印准考证信息 1.根据Table数据进行循环替换,每次替换的时候只替换Word中第一个Table的数据, 2.每次替换之后将Word中第一个Table数据进行复制,将复制Table和 ...
- 利用模板导出文件(二)之jacob利用word模板导出word文件(Java2word)
https://blog.csdn.net/Fishroad/article/details/47951061?locationNum=2&fps=1 先下载jacob.jar包.解压后将ja ...
- 我是如何使用freemarker生成Word文件的?
推荐:亲身体验,数次踩坑,遂撰写此文,以备各位不时之需. 背景 一天,产品经理递给我了一份word报告,我定睛一看 这个文档有大大小小的标题层级,还有排版好的段落.各种一目了然的饼图.走势图,当然还少 ...
随机推荐
- buff/cache内存占用过多
通过free -m 查看到 buff/cache的值比较大,导致可使用的内存有120M左右了 通过下面的命令,清除缓存 echo 1 > /proc/sys/vm/drop_caches ech ...
- Qt Creator编译时提示找不到“ui_xxx.h”文件
解决方案: 在对应工程的*.pro文件里加上: QT+= widgets 则在编译过程中对应的“xxx.ui”文件会自动生成“ui_xxx.h”文件.
- Apache虚拟目录实现同一个IP绑定多个域名
在前:我使用的是Xampp,所以路径可能不同 找到apache\conf\extra\httpd-vhosts.conf, 如果没有的话请自己新建httpd-vhosts.conf文件, 并且在htt ...
- 廖雪峰Java16函数式编程-1Lambda表达式-1Lambda基础
1. 函数式编程 Java有2类方法: 实例方法:通过实例调用 静态方法:通过类名调用 Java的方法相当于过程式语言的函数 函数式编程(Functional Programing): 把函数作为基本 ...
- ibator配置文件说明文档
1. <classPathEntry> 属性名 说明 示例 location 数据库驱动文件路径 lib/mysql-connector-java-5.1.6-bin.jar 2. ...
- Oracle连接字符串总结
Oracle XE 标准连接 Oracle XE(或者"Oracle Database 10g Express Edition")是一个简单免费发布的版本. 以下是语法格式: Dr ...
- Android Matrix理论与应用详解
转:http://zensheno.blog.51cto.com/2712776/513652 Matrix学习——基础知识 以前在线性代数中学习了矩阵,对矩阵的基本运算有一些了解,前段时间在使用GD ...
- js单线程
由于js是运行在单线程上的,所有浏览器单独开启一个线程来处理事件消息的轮询,避免阻塞js的执行.
- ThinkPHP 的缓存大概多久更新一次
ThinkPHP 的缓存大概多久更新一次可以自己设置: thinkPHP的缓存默认是文件缓存,保存在Runtime文件夹里面, 如果不设置过期时间,且不清除Runtime文件,就会一直存在. 如果设置 ...
- 解决ubuntu16.04鼠标键盘自动休眠导致的失灵问题
sudo vi /etc/laptop-mode/conf.d/runtime-pm.conf 把 AUTOSUSPEND_RUNTIME_DEVTYPE_BLACKLIST="" ...