spring使用freemarker生成word文档包含表格、图片(循环插入)

效果图

因为测试数据是重复的,所以显示都是重复的数据,替换导入map中的数据可以显示不重复的数据。

操作步骤

1,创建一个word模板,需要循环的地方建议放在表格里面,图片也可以放在1*1的表格中,将需要替换的字段用"美元符号{字段名}"替换显示,图片需要先放入一张原始图片作为占位图片,可以对占位图片的大小进行调整,占位图片的大小就是后面显示图片的大小。
2,将word模板另存为xml文件,不要直接修改后缀名,同时建议是2003xml格式,之前用2013xml格式,导致图片的base64码是在标签中和图片的位置是在标签中,分别放在两个地方显示无法用循环。重点!!!!!
3,推荐用firstobject软件打开xml文件,点击工具选择缩进排版,可以将杂乱的xml排序显示,将之前定义的${字段名}中间出现的其它标签删除。将需要循环显示的地方用<#list></#list>标记
4,循环显示图片需要修改w:name和 src为动态图片名,不然会导致始终显示第一张图片。

<w:tbl>
<w:tblPr>
<w:tblW w:w="0" w:type="auto"/>
<w:tblLook w:val="04A0"/>
</w:tblPr>
<w:tblGrid>
<w:gridCol w:w="8522"/>
</w:tblGrid>
<#list resultpiclist as resultpic>
<w:tr wsp:rsidR="00B16C33" wsp:rsidTr="005C329D">
<w:tc><w:tcPr><w:tcW w:w="8522" w:type="dxa"/><w:shd w:val="clear" w:color="auto" w:fill="auto"/></w:tcPr>
<w:p wsp:rsidR="00B16C33" wsp:rsidRDefault="00B16C33"><w:r><w:pict>
<w:binData w:name="${"wordml://resultpic_"+resultpic_index+".jpg"}"  xml:space="preserve">${resultpic.pic}</w:binData>
<v:shape id="_x0000_i1026" type="#_x0000_t75" style="width:277.1pt;height:170pt">
<v:imagedata src="${"wordml://resultpic_"+resultpic_index+".jpg"}" o:title="2"/></v:shape></w:pict></w:r></w:p></w:tc></w:tr>
</#list>
</w:tbl>

5,将xml文件后缀名改为ftl后缀。
6,编写java实现代码:
添加依赖:

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

实现代码:

public class ExportWord {//图片编码转换BASE64public static String getImgStr(String path) throws Exception {InputStream in = null;byte[] data = null;in = new FileInputStream(path);data = new byte[in.available()];in.read(data);in.close();BASE64Encoder ecoder = new BASE64Encoder();return ecoder.encode(data);}//private static final String templateFolder = ExportWord.class.getClassLoader().getResource("../..").getPath()+"/ftl";private Configuration configuration = null;public ExportWord() {configuration = new Configuration();configuration.setDefaultEncoding("UTF-8");}public File createWord(Map<String, Object> dataMap, String hallName) throws Exception {Date date = new Date();configuration.setDirectoryForTemplateLoading(new File("src/main/resources"));Template t = null;try {t = configuration.getTemplate("archive7.ftl"); // 文件名} catch (IOException e) {e.printStackTrace();}File outFile = new File(hallName + date.getTime() + ".doc");Writer w = null;try {w = new OutputStreamWriter(new FileOutputStream(outFile), "utf-8");} catch (Exception e1) {e1.printStackTrace();}try {t.process(dataMap, w);w.close();} catch (IOException e) {e.printStackTrace();}return outFile;}public static void main(String[] args) throws Exception {List<Map<String, Object>> pic = new ArrayList<>();for (int i = 1; i <5; i++) {Map<String, Object> picMap = new HashMap<>();picMap.put("id", "1");picMap.put("time", "201645254247");picMap.put("lnt", "114.252152");picMap.put("lat", "30.254562");pic.add(picMap);}List<Map<String, Object>> resultpic = new ArrayList<>();for (int i = 1; i < 6; i++) {Map<String, Object> pic1 = new HashMap<>();pic1.put("pic", getImgStr("src/main/resources/pic/3.jpg"));pic1.put("name",i+".jpeg");resultpic.add(pic1);}Map<String, Object> dataMap = new HashMap<String, Object>();dataMap.put("archive_name", "张三抢劫案");dataMap.put("case_name", "张三抢劫案20190926");dataMap.put("create_time", "20190924120324");dataMap.put("start_time", "20190924120324");dataMap.put("end_time", "20190924120324");dataMap.put("orgpic", getImgStr("src/main/resources/pic/1.jpg"));dataMap.put("piclist", pic);dataMap.put("resultpiclist", resultpic);ExportWord test = new ExportWord();test.createWord(dataMap, "E:/var");}
}

