1 创建word模板

2 动态数据占位

格式:${xxxxx}

3 点击另存为xml格式

4 修改后缀名为ftl

5 导入到idea中

6 修改文件编码为utf-8

7 复制模板内容在线代码格式化

8 编辑模板中内容

如果有空值会报错,可以  ${xxxx !''}处理,网上查看可以在配置文件中配置,但是我试了总是不生效

spring.freemarker.settings.classic_compatible=true

有需要遍历的表格

9 导出

因为使用ftl模板,需要引入jar包

<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.30</version>
</dependency>

模板取值需要从map中取值,对象转map就可以了

public void exportReport(HttpServletResponse response, Integer receiptId) throws IOException, TemplateException {Map<String, Object> dataMap = new HashMap<>();
//获取,可忽略PrintReceiptInfoVO printReceiptInfoVO = this.getPrintReceiptInfo(receiptId);if(printReceiptInfoVO != null) {String ecpNoticeId = printReceiptInfoVO.getEcpNoticeId();if(!StringUtils.isEmpty(ecpNoticeId)) {String ecpResult = ecpApi.getOrderNoticeInfoMain(ecpNoticeId);if(!StringUtils.isEmpty(ecpResult)) {RemoteResult remoteResult = JSON.parseObject(ecpResult, new TypeReference<RemoteResult>() {});if ("200".equals(remoteResult.getStatus()) && remoteResult.getData() != null && !"[]".equals(remoteResult.getData().toString())){List<EcpPrintInfoVO> ecpReceiptVOS = JSON.parseObject(remoteResult.getData().toString(),new TypeReference<List<EcpPrintInfoVO>>(){});if(!CollectionUtils.isEmpty(ecpReceiptVOS)) {EcpPrintInfoVO ecpPrintInfoVO = ecpReceiptVOS.get(0);if(ecpPrintInfoVO != null) {BeanUtils.copyProperties(ecpPrintInfoVO,printReceiptInfoVO);printReceiptInfoVO.setConsignorRemark("样机");}}}}}dataMap = MapBeanUtil.object2Map(printReceiptInfoVO);}
//获取数据endPrintWriter out = response.getWriter();//配置对象Configuration configuration = new Configuration();//设置配置的字符编码为utf-8,避免字符集问题configuration.setDefaultEncoding("UTF-8");//获取resources下指定的文件夹路径,如果项目需要打成jar包,//此举很重要,别的方式可能无法获取到模板文件夹的相对路径configuration.setClassForTemplateLoading(this.getClass(), "/templates");// 获取模板实例,上行配置了模板文件所在路径Template t = configuration.getTemplate("exportReceipt.ftl", "utf-8");//以utf-8的编码读取ftl文件//设置响应类型为wordresponse.setContentType("application/msword");//设置响应头,注意如果导出的word名含有汉字则需要将文件名//变成byte并且指定字符集为gbk,表示将GBK汉字转为byte//然后将其转为iso8859-1的字符串response.setHeader("Content-Disposition", "attachment;filename=\""+ new String(("导出报告.doc").getBytes("GBK"), "iso8859-1") + "\"");//此句非常关键,不然word文档全是乱码response.setCharacterEncoding("utf-8");//使用数据填充模板t.process(dataMap, out);//以流的输出到浏览器,即下载out.close();
}
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Map;/*** map转bean,bean转map*/
public class MapBeanUtil {/*** 实体对象转成Map** @param obj 实体对象* @return*/public static Map<String, Object> object2Map(Object obj) {Map<String, Object> map = new HashMap<>();if (obj == null) {return map;}Class clazz = obj.getClass();Field[] fields = clazz.getDeclaredFields();try {for (Field field : fields) {field.setAccessible(true);map.put(field.getName(), field.get(obj));}} catch (Exception e) {e.printStackTrace();}return map;}/*** Map转成实体对象** @param map   实体对象包含属性* @param clazz 实体对象类型* @return*/public static Object map2Object(Map<String, Object> map, Class<?> clazz) {if (map == null) {return null;}Object obj = null;try {obj = clazz.newInstance();Field[] fields = obj.getClass().getDeclaredFields();for (Field field : fields) {int mod = field.getModifiers();if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {continue;}field.setAccessible(true);field.set(obj, map.get(field.getName()));}} catch (Exception e) {e.printStackTrace();}return obj;}
}

