当前位置: 首页 > news >正文

使用FreeMarker导出word文档(支持导出图片)

今天跟大家分享一下工作中比较实用的导出word 带图片的功能。

对于在idea开发中我们需要引入以下依赖:

2.对于eclipse  开发我们需要进入对应的jar包

这个必须放在lib下,同样也需要在当前项目的环境是加入该依赖

 

 需要在MEAT-INF加入

首先制定word  导出模版格式,用占位符进行代替

 对于插入的图片提前设置好大小格式

编写好后:进行另存为  html  格式或者xml

接着用编辑文本打开修改里面的内容

对于插入图片的时候请注意:在src  的时候也用占位符。

注意:所有的占位符要与代码中的Hashmap 中的key,保持一致。

编写代码:

 @RequestMapping(value = "/exportWord")public void exportWord(HttpServletRequest request, HttpServletResponse response, @RequestParam(value = "id") String id ) throws Exception{List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();ArrayList<String> parameters = new ArrayList<String>();List<Map<String,Object>> queryResult2 = limitspaceworkBizc.findyxkjzydc(id);if(queryResult2.size()>0){list.add(queryResult2.get(0));}Map<String, Object> query = list.get(0);exportWord(request, response, query, "明细表.docx",id);}public void exportWord(HttpServletRequest request,HttpServletResponse response, Map<String, Object> query, String fileName,String id) throws IOException, InvalidFormatException {//获取 模版的路径String pathString = request.getSession().getServletContext().getRealPath("/WEB-INF/templete/");System.out.println("获取到的模板路径是:templetePath------->" + pathString);Configuration  configuration = new Configuration(new Version("2.3.23"));configuration.setDefaultEncoding("utf-8");configuration.setDirectoryForTemplateLoading(new File(pathString));Template freemarkerTemplate = configuration.getTemplate("yxkjzydmysd.ftl");File file = null;InputStream fin = null;ServletOutputStream out = null;try {String SPDimage =null;List<LimitSpaceWorkExportpo> vos = new ArrayList<LimitSpaceWorkExportpo>();LimitSpaceWorkExportpo  aa=	  new LimitSpaceWorkExportpo();Map<String,Object> map3=limitspaceworkBizc.findrwtp(id);Map<String,Object> map = new HashMap<String,Object>();map.put("BH", query.get("BH")==null?"":query.get("BH").toString());map.put("ZCGLDW", query.get("ZCGLDW")==null?"":query.get("ZCGLDW").toString());map.put("SZDQ", query.get("SZDQ")==null?"":query.get("SZDQ").toString());map.put("ZYLX", query.get("ZYLX")==null?"":query.get("ZYLX").toString());map.put("ZYMC", query.get("ZYMC")==null?"":query.get("ZYMC").toString());map.put("GCXZ", query.get("GCXZ")==null?"":query.get("GCXZ").toString());map.put("GCZZDW", query.get("GCZZDW")==null?"":query.get("GCZZDW").toString());map.put("LXR", query.get("LXR")==null?"":query.get("LXR").toString());map.put("LXDH", query.get("LXDH")==null?"":query.get("LXDH").toString());map.put("ZYFW", query.get("ZYFW")==null?"":query.get("ZYFW").toString());map.put("ZYNR", query.get("ZYNR")==null?"":query.get("ZYNR").toString());map.put("ZYSQR", query.get("ZYSQR")==null?"":query.get("ZYSQR").toString());map.put("ZYDW", query.get("ZYDW")==null?"":query.get("ZYDW").toString());map.put("ZYSQRDH", query.get("ZYSQRDH")==null?"":query.get("ZYSQRDH").toString());map.put("XCFZR", query.get("XCFZR")==null?"":query.get("XCFZR").toString());map.put("XCFZRDH", query.get("XCFZRDH")==null?"":query.get("XCFZRDH").toString());map.put("AQXYS", map3.get("AQXYS")==null?"":map3.get("AQXYS").toString());map.put("SPD", map3.get("SPD")==null?"":map3.get("SPD").toString());map.put("CND", map3.get("CND")==null?"":map3.get("CND").toString());map.put("GZS", map3.get("GZS")==null?"":map3.get("GZS").toString());map.put("GJCX", map3.get("GJCX")==null?"":map3.get("GJCX").toString());// 调用工具类的createDoc方法生成Word文档file = createDoc(map,freemarkerTemplate);fin = new FileInputStream(file);response.setCharacterEncoding("utf-8");response.setContentType("application/msword");// 设置浏览器以下载的方式处理该文件名fileName = URLEncoder.encode("断面验收报告" + ".docx", "UTF-8");response.setHeader("Content-disposition", "attachment; filename="+ fileName + ";filename*=utf-8" + fileName);out = response.getOutputStream();byte[] buffer = new byte[512];  // 缓冲区int bytesToRead = -1;// 通过循环将读入的Word文件的内容输出到浏览器中while((bytesToRead = fin.read(buffer)) != -1) {out.write(buffer, 0, bytesToRead);}} finally {if(fin != null) fin.close();if(out != null) out.close();if(file != null) file.delete(); // 删除临时文件}}

 指定编码格式:

	private static File createDoc(Map<String, Object> dataMap, Template template) {String name =  ".doc";File f = new File(name);Template t = template;try {// 这个地方不能使用FileWriter因为需要指定编码类型否则生成的Word文档会因为有无法识别的编码而无法打开Writer w = new OutputStreamWriter(new FileOutputStream(f), "utf-8");t.process(dataMap, w);w.close();} catch (Exception ex) {ex.printStackTrace();throw new RuntimeException(ex);}return f;}

效果图展示:

 若本文对你有所帮助,请一键三连,就是对我最好的支持。

http://www.lryc.cn/news/110058.html

相关文章:

  • C/C++中变量按位操作
  • uni、css——制作表格样式的模型
  • mac前端代码编辑 Sublime Text 4 Dev 中文v4.0(4151)
  • 面试之HashMap
  • promethues mysql-rules
  • Maven项目中Lifecycle和Plugins下的install的区别
  • 02-状态模式
  • Python异常处理中异常的种类有哪些?你知道几个?
  • COBOL语言介绍及使用场景
  • 【计算机视觉 | 图像分割】arxiv 计算机视觉关于图像分割的学术速递(8 月 1 日论文合集)
  • Jetson nano 安装swapfile 解决Cannot allocate memory 问题
  • ElasticsSearch基础概念和安装
  • 【GEMM预备工作】行主序和列主序矩阵的内存中的连续性,解决理解问题
  • 利用el-button 画圆 ,通过border-radius >50% 就成圆形
  • 在tensorflow分布式训练过程中突然终止(终止)
  • windows永久暂停更新
  • Android 9系统源码_音频管理(一)按键音效源码解析
  • PyTorch搭建神经网络
  • TiDB 优雅关闭
  • 食品厂能源管理系统助力节能减排,提升可持续发展
  • ABAP读取文本函数效率优化,read_text --->zread_text
  • Spring Data Repository 使用详解
  • [ MySQL ] — 数据库环境安装、概念和基本使用
  • Apache Thrift C++库的TThreadPoolServer模式的完整示例
  • 图解java.util.concurrent并发包源码系列——深入理解ReentrantLock,看完可以吊打面试官
  • 【计算机网络】网络基础(上)
  • 51单片机(普中HC6800-EM3 V3.0)实验例程软件分析 实验四 蜂鸣器
  • 无向图-已知根节点求高度
  • RIP动态路由协议 (已过时,逐渐退出舞台)
  • C++ operator关键字的使用(重载运算符、仿函数、类型转换操作符)