spring使用freemarker生成word文档包含表格、图片(循环插入)相关推荐

  1. java根据 freemarker 生成word文档包含图片和动态表格

    需求 根据提供的模板样式,生成相对应的word文档,之前可以用xdoc生成,但是目前这个需求 是需要动态生成excel表格,有的单元格需要隐藏不展示,所以这边利用freemarker标签解析, 根据数 ...

  2. (详细)如何使用Freemarker生成Word文档中的文本、图片、表格、附件?

    前言-Freemarker简单介绍 近期项目工作中需要编写大量格式相同但数据不同的Word文档,需要实现自动生成文档的效果,但是通过网上冲浪和官方文档搜索,相对来说,没有分类整理的文档,因此自己抽空简 ...

  3. Java使用freemarker生成word文档并转pdf文档

    Java使用freemarker生成word文档后转pdf 先来看看效果图 进入正题 项目需求: 为订单后生成对应的pdf文档,文档内包含图片. 方案一:使用freemarker和itext把html ...

  4. 使用freemarker导出word文档包含多张图片

    使用freemarker导出word文档包含多张图片 最近项目中有个需求就是导出word文档并且文档中需要有多张图片,我当时一脸懵逼啊,之前没有搞过这个啊,但是不要灰心,肯定会有很多人搞过的,百度一下 ...

  5. 关于FreeMarker生成word文档后转换为pdf得解决方法及常见问题

    关于FreeMarker生成word文档后转换为pdf得解决方法及常见问题 最近在做一个项目要求之前下载出的word简历直接变成pdf 格式进行展现.因为格式比较复杂,所以采用的时模板并用Freema ...

  6. Java使用FreeMarker自动生成Word文档(带图片和表单)

    Java使用FreeMarker自动生成Word文档(带图片和表单) 1 背景 2 目标效果 3 创建Word模板 3.1 创建模板文档 3.2 转换模板文档 3.3 处理模板文档中的占位符 3.4 ...

  7. Java通过POI或Freemarker生成word文档,使用Jfreechart创建统计图表

    最近做了一个使用Java生成统计分析报告word文档的功能,有提前制作好的word文档,其中共包含了普通文本变量,普通表格,动态表格.统计图表(柱状图.饼状图.折线图等),在此记录下POI和freem ...

  8. 用freemarker生成word文档,并插入图片

    用freemarker生成word文档,并插入图片 最近需要做一个问卷功能,要求用户填写完问卷后,后台会生成一个word文档,将用户提交的数据插入到word中. 创建word模板 新建一个word文档 ...

  9. 使用FreeMarker生成word文档(带图片),word转pdf,预览pdf,pdf下载工具类

    一.下载或配置: 下载jar包 :freemaker的jar包下载 下载jar包 :aspose-words的jar包下载 或者配置maven依赖: pom.xml添加aspose的依赖包(maven ...

最新文章

  1. call指令和ret指令的配合使用
  2. FIS前端集成解决方案
  3. java rect 旋转_处理(Java可视化语言):使用rectMode(CENTER)而不是rectMode(CORNER)旋转矩形,留下奇数衰落轨迹效果...
  4. RHM-M10汽车吊力矩限制器/载荷指示器
  5. 如何应用AutoML加速图机器学习任务的处理?
  6. 高中生计算机创新大赛作品,2017 第十届“英特尔杯”全国大学生软件创新大赛获奖作品...
  7. 【数据结构】——排序算法系列总结
  8. who|sort实现
  9. usb接口 spec_USB连接器发展演变和趋势
  10. 【华为云技术分享】十分钟从入门到精通(下)——OBS权限配置
  11. 罗永浩吐槽苹果功能更改 @库克:不要再胡来 做祸害用户体验的事
  12. 人脸方向学习(二十):Face Landmark Detection-TS3-解读
  13. 写入sql时间_一问SQL优化就无从藏身?那只是你对原理的精髓掌握不深
  14. zabbix所有键值
  15. 计算机的ps快捷键,电脑快捷键和PS快捷键
  16. matlab语法 axis on,matlabaxis
  17. 使用ArchR分析单细胞ATAC-seq数据(第十二章)
  18. 我的世界java版gamemode指令_我的世界(电脑Java版)简单又好玩指令教程
  19. python编译环境 eclipse_Eclipse python 开发环境配置
  20. Oracle数据库基础知识+sql语句练习

热门文章

  1. 【odroid-xu3】 ODROID-XU3硬件连接和烧写过程
  2. MATLAB用相干解调DSB信号,AM DSB信号解调的MATLAB实现
  3. 【seaborn】jointplot 改变图片长宽比,非方形
  4. 记录一次吃力的探索过程【Thinkphp搭建Mysql长连接并重用】
  5. 一个无边界区块链世界DIOT平行链数字物联网致力打造跨境电商 跨境支付 跨境地产
  6. I MM CO T-CODE
  7. access是用来干什么的_access是干什么用的
  8. PS证件照红底转蓝底
  9. java画星星_用Java 做一个星星图案
  10. Android调用摄像头--农民伯伯原文