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

最近需要做一个问卷功能,要求用户填写完问卷后,后台会生成一个word文档,将用户提交的数据插入到word中。

创建word模板

新建一个word文档,将需要应用的格式固定好
修改好格式后,将word文档保存为XML格式的文件
例:

将word保存为xml格式


将XML中base64格式的图片信息删除掉,改为占位符,如:${image}
如果需要在模板中插入不定数量的图片,要将XML图片格式进行修改,增加<#list imageList as item></#list>.如下:

<#list image as item><w:pict><w:binData w:name=“wordml://item.index.png">{item.index}.png">item.index.png">{item.image_base64}
</w:binData><v:shape id=”item.index"o:spt="75"alt="{item.index}" o:spt="75" alt="item.index"o:spt="75"alt="{item.image_name}" type="#_x0000_t75" style=“height:146.95pt;width:146.95pt;” filled=“f” o:preferrelative=“t” stroked=“f” coordsize=“21600,21600”><v:path/><v:fill on=“f” focussize=“0,0”/><v:stroke on=“f”/><v:imagedata src=“wordml://${item.index}.png” o:title=“微信图片_20200524140740”/><o:lock v:ext=“edit” aspectratio=“t”/><w10:wrap type=“none”/>w10:anchorlock/</v:shape></w:pict></#list><
要注意list的位置 ,然后将xml文件修改为ftl文件,直接改后缀名即可

java后台代码

@RequestMapping("/saveWenjuan")public void saveWenjuan(HttpServletRequest request, HttpServletResponse response,@RequestParam MultipartFile[] myfiles) throws IOException{Map<String,Object> dataMap = new HashMap<String, Object>();try {request.setCharacterEncoding("UTF-8");dataMap.put("company", request.getParameter("company"));System.out.println(request.getParameter("company"));dataMap.put("department", request.getParameter("department"));dataMap.put("persionname", request.getParameter("name"));dataMap.put("phone", request.getParameter("phone"));dataMap.put("email", request.getParameter("mail"));dataMap.put("question", request.getParameter("question"));dataMap.put("jianyi",  request.getParameter("jianyi"));dataMap.put("miaoshu", request.getParameter("miaoshu"));BASE64Encoder base64Encoder =new BASE64Encoder();List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();for (int i=0;i<myfiles.length;i++) {if(myfiles[i]==null||myfiles[i].getSize()==0){continue;}Map<String,Object> map = new HashMap<String, Object>();String base64Encoderstr = base64Encoder.encode(myfiles[i].getBytes());map.put("image_base64", base64Encoderstr);map.put("image_name", myfiles[i].getName());map.put("index", i);list.add(map);}//               System.out.println(base64Encoderstr);dataMap.put("image",list);//Configuration 用于读取ftl文件Configuration configuration = new Configuration();configuration.setDefaultEncoding("utf-8");/*** 以下是两种指定ftl文件所在目录路径的方式,注意这两种方式都是* 指定ftl文件所在目录的路径,而不是ftl文件的路径*///指定路径的第一种方式(根据某个类的相对路径指定)
//                  configuration.setClassForTemplateLoading(this.getClass(), "");//指定路径的第二种方式,我的路径是C:/a.ftlString path = wenjuanController.class.getClassLoader().getResource("问卷模板3.ftl").getPath();String realpath = path.substring(0, path.lastIndexOf("/"));System.out.println(realpath);configuration.setDirectoryForTemplateLoading(new File(realpath+"/"));//输出文档路径及名称Date day=new Date();    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); File outFile = new File(path.substring(0, path.indexOf("/", 2))+"//upload//"+request.getParameter("company"));if(!outFile.exists()){outFile.mkdirs();}File outFile2 = new File(path.substring(0, path.indexOf("/", 2))+"//upload//"+request.getParameter("company")+"//企业安全浏览器问卷"+df.format(day)+request.getParameter("name")+".doc");//以utf-8的编码读取ftl文件///wenjuan-web/src/main/resources/问卷模板.ftlTemplate template = configuration.getTemplate("问卷模板3.ftl", "utf-8");Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile2), "utf-8"), 10240);template.process(dataMap, out);out.close();response.setCharacterEncoding("GBK");} catch (Exception e) {e.printStackTrace();}

唯一需要注意的一点就是要将上传过来的图片转换为base64编码,然后放入list中,代入word模板

用freemarker生成word文档,并插入图片相关推荐

  1. poi生成word文档,插入图片,echar报表生成到word,word表格

    poi生成word文档,word表格,将echar报表生成到word 项目中用到生成word报表,报表中有表格的合并 .页眉.表格中会有报表图片.然后查找了网上的资料,利用echar生成柱状图,然后已 ...

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

    spring使用freemarker生成word文档包含表格.图片(循环插入) 效果图 因为测试数据是重复的,所以显示都是重复的数据,替换导入map中的数据可以显示不重复的数据. 操作步骤 1,创建一 ...

  3. Java Web项目中使用Freemarker生成Word文档

    Web项目中生成Word文档的操作屡见不鲜,基于Java的解决方案也是很多的,包括使用Jacob.Apache POI.Java2Word.iText等各种方式,其实在从Office 2003开始,就 ...

  4. Java项目中使用Freemarker生成Word文档

    Web项目中生成Word文档的操作屡见不鲜,基于Java的解决方案也是很多的,包括使用Jacob.Apache POI.Java2Word.iText等各种方式,其实在从Office 2003开始,就 ...

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 微软IE8浏览器个性化设置技巧
  2. 使用正则把数字前面的符号替换_正则表达式(一) 基本表达式
  3. php accept-length,php中Accept-Length获取不到下载文件的大小
  4. python进阶10并发之六并行化改造
  5. Python 数据结构与算法 —— 插入排序
  6. C#方法的六种参数,值参数、引用参数、输出参数、参数数组、命名参数、可选参数...
  7. CentOs6.5安装使用数据恢复软件extundelete
  8. 突然发现,工作已满四年了
  9. 三年级计算机测试题,小学三年级信息技术考试试题
  10. 程式CMS V4黑色炫酷DJ音乐门户网站源码模板
  11. 多目标跟踪算法 | DeepSort
  12. Chrome 页面呈现原理与性能优化(内附分享 ppt)
  13. 微软流媒体服务器直播,流媒体服务器Flussonic Media Server对直播流进行录制
  14. 基于语义关联的中文查询纠错框架
  15. 随笔杂记(十)——C++:C4996报错解决方法
  16. python 文件命令_python中写入文件数据及文件定位操作命令
  17. C++类的成员函数(在类外定义成员函数)
  18. Shiny进阶:Busy Button
  19. 如何在Excel中调用Python脚本,实现数据自动化处理!
  20. Veloview阅读笔记1

热门文章

  1. 公网访问阿里云RDS云数据库
  2. WiFi模块硬件兼容封装尺寸三:LGA-44/12*12mm
  3. 视觉特效视觉插件包FxFactory pro 8 集各fcpx插件于一体
  4. 多个迹象表明,瑞幸咖啡已进入新的发展阶段
  5. 抖音创作规范_抖音创作内容调整提示怎么办
  6. 《0~3岁孩子的 正面管教》——备忘
  7. VM ware安装Cent OS系统并配置静态IP
  8. 为什么有网络微信却显示未连接服务器,设备公众号显示未连接,为什么公众号设备显示未连接?...
  9. html5 设计 form,为HTML5表单设计表单模板
  10. 【实用技巧】 修改度娘的提取码