Java导出freemarker实现下载word文档格式功能
首先呢,先说一下制作freemarker模板步骤,
1. 在WPS上写出所要的下载的word格式当做模板
2. 把模板内不固定的内容(例:从数据库读取的信息)写成123或者好代替的文字标注
3. 把固定模板另存为htm或者html格式
4. 用文本编辑器(例:EditPlus,HBuilder等工具)打开模板,并将标注内容替换成 ${要获取的字段} 这种格式,类似于传参数,可以传多个参数
5. 将修改后的模板保存,并将后缀名改为ftl格式。至此 我们的freemarker模板就大功告成了
PS: 最好将建好的模板放到文件夹内,方便统一管理。
如果是web项目,模板之类的最好放在/WEB-INF/下,不是web项目的话最好放在classpath下。
其次,就是将制作好的模板导入到项目里的步骤了
1. 第一步肯定是把制作好的模板放到指定的路径并且导入freemarker的jar包,这个是毋庸置疑的吧
2. 我们需要在Spring配置文件内加上以下这么一段代码
<bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/config/template/" /> <!-- 这里的value就填写我们的模板加载路径 -->
<property name="freemarkerSettings"> <!-- 配置freemarker环境属性 -->
<props>
<prop key="template_update_delay">0</prop> <!-- 刷新模板的周期,单位为秒 -->
<prop key="default_encoding">GBK</prop> <!-- 设置默认编码格式 -->
<prop key="locale">zh_CN</prop> <!-- 设置语言环境信息-->
</props>
</property>
</bean>
3. 接下来我们就要编写我们的下载模板类啦(在这里我采用了数据库加载模式加载我们的Freemarker模板文件)


