freemarker模板导出word循环图片表格详细教程
前言:表哥之前已经过一篇freemarker模板导出带表格word详细教程 freemarker模板导出带表格word详细教程_Java大表哥的博客-CSDN博客,为什么现在又要写一篇呢。
因为我这次的项目是在手机端导出下载并且查看,用上面的方法导出后,在电脑端和苹果手机端查看是正常的,但是在安卓端,打开却是模版源码,经过测试,发现是word存模版的时候格式问题,上述链接的导出我另存的是xml格式,在安卓手机端不兼容,所以这篇是用的word xml格式。既然格式改了,那模版里面有的数据绑定的方式就需要改变(下文会举例说明)。
一。整体环境:
开发环境:java,idea
部署环境:tomcat7/jar包两种方式
二。功能需求:(数据需要导出成以下格式)
1.简单格式:
2.复杂一点 表格格式:
3.复杂一点 图片格式(图片数量不确定,需要循环):
三。准备工作:
先准备好Freemarker模版:步骤如下:
1.简单的文本,我们需要做的就是把需要导出到word的数据 使用${}替换下(这就相当于占位符)如图;
把需要导出的内容用占位符替换下。
2.表格的:
3.图片的:
在需要插入图片的地方放入一张图片占位。
四。修改模版
上面改好之后把word另存为word xml,我这次不用xml,前面说到的在手机上不兼容,然后通过在线的xml格式化通过notepad++打开,修改好格式:
1.普通文本:
2.表格的话需要在<w:tbl>标签内<w:tr>加上list标签,用来接收后面后端的数据:
list结束标签。
因为序号并不是写死的,直接用<w:t>${zjl_index+1}</w:t>替换,(因为默认为0,所以加1)
最后把后缀改成.ftl就好了,过程:.word>.word xml>.ftl。
3.图片的,也是本章重点讲的:
(1).如果另存为xml格式的话,比较简单,图开始那张展位的图片在xml里面是很长一串base64的代码,替换掉,用${XXX}替换,添加list标签,并且用index区分图片集合的数据。
(2).也就是本文中的另存为word xml格式的模版,图片的话会比较复杂;需要修改三个地方
1.一般都是模版顶部
2.占位的地方
3.模版底部,
<pkg:binaryData>标签代码其实代表的是图片的实际内容,传入的是图片的base64码,后面代码有图片转码的过程。
五。开始后端编码
人狠话不多,直接贴编码:上个教程有....这里加了一段代码
加载模版方法:freemarker加载模板目录的方法_Java大表哥的博客-CSDN博客
图片List添加转码的图片
public static String imageToBase64(String path) {InputStream in = null;byte[] data = null;try {in = new FileInputStream(path);} catch (FileNotFoundException e) {log.error("加载图片未找到", e);e.printStackTrace();}try {data = new byte[in.available()];//注:FileInputStream.available()方法可以从输入流中阻断由下一个方法调用这个输入流中读取的剩余字节数in.read(data);in.close();} catch (IOException e) {log.error("IO操作图片错误", e);e.printStackTrace();}BASE64Encoder encoder = new BASE64Encoder();return encoder.encode(data);}
不同与上次的是在浏览器导出,这次需要的是导出到手机,所以我是把导出的word存放在服务器上,然后返回存放地址。
大功告成,这玩意有点要人命。
六:案例demo程序下载
freemarker模板导出word循环图片表格源码和详细教程-Java文档类资源-CSDN下载
导出结果:
七:题外话
每做一次 踩坑一次。 如果遇到问题 请加QQ 602841248
1.另存模版的时候xml ,word xml, word 2003 Xml 每个数据绑定的模式都不一样。
2.循环图片的时候记得rid不要重复,不然循环的是同一张图片。
3.指定图片的宽高: 参考 FreeMarker导出Word(带图片、解决图片变形问题)_justry_deng的博客-CSDN博客
freemarker模板导出word循环图片表格详细教程相关推荐
- Freemarker 模板导出(带图片)
1. 依赖 <!--FreeMarker--><dependency><groupId>org.freemarker</groupId><arti ...
- java word合并单元格_java使用freemarker模板导出word(带有合并单元格)文档
前言:最近要做一个导出word功能,其实网上有很多的例子,但是我需要的是合并单元格的,可是查了好久都没有自己想要的.研究了几天其实挺简单的,在这儿我就简单的介绍一下吧!(此方法只是一种思路,借鉴者还有 ...
- freemarker html 换行,java使用freemarker模板导出word,合并单元格,单元格内换行
之前使用[XWPFDocument][]动态写入word,XWPFDocument不支持2003,word2003需要用HWPFDocument,HWPFDocument对于动态生成行效果不是很好,所 ...
- java使用freemarker模板导出word,合并单元格,单元格内换行
之前使用XWPFDocument动态写入word,XWPFDocument不支持2003,word2003需要用HWPFDocument,HWPFDocument对于动态生成行效果不是很好,所以使用f ...
- poi使用模板导出word带图片
1.下面是我做的加载模板导出带图片的word的导出方式,使用之前请映入freemarker的jar包,可以从百度下载即可. 2.首先准备到你要导出的word模板,在要填充的模板中填入el表达式,如下图 ...
- 一步一步带你实现java根据模板导出word循环数据
之前操作EXCEL使用的是poi,用poi操作word有点复杂,且没有模板功能.放弃 找到了freemarker这个工具,他可以根据word的模板生成导出的word 话不多说,跟着我来一步一步走 首先 ...
- 利用word的freemarker模板导出word文件
前端请求 var url = window.webApi.business.exportYearWord; jQuery('<form action="' + url + '" ...
- 使用Word模板导出Word后,表格后面产生空白页
目录 背景 解决 参考 背景 项目中有导出Word功能,其实现逻辑是先整理一个Word文档,里面使用占位符:代码读取Word文档,然后替换占位符. 但出现这样的问题:填充某个表格后,表格后面出现了空白 ...
- java生成word 带表格_【java】Freemarker 动态生成word(带图片表格)
1.添加freemarker.jar 到java项目. 2.新建word文档. 3.将文档另存为xml 格式. 4.将xml格式化后打开编辑(最好用notepad,有格式),找到需要替换的内容,将内容 ...
最新文章
- No mapping found for HTTP request with URI
- MySQL数据库锁构建_MySQL数据库InnoDB存储引擎中的锁机制
- linux 常用命令汇总
- Linux上机实验1
- java调用xdotool_【转】java Map 遍历速度最优解
- 构造函数和实例对象之间的关系 构造函数创建对象带来的问题 原型
- Hadoop 00_hadoop伪分布式,完全分布式,HA搭建
- 线程魔术技巧:Java线程可以做的5件事
- php 系统平均负载,Linux_解析Linux系统的平均负载概念,一、什么是系统平均负载(Load a - phpStudy...
- c语言定义一个字母的范围,C语言学习知识程序设计试卷及其规范标准答案
- java面试题_208道Java面试题,
- htm——position:static、absolute、relative详解
- pycharm关闭自动更新
- 中美线径对照表_中美WG线规对照表
- SSL认证之相关证书的生成
- Java九阳神功--BP神经网络JAVA代码解析
- 【高等数学】曲率和曲率半径
- Jetson TX1(视频)、TK1(音视频)
- 卷积神经网络超详细介绍1
- java 编配和弦_六个和弦编配小诀窍,让你的弹唱伴奏丰富好听
热门文章
- 超出认知的数据压缩 用1-bit数据来表示32-bit的梯度 语音识别分布式机器学习 梯度压缩 论文精读
- 除了任务管理器,还能用其他办法关闭应用吗?
- nodejs实现批量裁剪图片功能
- 直接查看Z包文本linux,《工作效率篇》Linux命令行十种不解压查看压缩文件的方法...
- JRS303数据校验
- gprinter佳博打印机androidSDK
- 单片机红外线c语言,自己写的51单片机的红外线遥控接收程序(C语言)
- 有理函数在计算机中的应用,有理函数
- PMP认证对IT企业有多大用处?
- 2021一建电子教材(各科)