通过FreeMarker生成word文档
1.先引入freemarker的jar包
<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.13</version>
</dependency>
2.制作模板文件:
新建一个word文件:
将变量替换成${xxx}
,将文件另存为xml,编辑器打开xml文件,确保${xxx}
内容正确。将文件已utf-8编码保存,另存为为.ftl
3.工具类WordUtils
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Service;import com.ekingwin.bas.common.model.LeaveDto;
import com.ekingwin.bas.reportform.service.SbwxFybxReportService;
import com.sun.org.apache.bcel.internal.generic.NEW;import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import sun.misc.BASE64Encoder;@Service
public class WordUtilService {private Configuration configuration = null;//private final String WORD_URL = "TestWordDownload.ftl";public WordUtilService() {configuration = new Configuration();configuration.setDefaultEncoding("UTF-8");}/*** 导出word 并提供下载* @param response* @param invarTitle 文档名称* @param dataMap 文档数据* @param docModel 文档模板*/public void download(HttpServletResponse response,String invarTitle,Map<String,Object> dataMap,String docModel) {BufferedInputStream bis = null;BufferedOutputStream bos = null;try {String fileName = invarTitle + "_"+System.currentTimeMillis() + ".doc";File file = createDoc(fileName,dataMap,docModel);response.setContentType("application/msword;charset=utf-8");response.addHeader("Content-Disposition", "attachment; filename=\""+ new String(fileName.getBytes(),"iso-8859-1") + "\"");bis = new BufferedInputStream(new FileInputStream(file));bos = new BufferedOutputStream(response.getOutputStream());byte[] buff = new byte[10240];int bytesRead;while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {bos.write(buff, 0, bytesRead);}bis.close();bos.close();} catch (Exception e) {e.printStackTrace();} }/*** 将文本信息转为word输出* @param fileName 文件名* @param dataMap 填充数据* @param docModel doc模板* @throws Exception */public File createDoc(String fileName,Map<String,Object> dataMap,String docModel) {configuration.setClassForTemplateLoading(this.getClass(), ""); //模板文件所在路径Template t = null;File file = new File(fileName);try {t = configuration.getTemplate(docModel); //获取模板文件t.setEncoding("utf-8");Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName),"utf-8"));t.process(dataMap, out); //将填充数据填入模板文件并输出到目标文件out.close();} catch (IOException e) {e.printStackTrace();} catch (TemplateException e) {e.printStackTrace();}return file;}/*//获得数据private void getData(Map<String,Object> dataMap) {//dataMap.put("theme", "主题是这个");dataMap.put("name", "张三先生");dataMap.put("content", "内容为空");获取图片String base64 = getBase64(dto.getPicture());dataMap.put("image", base64);}//获得图片的base64编码private String getBase64(String imgUrl) {ByteArrayOutputStream data = new ByteArrayOutputStream();URL url = null;InputStream in = null;HttpURLConnection httpUrl = null;byte[] by = new byte[1024];try {url = new URL(imgUrl);httpUrl = (HttpURLConnection)url.openConnection();httpUrl.connect();in = httpUrl.getInputStream();int len = -1;while((len = in.read(by)) != -1) {data.write(by, 0, len);}in.close();} catch (IOException e) {e.printStackTrace();}BASE64Encoder encoder = new BASE64Encoder();return encoder.encode(data.toByteArray());}*/}
4.调用
public void downloadDoc(HttpServletResponse response) {Map<String, Object> dataMap = new HashMap<String, Object>();dataMap.put("theme", "主题是这个");dataMap.put("name", "张三先生");dataMap.put("content", "内容为空");wordUtilService.download(response,"索赔通知书",dataMap,"TestWordDownload.ftl");}
参考:
java后台利用模板生成Word文档提供前台下载
java 根据模板,导出word并提供下载
java导出word的5种方式
[转载]java调用PageOffice生成word
通过FreeMarker生成word文档相关推荐
- spring使用freemarker生成word文档包含表格、图片(循环插入)
spring使用freemarker生成word文档包含表格.图片(循环插入) 效果图 因为测试数据是重复的,所以显示都是重复的数据,替换导入map中的数据可以显示不重复的数据. 操作步骤 1,创建一 ...
- 用freemarker生成word文档,并插入图片
用freemarker生成word文档,并插入图片 最近需要做一个问卷功能,要求用户填写完问卷后,后台会生成一个word文档,将用户提交的数据插入到word中. 创建word模板 新建一个word文档 ...
- Java使用freemarker生成word文档并转pdf文档
Java使用freemarker生成word文档后转pdf 先来看看效果图 进入正题 项目需求: 为订单后生成对应的pdf文档,文档内包含图片. 方案一:使用freemarker和itext把html ...
- 使用FreeMarker生成word文档(带图片),word转pdf,预览pdf,pdf下载工具类
一.下载或配置: 下载jar包 :freemaker的jar包下载 下载jar包 :aspose-words的jar包下载 或者配置maven依赖: pom.xml添加aspose的依赖包(maven ...
- 关于FreeMarker生成word文档后转换为pdf得解决方法及常见问题
关于FreeMarker生成word文档后转换为pdf得解决方法及常见问题 最近在做一个项目要求之前下载出的word简历直接变成pdf 格式进行展现.因为格式比较复杂,所以采用的时模板并用Freema ...
- Java通过POI或Freemarker生成word文档,使用Jfreechart创建统计图表
最近做了一个使用Java生成统计分析报告word文档的功能,有提前制作好的word文档,其中共包含了普通文本变量,普通表格,动态表格.统计图表(柱状图.饼状图.折线图等),在此记录下POI和freem ...
- (详细)如何使用Freemarker生成Word文档中的文本、图片、表格、附件?
前言-Freemarker简单介绍 近期项目工作中需要编写大量格式相同但数据不同的Word文档,需要实现自动生成文档的效果,但是通过网上冲浪和官方文档搜索,相对来说,没有分类整理的文档,因此自己抽空简 ...
- Java Web项目中使用Freemarker生成Word文档
Web项目中生成Word文档的操作屡见不鲜,基于Java的解决方案也是很多的,包括使用Jacob.Apache POI.Java2Word.iText等各种方式,其实在从Office 2003开始,就 ...
- Java freemarker 生成word文档
工具类 package cn.gh.util;import freemarker.template.Configuration; import freemarker.template.Template ...
- Java项目中使用Freemarker生成Word文档
Web项目中生成Word文档的操作屡见不鲜,基于Java的解决方案也是很多的,包括使用Jacob.Apache POI.Java2Word.iText等各种方式,其实在从Office 2003开始,就 ...
最新文章
- python中choicebox_学习python的第四天笔记
- 【一周速递】计算机视觉/图像处理论文集
- breeze源码阅读心得
- cgo linux arm,Golang交叉编译各个平台的二进制文件
- 获取小程序用户信息+java_java获取微信小程序用户信息
- ASP.NET获取客户端、服务器端基础信息
- 一个程序设计试题:读取2维字符数组,判断出表示的数字
- 三星Galaxy S20系列机模上手视频曝光:不再单独设置Bixby按键
- linux下使用vi操作
- L1-024 后天 (5 分) — 团体程序设计天梯赛
- Facebook内布拉斯加州数据中心将扩建100万平方英尺
- 基于单片机智能自动浇花控制系统设计(毕业设计)
- 用华秋DFM处理Allegro PCB文件
- java架构师之路:JAVA程序员必看的15本书
- Gitbook文档翻译
- 英伟达早期显卡驱动下载
- matlab化函数图像示例,Matlab绘制函数图像函数示例汇总
- S7-300系列PLC如何通过GSD文件实现PROFIBUS DP主从通讯?
- 卫星追踪利器 OpenATS简介
- 极客日报:王者荣耀道歉:因新游海报擅用原神素材;Facebook改名为Meta;Node.js v16.13.0发布
热门文章
- [010]Try块和异常处理
- 使用验证控件出现错误:要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping。”的解决办法。...
- SharePoint【Site Definition 系列】-- 05. List Definition与List Template之比较
- 迟到的读书笔记 李开复自传:世界因你不同
- Fedora 11的新特征和简易安置教程
- P3211 [HNOI2011]XOR和路径
- 404错误、500错误、异常错误提示页面的拦截和自定义
- Unknown collation: #39;utf8mb4_unicode_ci#39;
- C# WinFrom 对字符进行UTF-8编码
- 文档流、脱离文档流分析