实现PDF 导出 org.freemarkerfreemarker2.3.20 1、ftl文件是放在了webapp下的WEB-INF/views/ftl下

2、图片是存放在webapp下的images中

3、路径是为了方便找文件图片。为什么没有放在views下?是因为有在做pdf时需要用到这里的链接访问图片,因为程序是web端的,路径直接获取的绝对路径。

4、访问程序为 @RequestMapping(value="download",method={RequestMethod.GET,RequestMethod.POST}) public void exportWord( HttpServletRequest request, HttpServletResponse response) throws Exception { Map dateMap=new HashMap(); dateMap.put("title","个人简历"); dateMap.put("userName","xueyucheng"); dateMap.put("userSex","man"); dateMap.put("userAge","17"); dateMap.put("height","161"); dateMap.put("address","handan"); dateMap.put("University","ligong"); dateMap.put("skill","jineng"); dateMap.put("content","asdasasd"); String ftlName="test.ftl"; String imageName="1.jpg"; try { //这里是获得数据 然后在客户端中实现下载,当然如果指定位置下载也可以实现下面的那个方法 ByteArrayOutputStream bos= WordUtil.createWord(dateMap, ftlName, request,imageName);/**字节*/ WordUtil.renderWord(response, bos.toByteArray(), "123"); } catch (Exception e) { logger.error("word导出出错......",e); } } word导出做成工具类了,直接从工具类中调用 public class WordUtil { /** * 根据模板创建word * @auther fengruiqi * 2017年2月4日 下午10:46:09 * @param dataMap 需要展示的数据 * @param templateName word模板的名称 比如:test.ftl * @param imageName 图片的名称 * */ public static ByteArrayOutputStream createWord(Map dataMap,String templateName,HttpServletRequest request,String imageName) throws Exception{ String basePath = request.getSession().getServletContext().getRealPath("/");//绝对路径 //创建配置实例 Configuration configuration = new Configuration(); //设置编码 configuration.setDefaultEncoding("UTF-8"); try { //ftl模板文件统一放至 资源文件ftl下面 包下面 configuration.setDirectoryForTemplateLoading(new File(basePath + "/WEB-INF/views/ftl/")); //获取模板 Template template = configuration.getTemplate(templateName); template.setEncoding("utf-8"); if(imageName!=null && !imageName.equals("")){ /** 图片路径 **/ String imagePath =basePath+"/images/"+imageName; /** 将图片转化为**/ InputStream in = null; byte[] data = null; try { in = new FileInputStream(imagePath); data = new byte[in.available()]; in.read(data); in.close(); } catch (Exception e) { throw new Exception(e); }finally { if(in != null){ in.close(); } } /** 进行base64位编码 **/ BASE64Encoder encoder = new BASE64Encoder(); /** 图片数据 **/ dataMap.put("image",encoder.encode(data)); } /* //输出文件 File outFile = new File(filePath+File.separator+fileName); //如果输出目标文件夹不存在,则创建 if (!outFile.getParentFile().exists()){ outFile.getParentFile().mkdirs(); }*/ //将模板和数据模型合并生成文件 // Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8")); Writer out = new StringWriter(); //生成文件 template.process(dataMap, out); String str = out.toString(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); //关闭流 baos.write(str.getBytes()); out.flush(); out.close(); baos.close(); return baos; } catch (Exception e) { throw new Exception(e); } } /** * 处理包含多个图片的word问题 * @author fengruiqi * 创建时间 2017年2月6日 下午3:25:59 * @param dataMap 要插入的数据 * @param templateName ftl名字 * @param request * @param imageName 图片组合昵称 * @return * @throws Exception */ public static ByteArrayOutputStream createWordContinManyPicture(Map dataMap,String templateName,HttpServletRequest request,List imageName) throws Exception{ String basePath = request.getSession().getServletContext().getRealPath("/");//绝对路径 //创建配置实例 Configuration configuration = new Configuration(); //设置编码 configuration.setDefaultEncoding("UTF-8"); try { //ftl模板文件统一放至 资源文件ftl下面 包下面 configuration.setDirectoryForTemplateLoading(new File(basePath + "/WEB-INF/views/ftl/")); //获取模板 Template template = configuration.getTemplate(templateName); template.setEncoding("utf-8"); for(String image :imageName){ if(image!=null && !image.equals("")){ /** 图片路径 **/ String imagePath =basePath+"/images/"+image; /** 将图片转化为**/ InputStream in = null; byte[] data = null; try { in = new FileInputStream(imagePath); data = new byte[in.available()]; in.read(data); in.close(); } catch (Exception e) { throw new Exception(e); }finally { if(in != null){ in.close(); } } /** 进行base64位编码 **/ BASE64Encoder encoder = new BASE64Encoder(); /** 用图片的名称作为存储图片数据的名称 在页面时应该与改名字对应**/ if(image.toLowerCase().contains(".jpg") ){ image=StringUtils.remove(image, ".jpg"); dataMap.put(image,encoder.encode(data)); }else if(image.toLowerCase().contains(".png")){ image=StringUtils.remove(image, ".png"); dataMap.put(image,encoder.encode(data)); } } } /* //输出文件 File outFile = new File(filePath+File.separator+fileName); //如果输出目标文件夹不存在,则创建 if (!outFile.getParentFile().exists()){ outFile.getParentFile().mkdirs(); }*/ //将模板和数据模型合并生成文件 // Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8")); Writer out = new StringWriter(); //生成文件 template.process(dataMap, out); String str = out.toString(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); //关闭流 baos.write(str.getBytes()); out.flush(); out.close(); baos.close(); return baos; } catch (Exception e) { throw new Exception(e); } } /** * 客户端下载word * @author fengruiqi * 创建时间 2017年2月5日 上午1:10:38 * @param response * @param bytes * @param filename */ public static void renderWord(HttpServletResponse response, final byte[] bytes, final String filename) { /* initResponseHeader(response, PDF_TYPE); */ setFileDownloadHeader(response, filename); if (null != bytes) { try { response.getOutputStream().write(bytes); response.getOutputStream().flush(); } catch (IOException e) { throw new IllegalArgumentException(e); } } } /** * 设置让浏览器弹出下载对话框的Header * @author fengruiqi * 创建时间 2017年2月4日 下午6:58:44 * @param response * @param fileName * @param fileType */ public static void setFileDownloadHeader(HttpServletResponse response, String fileName) { try { // 中文文件名支持 String encodedfileName = new String(fileName.getBytes("GBK"), "ISO8859-1"); response.setContentType("application/msword"); response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedfileName + "\""); } catch (UnsupportedEncodingException e) { } } } 上面带多个图片的word导出与导出一个图片的方法其实可以用一个

只不过前面的需要将其改成list

当时是没有考虑到多个图片的问题才这样做。多个图片处理用图片的名字生成,图片内容填充到静态模板中。如果有其他好的方法大家一起交流下。在程序中可以指定位置存储或者用浏览器客户端下载保存,看自己的需求了。或者两个方式都可以采用。注意注释的部分。

word导出的难点可能就是在freemarker那里吧其他文件需求还不清楚。所以就导出功能就先做到这

更多精彩内容请关注微信公众号:phubing曾

Java 导出word和pdf_Java实现word导出与pdf导出相关推荐

  1. java 其他文件转pdf_java 其他文件转成pdf java生成pdf

    java生成pdf需要用到的包pd4ml.jar 下载地址:http://download.csdn.net/detail/yanning1314/7124741 package com.cular. ...

  2. java按模板生成pdf_java中根据模板生成pdf文件

    简介 本文使用java引入apache提供的pdf操作工具生成pdf文件,主要是根据需求开发了一个util类,记录一下学习和开发过程. 业务需求 因为业务需要,对于不同的用户要生成一个不同的pdf文件 ...

  3. 【Spire.PDF】Spire.PDF导出报告之一获取与破解

    [Spire.PDF]Spire.PDF导出报告之一获取与破解 [Spire.PDF]Spire.PDF导出报告之二基本绘制Draw [Spire.PDF]Spire.PDF导出报告之三表格Grid ...

  4. java 导出word换行_Java 导出数据库表信息生成Word文档

    一.前言 最近看见朋友写了一个导出数据库生成word文档的业务,感觉很有意思,研究了一下,这里也拿出来与大家分享一波~ 先来看看生成的word文档效果吧 下面我们也来一起简单的实现吧 二.Java 导 ...

  5. JAVA实现导出mysql表结构到Word详细注解版

    JAVA实现导出mysql表结构到Word详细注解版 转自https://blog.csdn.net/weixin_42041153/article/details/109739073 本文在原文中一 ...

  6. Java 导出数据库表信息生成Word文档

    一.前言 最近看见朋友写了一个导出数据库生成word文档的业务,感觉很有意思,研究了一下,这里也拿出来与大家分享一波~ 先来看生成word文档效果吧 下面我们也来一起简单的实现吧 二.Java 导出数 ...

  7. java实现word批量多模版(浏览器zip压缩导出)

    用java实现word导出,如果不实现批量导出,可以只使用 word 替换工具,如果要实现批量导出,这里的解决办法是将所有的导出文件放入服务器临时文件,压缩后导出 1.依赖包 <dependen ...

  8. Java实现word导出与pdf导出

    实现PDF 导出 大部分都是用itext来实现,这次word导出我是用freemarker来实现,麻烦点,需要将其文档改成xml然后在改成ftl文件.如果不懂ftl文件语法请去看freemarker语 ...

  9. java word合并单元格_java使用freemarker模板导出word(带有合并单元格)文档

    前言:最近要做一个导出word功能,其实网上有很多的例子,但是我需要的是合并单元格的,可是查了好久都没有自己想要的.研究了几天其实挺简单的,在这儿我就简单的介绍一下吧!(此方法只是一种思路,借鉴者还有 ...

  10. 图片复制word java_java poi实现word导出(包括word模板的使用、复制表格、复制行、插入图片的使用)...

    java poi实现数据的word导出(包括word模板的使用.复制表格.复制行.插入图片的使用) 1.实现的效果 实现病人基本信息.多条病历数据.多项检查项图片的动态插入(网络图片) 2.模板 把w ...

最新文章

  1. Ultimate SLAM?利用事件相机解锁高速运动、高动态范围场景
  2. python电脑下载网址-python下载文件文件到本地电脑(基于requests)
  3. php和dart的区别,Dart相等和关系运算符
  4. win10必须禁用的服务_7寸屏的迷你电脑,就算是8GB运行内存,也必须关闭的系统选项...
  5. python网络爬虫系列(九)——打码平台的使用
  6. 【资源】《可解释的机器学习》,让机器学习不再神秘!
  7. 如何从字典中随机选择一个键
  8. 设计模式-策略模式(Strategy)
  9. HCIE-RS面试--RSTP为什么优于STP
  10. MFC 序列化的理解及困惑点
  11. ultraiso软碟通dmg转iso图文教程
  12. 微信识图之面向多源异构数据的检测器设计
  13. 上海财经应用统计考python_2021年上海财经大学应用统计硕士考研经验分享
  14. MySQL局域网连接失败问题解决
  15. Source Insight 4.0.0086 Patched
  16. 计算机制图孔中心线,NX制图(11):如何创建各种中心线?(一)
  17. hbase安装配置 整合到hadoop
  18. qbo_camera包 stereovision.cpp 代码分析
  19. AI创业哪家强?6大选择给你方向!
  20. Oracle两者同时满足,【判断题】逻辑或(OR)当多个条件同时满足时结果为真。

热门文章

  1. 诗词温习集:跟梁瀚文一起重温诗词(唐诗)之《春望》
  2. 单片机学习笔记(持续更新中)
  3. 一键logo生成器_如何做海报?公众号封面图?logo?词云?试试这几个设计网站,用过的都说好!...
  4. matlab 切点投资组合 程序,基于MATLAB的证券投资组合分析
  5. x5675相当于e5_2020年最新桌面CPU性能排行天梯图(含至强处理器)
  6. 接口测试需要了解的八种数据类型
  7. android gridview 选择变色 再点击还原 并支持多选。记录贴 01
  8. c语言求范围内最大素数,for语句计算输出10000以内最大素数怎么搞最简单??各位大神们...
  9. 《黑马》——C++核心编程
  10. ios 图片加载内存尺寸_iOS图片内存优化