1. 先将word转成xml格式,再用notepad将其转为ftl格式(将要填入数据的地方加个占位符,${name})
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.test.person.WordGenerator;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class personServlet extends HttpServlet {private static final long serialVersionUID = 1L;public personServlet() {super();}protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}
/** freemarker导出Word文档并在其中插入图片 分页和一页 代码没区别 有四处 xxx.doc*/protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");Map<String, Object> map = new HashMap<String, Object>();/** // 通过循环将表单参数放入键值对映射中 // 提示:在调用工具类生成Word文档之前应当检查所有字段是否完整 //* 否则Freemarker的模板殷勤在处理时可能会因为找不到值而报错 这里暂时忽略这个步骤了 Enumeration<String>* paramNames = request.getParameterNames();* while(paramNames.hasMoreElements()) { String key =* paramNames.nextElement(); String value = request.getParameter(key);* map.put(key, value); }*/map.put("title", "评定");
map.put("img",WordGenerator.getImageString("C:/Users/Public/Pictures/Sample Pictures/3.png"));File file = null;InputStream fin = null;ServletOutputStream out = null;try {// 调用工具类WordGenerator的createDoc方法生成Word文档file = WordGenerator.createDoc(map, "成绩评定表");fin = new FileInputStream(file);response.setCharacterEncoding("utf-8");response.setContentType("application/msword");// 设置浏览器以下载的方式处理该文件默认名为xxx.doc //URLEncoder.encode("成绩评定表.doc",// "UTF-8")response.addHeader("Content-Disposition", "attachment;filename="+ new String("成绩评定表.doc".getBytes("GB2312"), "ISO_8859_1"));out = response.getOutputStream();byte[] buffer = new byte[512]; // 缓冲区int b = -1;// 通过循环将读入的Word文件的内容输出到浏览器中while ((b = fin.read(buffer)) != -1) {out.write(buffer, 0, b);}} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e);// response.getWriter().print("cuowu ");} finally {if (fin != null)fin.close();if (out != null)out.close();if (file != null)file.delete(); // 删除临时文件}}}
package com.test.person;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;import sun.misc.BASE64Encoder;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;public class WordGenerator {private static Configuration configuration = null;private static Map<String, Template> allTemplates = null;static {configuration = new Configuration();configuration.setDefaultEncoding("utf-8");configuration.setClassForTemplateLoading(WordGenerator.class,"/com/test/person");allTemplates = new HashMap<>(); // Java 7 钻石语法try {allTemplates.put("成绩评定表",configuration.getTemplate("成绩评定表.ftl"));} catch (IOException e) {e.printStackTrace();throw new RuntimeException(e);}}private WordGenerator() {throw new AssertionError();}public static File createDoc(Map<?, ?> dataMap, String filename)throws TemplateException, IOException {String name = "temp" + (int) (Math.random() * 100000) + ".doc";File f = new File(name);Template t = allTemplates.get(filename);// 这个地方不能使用FileWriter因为需要指定编码类型否则生成的Word文档会因为有无法识别的编码而无法打开Writer w = new OutputStreamWriter(new FileOutputStream(f), "utf-8");t.process(dataMap, w);w.close();return f;}// 将图片转换成BASE64字符串public static String getImageString(String imgname) throws IOException {InputStream in = null;byte[] data = null;try {in = new FileInputStream(imgname);data = new byte[in.available()];in.read(data);in.close();} catch (IOException e) {throw e;} finally {if (in != null)in.close();}BASE64Encoder encoder = new BASE64Encoder();return data != null ? encoder.encode(data) : "";}}

freemarker导出Word文档并在其中插入图片相关推荐

  1. freemarker导出word文档——WordXML格式解析

    前不久,公司一个项目需要实现导出文档的功能,之前是一个同事在做,做了3个星期,终于完成了,但是在项目上线之后却发现导出的文档有问题,此时,这个同事已经离职,我自然成为接班者,要把导出功能实现,但是我看 ...

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

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

  3. freemarker导出word文档

    使用freemarker导出word文档的过程 **************************************************************************** ...

  4. Typora基础用法:pandoc安装,导入导出word文档,pdf文件。设置图片目录

    点击观看B站视频 Typora基础用法:pandoc安装,导入导出word文档,pdf文件.设置图片目录. 一. pandoc安装 首次安装完typora,是没法导入的,需要安装pandoc 选择[请 ...

  5. SpringBoot整合Freemarker导出word文档表格

    freemarker模板里面的template.process()方法里传入的第一个参数Object类型,如果是一个实体类对象在模板上怎么进行渲染,将实体类的值取出 freemarker会调用Obje ...

  6. Java+freemarker 导出Word文档的实现(包括word for Mac 插入域的方法)-静态数据,动态表格list

    1. 准备环境 1.1 word版本:MacOS系统下的Office360 word for Mac下好多操作和win的不一样啊啊啊,差点栽在Mac word的模版设计上. win版本的word模版设 ...

  7. java循环导出word文档_Java使用freemarker导出word文档

    通过freemarker,以及JAVA,导出word文档. 共分为三步: 第一步:创建模板文件 第二步:通过JAVA创建返回值. 第三步:执行 分别介绍如下: 第一步: 首先创建word文档,按照想要 ...

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

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

  9. Word文档中如何进行插入图片操作

    我们有时在制作Word文档时,需要添加图片进去,那怎么添加图片呢? 首先,用speedoffice打开Word文件,在"插入"里面找到"图片"项目: 然后,在下 ...

最新文章

  1. 【组队学习】【30期】时间序列分析
  2. EBS 11i数据库升级(9i-10g)几点事项
  3. mysql increment by 2_关于mysql auto-increment
  4. pytorch Tensor的操作和Numpy之间的转化(三)
  5. 即插即用的轻量注意力机制ECA--Net
  6. 制作安装媒体来部署额外域控制器
  7. Visio——软件工程实验贰——面向对象软件设计方法
  8. linux监控脚本是否运行状态,Linux Shell脚本之通过json判断应用程序内部运行状态...
  9. idea 连接云mysql_IDEA开发环境下配置JDBC连接MySQL
  10. 适合本科生的AI比赛目录
  11. win10下Redis安装教程(新手)
  12. 一秒语音是什么软件,微信一秒语音包软件
  13. Linux系统中搭建Docker容器 Portainer可视化界面
  14. 马尔科夫不等式与切比雪夫不等式
  15. 照片怎么转换成jpg?常见渠道一览
  16. 利用WebView加载HTML代码时解决图片正常显示
  17. Java redis实现消息队列
  18. 计算机考试打字合格速度,雅思考试使用机考,打字速度决定最终成绩
  19. java高清无损图片压缩
  20. 谈一款MOBA类游戏《码神联盟》的服务端架构设计与实现 (转载)

热门文章

  1. 校园采花经历(超级爆笑)
  2. Skippr – 轻量、快速的 jQuery 幻灯片插件
  3. scrapy使用用Xpath提取深层标签
  4. 华为手机 标题栏 Notification 8.0 不显示
  5. Django+itchat+apscheduler实现向指定微信群和微信好友定时发送信息和文件
  6. r7 6800u核显相当于什么显卡
  7. 38.DevOps之基于Jenkins实现的CI与CD
  8. 用Kindle阅读PDF最简单的3个方法!
  9. 【渝粤题库】陕西师范大学292251 公司金融学Ⅰ 作业(高起专)
  10. SATA 3.0 双通道 - 硬盘数据线 + 硬盘电源线