1.word另存为xml;2.xml文件后缀名改成ftl;3.编写完整json字符串备用;4.修改ftl中动态字段为json中对应字段名;5.编写java代码自动生成word文件;(注意:换行用<w:br/>)

消防设施故障维修记录表.doc:

package freemarkerExportWord;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map; import dto.EmergencyMaintenanceItem;
import freemarker.template.Configuration;
import freemarker.template.Template;
import net.sf.json.JSONObject; public class FreemarkerExportWordTest2 {
public static void main(String[] args){
try {
test();
} catch (Exception e) {
e.printStackTrace();
}
} private static void test() throws Exception{
/** 初始化配置文件 **/
Configuration configuration = new Configuration();
/** 设置编码 **/
configuration.setDefaultEncoding("utf-8");
/** 我的ftl文件是放在G盘的**/
String fileDirectory = "G:\\freemarker导出word\\2";
/** 加载文件 **/
configuration.setDirectoryForTemplateLoading(new File(fileDirectory));
/** 加载模板 **/
Template template = configuration.getTemplate("消防设施故障维修记录表.ftl");
/** 准备数据 **/
Map<String,Object> dataMap = new HashMap<String,Object>();
String maintenanceData = "{\"emergencyMaintenanceItem\":{\"emergencyMaintenances\":[{\"maintenanceTime\":\"2018-06-27 16:31:53\",\"maintenanceMans\":\"张三\",\"faultLocation\":\"出口加工区大楼2层\",\"record\":\"\",\"safetyMeasure\":\"大多数阿苏飞洒地方阿斯蒂芬啊撒反对\",\"applyMan\":\"加工区\",\"faultDetail\":\"请尽快解决\",\"maintenanceMethod\":\"啊十分大师傅的发生阿斯顿\",\"applyTime\":\"2018-04-23 14:12:20\",\"stopSystem\":\"\",\"confirm\":\"东方不败\"},{\"maintenanceTime\":\"2018-06-26 16:33:39\",\"maintenanceMans\":\"李四\",\"faultLocation\":\"\",\"record\":\"\",\"safetyMeasure\":\"发顺丰打大师傅撒旦发阿斯顿发顺丰打啊\",\"applyMan\":\"\",\"faultDetail\":\"\",\"maintenanceMethod\":\"阿斯顿发生阿斯蒂芬阿三\",\"applyTime\":\"\",\"stopSystem\":\"\",\"confirm\":\"123\"}]}}";
fillDate(dataMap,maintenanceData);
/** 指定输出word文件的路径 **/
String outFilePath = "G:\\freemarker导出word\\2\\消防设施故障维修记录表.doc";
File docFile = new File(outFilePath);
FileOutputStream fos = new FileOutputStream(docFile);
Writer out = new BufferedWriter(new OutputStreamWriter(fos, "utf-8"),10240);
template.process(dataMap,out); if(out != null){
out.close();
}
} private static void fillDate(Map<String,Object> dataMap,String maintenanceData) {
@SuppressWarnings("static-access")
JSONObject obj = new JSONObject().fromObject(maintenanceData);//将json字符串转换为json对象
JSONObject emergencyMaintenanceObj = obj.getJSONObject("emergencyMaintenanceItem"); EmergencyMaintenanceItem emergencyMaintenanceItem = (EmergencyMaintenanceItem)JSONObject.toBean(emergencyMaintenanceObj,EmergencyMaintenanceItem.class);
dataMap.put("emergencyMaintenanceItem",emergencyMaintenanceItem); }
}

  

freemarker导出word档的更多相关文章

  1. freemarker导出word文档——WordXML格式解析

    前不久,公司一个项目需要实现导出文档的功能,之前是一个同事在做,做了3个星期,终于完成了,但是在项目上线之后却发现导出的文档有问题,此时,这个同事已经离职,我自然成为接班者,要把导出功能实现,但是我看 ...

  2. freemarker导出word文档

    使用freemarker导出word文档的过程 **************************************************************************** ...

  3. 使用Freemarker导出Word文档(包含图片)代码实现及总结

    .personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...

  4. freemarker导出word带图片

    导出word带图片 如果你需要在word中添加图片,那你就在第一步制作模板时,加入一张图片占位,然后打开xml文档,可以看到如下的一片base64编码后的代码: <w:binData w:nam ...

  5. 关于使用freemarker导出文档的使用

    7.FreeMarker导出word文件,模板:template.ftl/** * 为word加载数据插值 * * @throws IOException */ public void exportW ...

  6. freemarker导出word的一些问题

    首先,了解下freemarker导出word的流程: 参考https://www.cnblogs.com/llfy/p/9303208.html 异常一: freemarker.core.ParseE ...

  7. 关于使用freemarker导出word

    java使用FreeMarker导出word 一.      先做一个word模板 二.      将该word文件另存为xml格式(注意是另存为,不是直接改扩展名) 三.     打开xml文件把要 ...

  8. Java使用freemarker导出word文档

    通过freemarker,以及JAVA,导出word文档. 共分为三步: 第一步:创建模板文件 第二步:通过JAVA创建返回值. 第三步:执行 分别介绍如下: 第一步: 首先创建word文档,按照想要 ...

  9. java freemarker导出word时添加或勾选复选框

    最近项目导出word碰到一个需求,要求根据数据动态的决定word里的复选框是否勾选, 公司导出word用的是freemarker,相比较其他技术,freemarker可以很容易的控制输出样式, 在wo ...

随机推荐

  1. java集合的三种遍历方式

    import java.util.ArrayList;  import java.util.Collection;import java.util.Iterator;public class Home ...

  2. [C++ Primer Plus] 第9章、内存模型和名称空间(一)程序清单

    程序清单9.9(静态存储连续性.无链接性) #include<iostream> using namespace std; ; void strcount(const char *str) ...

  3. Elasticsearch .net client NEST 5.x 使用总结

    目录: Elasticsearch .net client NEST 5.x 使用总结 elasticsearch_.net_client_nest2.x_到_5.x常用方法属性差异 Elastics ...

  4. 【新特性】JDK11

    随着JDK11正式发布,带来了许多新的特性.本文主要介绍JDK11的部分新特性和新的API. 一.Local Var 在Lambda表达式中,可以使用var关键字来标识变量,变量类型由编译器自行推断. ...

  5. Python连接redis时要注意的点

    一.一般连接redis情况 from redis import Redis # 实例化redis对象 rdb = Redis(host='localhost', port=6379, db=0) rd ...

  6. Visual Studio 2019 double clicking project(custom behavior)

    Issue

  7. docker入门实例

    Docker 是什么? 我们在理解 Docker 之前,首先得先区分清楚两个概念,容器和虚拟机. 每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用. 每一台虚拟机包括应 ...

  8. @keyframs实现图片gif效果

    页面中使用动效图 一般让设计出一个gif格式的图,但是git图效果都很差,有一个替代gif图做动效的方法:使用@keyframes 具体思路: 1.设计两个互斥的图片(相当于把gif图分割成一帧一帧的 ...

  9. “妄”眼欲穿之CSS 居中问题

    妄:狂妄: 不会的东西只有怀着一颗狂妄的心,假装能把它看穿吧. 作为一个什么都不会的小白,为了学习,特别在拿来主义之后写一些对于某些css布局的总结,进一步加深对知识的记忆.知识是人类的共同财富,中华 ...

  10. selenium-xpath练习