如上图所示 我们的调用模板也就写好啦,接下来的就是方法的调用和添加参数问题了
4. 方法的调用和添加参数
添加参数:
private void getData(Map<String, Object> dataMap) {
String param1 = " 参数一 ";
String param2 = " 参数二 ";
... 参数有几个就创建几个
dataMap.put("param1", param1);
dataMap.put("param2", param2);
... 参数有几个就添加几个
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
for (int i = 0; i < list.size(); i++) {
Map<String,Object> map = new HashMap<String,Object>();
map.put("number", i);
map.put("content", "内容"+i);
list.add(map);
dataMap.put("list", list);
}
}
方法调用:
public void downLoad(Map<String, Object> dataMap)throws Exception {
getData(dataMap);
String templateName = "pinggu.ftl"; // 模板文件名
String filePath = "D:/downLoad"; // 输出文档路径
String fileName = "评估意见.docx"; // 输出文件名称
String modelPath = request.getSession().getServletContext().getRealPath("/") + "WEB-INF/template/ftl/"; // 模板文件路径
CancerUtil.createDoc(dataMap,fileName,templateName,filePath,modelPath);
}
至此 我们的实现下载word文档格式功能就完成了 下一章呢,我想写一下我对加载freemarker模板路径三个方法的理解和认识,希望大家指出我的错误
Java导出freemarker实现下载word文档格式功能的更多相关文章
- freemarker导出带图片的word文档
最近做一个关于文档导出功能, 顺便学习了下freemarker,做了个关于导出带图片的word文档,模板并没有写全,只是验证代码的正确性 这只是做一个小功能,故只做了后台代码关于导出的代码,并未与前台 ...
- Java jacob调用打印机打印word文档
前面说了Java如何生成复杂的Word文档,今年记录下Java如何调用打印机打印word文档. 起初用的是自带的PrintJob,但是系统提供的打印机制并不成熟完整.网上的代码也是千篇一律,在我的打印 ...
- C#导出文本内容到word文档源码
将做工程过程中较好的代码片段珍藏起来,下面的代码内容是关于C#导出文本内容到word文档的代码,希望能对小伙伴们也有好处.<%@ Page Language="C#" Aut ...
- 关于PowerDesigner导出数据库表到word文档
关于PowerDesigner导出数据库表到word文档 一.查看全部模板: powerdesigner默觉得我们提供了非常多的模版,在工具栏中选择[Report(报告)--->Report T ...
- 用java语言通过POI实现word文档的按标题提取
最近有一个项目需要将一个word文档中的数据提取到数据库中.就去网上查了好多资料,最靠谱的就是用poi实现word文档的提取. 喝水不忘挖井人,我查了好多资料就这个最靠谱,我的这篇博客主要是借鉴htt ...
- Java 如何在线打开编辑word文档?
在一般的OA项目中经常会遇到在线处理Office文档的需求,先下载文件,编辑保存后再选择文件上传的方式太过原始,在如今早已是Office Online的时代,没有用户能接受这种蹩脚的操作方式. 虽然微 ...
- Java 使用新方法打印Word文档
前言 我曾写过一篇文章,它主要介绍了如何通过物理打印机和虚拟打印机来打印Word文档.今天这篇教程将介绍一种新的方法来实现对Word文档的打印. 此次使用到的类库仍然是Spire.Doc for Ja ...
- 前端调用后台接口下载word文档的两种方法
1传统的ajax虽然能提交到后台,但是返回的数据被解析成json,html,text等字符串,无法响应浏览器下载.就算使用bob模拟下载,数据量大时也不方便 废话不多说:上代码(此处是Layui监听提 ...
- Java 读取txt文件生成Word文档
本文将以Java程序代码为例介绍如何读取txt文件中的内容,生成Word文档.在编辑代码前,可参考如下代码环境进行配置: IntelliJ IDEA Free Spire.Doc for Java T ...
随机推荐
- vue中组件之间的相互调用,及通用后台管理系统左侧菜单树的迭代生成
由于本人近期开始学习使用vue搭建一个后端管理系统的前端项目,在左侧生成菜单树的时候遇到了一些问题.在这里记录下 分析:由于本人设定的菜单可以使多级结构,直接使用vue的v-for 遍历并不是很方便. ...
- 开地址哈希表(Hash Table)的接口定义与实现分析
开地址哈希函数的接口定义 基本的操作包括:初始化开地址哈希表.销毁开地址哈希表.插入元素.删除元素.查找元素.获取元素个数. 各种操作的定义如下: ohtbl_init int ohtbl_init ...
- Jasper之table报表
这段时间用Jasper画报表,讲真的Jasper IDE真的很难用,网上找很久都没找到用table画的配置方法,以下是直接操作源码画table的方法,不用IDE一样可以做出来(不过样式还是得借助IDE ...
- 初次真正意义上的接触Eclipse
以前就玩安卓app 用过很多软件比如e4a,iapp,aide,lua,但是这都不是真正意义上的安卓编程软件.大二的时候用过Androidstudio,那个软件配置起来太难了,就搁置了. 这次利用机智 ...
- java 中字符串比较equals()和equalsIgnoreCase()的区别
1.使用equals( )方法比较两个字符串是否相等 boolean equals(Object str) 这里str是一个用来与调用字符串(String)对象做比较的字符串(String)对象. 如 ...
- Shader 入门笔记(二) CPU和GPU之间的通信
渲染流水线的起点是CPU,即应用阶段. 1)把数据加载到显存中 2)设置渲染状态,通俗说这些状态定义了场景中的网格是怎样被渲染的. 3)调用DrawCall,一个命令,CPU通知GPU.(这个命令仅仅 ...
- JDK8 HashMap 源码解析
HashMap中数据结构 在jdk1.7中,HashMap采用数组+链表(拉链法).因为数组是一组连续的内存空间,易查询,不易增删,而链表是不连续的内存空间,通过节点相互连接,易删除,不易查询.Has ...
- java中队列Queue的使用
1.在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.Queue接口与List.Set同一级别,都是继承了Collection接口.Queue使用时要尽量避免Colle ...
- 夏令营讲课内容整理 Day 5.
DP专场.. 动态规划是运筹学的一个分支, 求解决策过程最优化的数学方法. 我们一般把动态规划简称为DP(Dynamic Programming) 1.动态规划的背包问题 有一个容量为m的背包,有 ...
- HDU 4333 Revolving Digits [扩展KMP]【学习笔记】
题意:给一个数字,每一次把它的最后一位拿到最前面,一直那样下去,分别求形成的数字小于,等于和大于原来数的个数. SAM乱搞失败 当然要先变SS了 然后考虑每个后缀前长为n个字符,把它跟S比较就行了 如 ...