java 根据word文档模板导出word
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相关推荐
- java导出word文档_PHPWord导出word文档
既然有PHPExcel,那么肯定也会有PHPWord库,且都是phpoffice家的.看了下文档,最终决定使用模板的方式来导出数据,感觉也是最简单的一种方式了. 过程如下: 使用composer下载P ...
- java 读word文档模板,同时往word文档里面插入数据
1.先看word文档模板 word文档先换成.xml格式.现阶段的word都支持另存为xml格式 2.看如下代码的作用.该段断码,只是传一个文件的路径.我们就能读取文件中的所有内容. private ...
- freemarker实现word文档模板动态生成
携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第29天,点击查看活动详情 1.写在前面 很多时候,我们可能需要根据一个word模板,动态生成,我们所需要得一个word文档. 那这 ...
- Java解析word文档,将word文档题库选择题导入
学习目标: Java解析word文档,将word文档题库导入 学会word文档的解析,以及各种题型的导入 学习内容: 解析word文档 获取正文文件内容 doc和docx两种解析 解析word文档 p ...
- asp html转word文档,asp生成word文档
asp生成word文档 今天在处理一个在线申请功能时候,需要生成word文档.在网上找了些资料学习,终于成功了.下面是个简单的例子.其中程序包括index.htm,createdoc.asp.在之前你 ...
- 计算机word文档无法工作,word无法打开(WORD文档打不开_解决方法_电脑基础知识_IT/计算机_专业资料)...
word无法打开(WORD文档打不开_解决方法_电脑基础知识_IT/计算机_专业资料),哪吒游戏网给大家带来详细的word无法打开(WORD文档打不开_解决方法_电脑基础知识_IT/计算机_专业资料) ...
- 打开WORD文档时提示“word无法启动转换器mswrd632 wpc”的解决方法
打开 WORD 文档时提示" word 无法启动转换器 mswrd632 wpc "的解决方法 因为之前安装的是精简版的 office 2003 ,导致系统找不到这个文件,出现标题 ...
- python操作word文档-python操作word
1.Python写word文档 要操作word文档首先需要安装python-docx库: pip install python-docx 然后导入docx模块,或者从docx模块中导入Document ...
- java关于对于word或者pdf文件的批量下载实现,其中包括(Java实现创建word文档模板,根据模板导出word文档)
本次需求是,pdf是表格类型的文件,我这里使用了word模板进行处理.但由于是多个文件一起导出,因此全部放到一个目录底下进行打包下载. ## 整体思路 /*** 下载思路:* 1.查询出数据后:* 2 ...
最新文章
- Jupyter Notebook教程
- python网络编程要学吗_总算发现如何学习python网络编程
- 推荐系统XDeepFM模型--DeepFM和DCN升级版
- 骗子公司陆续公布中...
- 加sudo后执行.sh报错command not found
- linux怎么调用inb函数,outb()函数 Unix/Linux
- html页面使用var变量,使用var定义变量和不使用var的本质区别
- nodejs cluster_NodeJS下好用的Redis客户端ioredis,再推荐一个Redis可视化工具
- Linux系统初学者的常见问题解决集结
- pycharm—误删代码怎么办
- J2ME游戏开发感想
- ionic + angular + cordova, 打造专属自己的App!
- 凸优化第九章无约束优化 9.2 下降方法
- c语言贪吃蛇设计实验报告引言,C语言实现贪吃蛇游戏设计
- laravel框架使用datatables
- 上海市五险一金及税后工资计算器
- matlab 如何使用虚数,编程高手帮我解决下怎么用matlab解含有虚数的微分方程组...
- MacbookPro中 Idea快捷建(记录中)
- 查询Linux中CPU的核数
- pytorch网络冻结的三种方法区别:detach、requires_grad、with_no_grad