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 模板框架的更多相关文章

  1. 利用html模板生成Word文件(服务器端不需要安装Word)

    利用html模板生成Word文件(服务器端不需要安装Word) 由于管理的原因,不能在服务器上安装Office相关组件,所以只能采用客户端读取Html模板,后台对模板中标记的字段数据替换并返回给客户端 ...

  2. 根据PDF模板生成PDF文件(基于iTextSharp)

    根据PDF模板生成PDF文件,这里主要借助iTextSharp工具来完成.场景是这样的,假如要做一个电子协议,用过通过在线填写表单数据,然后系统根据用户填写的数据,生成电子档的协议.原理很简单,但是每 ...

  3. Java使用iText生成word文件的完美解决方案(亲测可行)

    JAVA生成WORD文件的方法目前有以下种: 一种是jacob 但是局限于windows平台 往往许多JAVA程序运行于其他操作系统 在此不讨论该方案 一种是pio但是他的excel处理很程序 wor ...

  4. Java根据Freemarker模板生成Word文件

    1.  准备模板 模板 + 数据 = 模型 1.将准备好的Word模板文件另存为.xml文件(PS:建议使用WPS来创建Word文件,不建议用Office) 2.将.xml文件重命名为.ftl文件 3 ...

  5. freemarker根据模板生成word文件实现导出功能

    一.准备工作 1.创建一个03的word文档,动态的数据用占位符标志占位(如testname).然后另存为word2003的xml文件. 2.格式化xml文件,占位符的位置用${testname}代替 ...

  6. java通过FreeMarker模板生成Excel文件之.ftl模板制作

    关于怎么通过freemarker模板生成excel的文章很多,关键点在于怎么制作模板文件.ftl 网上的办法是: (1)把Excel模板的格式调好,另存为xml文件 (2)新建一个.ftl文件,把xm ...

  7. 根据指定Word模板生成Word文件

    最近业务需要批量打印准考证信息 1.根据Table数据进行循环替换,每次替换的时候只替换Word中第一个Table的数据, 2.每次替换之后将Word中第一个Table数据进行复制,将复制Table和 ...

  8. 利用模板导出文件(二)之jacob利用word模板导出word文件(Java2word)

    https://blog.csdn.net/Fishroad/article/details/47951061?locationNum=2&fps=1 先下载jacob.jar包.解压后将ja ...

  9. 我是如何使用freemarker生成Word文件的?

    推荐:亲身体验,数次踩坑,遂撰写此文,以备各位不时之需. 背景 一天,产品经理递给我了一份word报告,我定睛一看 这个文档有大大小小的标题层级,还有排版好的段落.各种一目了然的饼图.走势图,当然还少 ...

随机推荐

  1. 9.spark Core 进阶2--Cashe

          RDD Persistence One of the most important capabilities in Spark is persisting (or caching) a d ...

  2. [转]nginx简易教程

    安装 nginx官网下载地址 发布版本分为 Linux 和 windows 版本. 也可以下载源码,编译后运行. 从源代码编译 Nginx 把源码解压缩之后,在终端里运行如下命令: $ ./confi ...

  3. redis笔记_源码_字典dict

    参考:https://redissrc.readthedocs.io/en/latest/datastruct/dict.html Expand: 条件: 新的table 大小: Rehash: 条件 ...

  4. session_unset和session_distory

    关于session_unset()和session_destroy()的函数使用进行介绍. session_unset() 释放当前在内存中已经创建的所有$_SESSION变量, 但不删除sessio ...

  5. thinkphp present标签

    present标签用于判断某个变量是否已经定义,用法: 大理石平台精度等级 <present name="name"> name已经赋值 </present> ...

  6. Spring事物管理机制简单学习

    首先spring并不直接管理事物,而是提供了多种事物管理器,他们将事务管理的职责委托给Hibernate或者JTA等持久化机制所提供的相关平台框架的事务来实现. Spring管理事物的接口是org.s ...

  7. 第十三篇:一点一滴学ibatis(二)映射文件

       首先给出一个常见的映射文件局部模板 <?xml version="1.0" encoding="utf-8" ?><!DOCTYPE s ...

  8. scrapy运行的整个流程

    Spiders: 负责处理所有的response,从这里面分析提取数据,获取Item字段所需要的数据,并将需要跟进的URL提交给引擎,再次进入到Scheduler调度器中 Engine: 框架的核心, ...

  9. inux下tcpdump命令的使用

    tcpdump | grep 120.241.0.223 tcpdump | grep 106.39.153.237 tcpdump host 172.31.140.147 and 120.241.0 ...

  10. JS数组 一起组团(什么是数组)一个数组变量可以存放多个数据

    一起组团(什么是数组) 我们知道变量用来存储数据,一个变量只能存储一个内容.假设你想存储10个人的姓名或者存储20个人的数学成绩,就需要10个或20个变量来存储,如果需要存储更多数据,那就会变的更麻烦 ...