freemarker导出Word文档并在其中插入图片
- 先将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文档并在其中插入图片相关推荐
- freemarker导出word文档——WordXML格式解析
前不久,公司一个项目需要实现导出文档的功能,之前是一个同事在做,做了3个星期,终于完成了,但是在项目上线之后却发现导出的文档有问题,此时,这个同事已经离职,我自然成为接班者,要把导出功能实现,但是我看 ...
- 使用freemarker导出word文档包含多张图片
使用freemarker导出word文档包含多张图片 最近项目中有个需求就是导出word文档并且文档中需要有多张图片,我当时一脸懵逼啊,之前没有搞过这个啊,但是不要灰心,肯定会有很多人搞过的,百度一下 ...
- freemarker导出word文档
使用freemarker导出word文档的过程 **************************************************************************** ...
- Typora基础用法:pandoc安装,导入导出word文档,pdf文件。设置图片目录
点击观看B站视频 Typora基础用法:pandoc安装,导入导出word文档,pdf文件.设置图片目录. 一. pandoc安装 首次安装完typora,是没法导入的,需要安装pandoc 选择[请 ...
- SpringBoot整合Freemarker导出word文档表格
freemarker模板里面的template.process()方法里传入的第一个参数Object类型,如果是一个实体类对象在模板上怎么进行渲染,将实体类的值取出 freemarker会调用Obje ...
- Java+freemarker 导出Word文档的实现(包括word for Mac 插入域的方法)-静态数据,动态表格list
1. 准备环境 1.1 word版本:MacOS系统下的Office360 word for Mac下好多操作和win的不一样啊啊啊,差点栽在Mac word的模版设计上. win版本的word模版设 ...
- java循环导出word文档_Java使用freemarker导出word文档
通过freemarker,以及JAVA,导出word文档. 共分为三步: 第一步:创建模板文件 第二步:通过JAVA创建返回值. 第三步:执行 分别介绍如下: 第一步: 首先创建word文档,按照想要 ...
- (详细)如何使用Freemarker生成Word文档中的文本、图片、表格、附件?
前言-Freemarker简单介绍 近期项目工作中需要编写大量格式相同但数据不同的Word文档,需要实现自动生成文档的效果,但是通过网上冲浪和官方文档搜索,相对来说,没有分类整理的文档,因此自己抽空简 ...
- Word文档中如何进行插入图片操作
我们有时在制作Word文档时,需要添加图片进去,那怎么添加图片呢? 首先,用speedoffice打开Word文件,在"插入"里面找到"图片"项目: 然后,在下 ...
最新文章
- 【组队学习】【30期】时间序列分析
- EBS 11i数据库升级(9i-10g)几点事项
- mysql increment by 2_关于mysql auto-increment
- pytorch Tensor的操作和Numpy之间的转化(三)
- 即插即用的轻量注意力机制ECA--Net
- 制作安装媒体来部署额外域控制器
- Visio——软件工程实验贰——面向对象软件设计方法
- linux监控脚本是否运行状态,Linux Shell脚本之通过json判断应用程序内部运行状态...
- idea 连接云mysql_IDEA开发环境下配置JDBC连接MySQL
- 适合本科生的AI比赛目录
- win10下Redis安装教程(新手)
- 一秒语音是什么软件,微信一秒语音包软件
- Linux系统中搭建Docker容器 Portainer可视化界面
- 马尔科夫不等式与切比雪夫不等式
- 照片怎么转换成jpg?常见渠道一览
- 利用WebView加载HTML代码时解决图片正常显示
- Java redis实现消息队列
- 计算机考试打字合格速度,雅思考试使用机考,打字速度决定最终成绩
- java高清无损图片压缩
- 谈一款MOBA类游戏《码神联盟》的服务端架构设计与实现 (转载)
热门文章
- 校园采花经历(超级爆笑)
- Skippr – 轻量、快速的 jQuery 幻灯片插件
- scrapy使用用Xpath提取深层标签
- 华为手机 标题栏 Notification 8.0 不显示
- Django+itchat+apscheduler实现向指定微信群和微信好友定时发送信息和文件
- r7 6800u核显相当于什么显卡
- 38.DevOps之基于Jenkins实现的CI与CD
- 用Kindle阅读PDF最简单的3个方法!
- 【渝粤题库】陕西师范大学292251 公司金融学Ⅰ 作业(高起专)
- SATA 3.0 双通道 - 硬盘数据线 + 硬盘电源线