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报告,我定睛一看 这个文档有大大小小的标题层级,还有排版好的段落.各种一目了然的饼图.走势图,当然还少 ...
随机推荐
- 【转】40个Java多线程问题总结
文章转自 五月的仓颉 http://www.cnblogs.com/xrq730/p/5060921.html 前言 Java多线程分类中写了21篇多线程的文章,21篇文章的内容很多,个人认为,学习, ...
- stelller插件与background-attachment配合使用,制作滚动页面
stelller插件与background-attachment:fixed配合使用,制作滚动页面
- css样式初始化代码总结
编写css样式之前需要初始化css样式,总结如下: /* CSS Document */ html, body, div, span, object, iframe,h1, h2, h3, h4, h ...
- Emacs基本操作说明
- thingkphp 路由实例
我们已经了解了如何定义路由规则,下面我们来举个例子加深印象. 假设我们定义了News控制器如下(代码实现仅供参考): namespace Home\Controller; use Think\Cont ...
- IDEA被删除的模块在编译时会再次出现
工程根目录下.idea文件->compiler.xml,删除多余的model,workspace.xml->删除带有无用的target标签
- (转)ActiveMQ 使用场景
转:http://306963591.iteye.com/blog/1044166 ActiveMQ 安装测试就不做介绍了,下面我说说ActiveMQ 使用场景. 1.非均匀应用集成 ActiveMQ ...
- 深刻理解Vue中的组件
转载:https://segmentfault.com/a/1190000010527064 --20更新: Vue2.6已经更新了关于内容插槽和作用域插槽的API和用法,为了不误导大家,我把插槽的内 ...
- vue之样式问题
在样式开发过程中,有两个问题比较突出: 全局污染 —— CSS 文件中的选择器是全局生效的,不同文件中的同名选择器,根据 build 后生成文件中的先后顺序,后面的样式会将前面的覆盖: 选择器复杂 — ...
- MFC 窗口刷新防止闪烁方法
防止窗口闪烁的方法 1.将Invalidate()替换为InvalidateRect(). Invalidate()会导致整个窗口的图象重画,需要的时间比较长,而InvalidateRect()仅仅重 ...