java 根据word文档模板导出word相关推荐

  1. java导出word文档_PHPWord导出word文档

    既然有PHPExcel,那么肯定也会有PHPWord库,且都是phpoffice家的.看了下文档,最终决定使用模板的方式来导出数据,感觉也是最简单的一种方式了. 过程如下: 使用composer下载P ...

  2. java 读word文档模板,同时往word文档里面插入数据

    1.先看word文档模板 word文档先换成.xml格式.现阶段的word都支持另存为xml格式 2.看如下代码的作用.该段断码,只是传一个文件的路径.我们就能读取文件中的所有内容. private ...

  3. freemarker实现word文档模板动态生成

    携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第29天,点击查看活动详情 1.写在前面 很多时候,我们可能需要根据一个word模板,动态生成,我们所需要得一个word文档. 那这 ...

  4. Java解析word文档,将word文档题库选择题导入

    学习目标: Java解析word文档,将word文档题库导入 学会word文档的解析,以及各种题型的导入 学习内容: 解析word文档 获取正文文件内容 doc和docx两种解析 解析word文档 p ...

  5. asp html转word文档,asp生成word文档

    asp生成word文档 今天在处理一个在线申请功能时候,需要生成word文档.在网上找了些资料学习,终于成功了.下面是个简单的例子.其中程序包括index.htm,createdoc.asp.在之前你 ...

  6. 计算机word文档无法工作,word无法打开(WORD文档打不开_解决方法_电脑基础知识_IT/计算机_专业资料)...

    word无法打开(WORD文档打不开_解决方法_电脑基础知识_IT/计算机_专业资料),哪吒游戏网给大家带来详细的word无法打开(WORD文档打不开_解决方法_电脑基础知识_IT/计算机_专业资料) ...

  7. 打开WORD文档时提示“word无法启动转换器mswrd632 wpc”的解决方法

    打开 WORD 文档时提示" word 无法启动转换器 mswrd632 wpc "的解决方法 因为之前安装的是精简版的 office 2003 ,导致系统找不到这个文件,出现标题 ...

  8. python操作word文档-python操作word

    1.Python写word文档 要操作word文档首先需要安装python-docx库: pip install python-docx 然后导入docx模块,或者从docx模块中导入Document ...

  9. java关于对于word或者pdf文件的批量下载实现,其中包括(Java实现创建word文档模板,根据模板导出word文档)

    本次需求是,pdf是表格类型的文件,我这里使用了word模板进行处理.但由于是多个文件一起导出,因此全部放到一个目录底下进行打包下载. ## 整体思路 /*** 下载思路:* 1.查询出数据后:* 2 ...

最新文章

  1. Jupyter Notebook教程
  2. python网络编程要学吗_总算发现如何学习python网络编程
  3. 推荐系统XDeepFM模型--DeepFM和DCN升级版
  4. 骗子公司陆续公布中...
  5. 加sudo后执行.sh报错command not found
  6. linux怎么调用inb函数,outb()函数 Unix/Linux
  7. html页面使用var变量,使用var定义变量和不使用var的本质区别
  8. nodejs cluster_NodeJS下好用的Redis客户端ioredis,再推荐一个Redis可视化工具
  9. Linux系统初学者的常见问题解决集结
  10. pycharm—误删代码怎么办
  11. J2ME游戏开发感想
  12. ionic + angular + cordova, 打造专属自己的App!
  13. 凸优化第九章无约束优化 9.2 下降方法
  14. c语言贪吃蛇设计实验报告引言,C语言实现贪吃蛇游戏设计
  15. laravel框架使用datatables
  16. 上海市五险一金及税后工资计算器
  17. matlab 如何使用虚数,编程高手帮我解决下怎么用matlab解含有虚数的微分方程组...
  18. MacbookPro中 Idea快捷建(记录中)
  19. 查询Linux中CPU的核数
  20. pytorch网络冻结的三种方法区别:detach、requires_grad、with_no_grad

热门文章

  1. 数据挖掘实战—家用热水器用户行为分析与事件识别
  2. MacBook Pro换固态硬盘出现的一个稀缺问题
  3. 通百艺即无一长——蒂姆 · 哈福德
  4. CentOS.7卸载与安装Nvidia Driver
  5. CentOS-6.2安装Nvidia显卡驱动
  6. polyline与polygon
  7. mac下后端开发常用软件
  8. Appium 屏幕截图(交易宝)
  9. Unity3d 数字模型制作规范
  10. deepin系统的安装与问题解决