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文档相关推荐

  1. spring使用freemarker生成word文档包含表格、图片(循环插入)

    spring使用freemarker生成word文档包含表格.图片(循环插入) 效果图 因为测试数据是重复的,所以显示都是重复的数据,替换导入map中的数据可以显示不重复的数据. 操作步骤 1,创建一 ...

  2. 用freemarker生成word文档,并插入图片

    用freemarker生成word文档,并插入图片 最近需要做一个问卷功能,要求用户填写完问卷后,后台会生成一个word文档,将用户提交的数据插入到word中. 创建word模板 新建一个word文档 ...

  3. Java使用freemarker生成word文档并转pdf文档

    Java使用freemarker生成word文档后转pdf 先来看看效果图 进入正题 项目需求: 为订单后生成对应的pdf文档,文档内包含图片. 方案一:使用freemarker和itext把html ...

  4. 使用FreeMarker生成word文档(带图片),word转pdf,预览pdf,pdf下载工具类

    一.下载或配置: 下载jar包 :freemaker的jar包下载 下载jar包 :aspose-words的jar包下载 或者配置maven依赖: pom.xml添加aspose的依赖包(maven ...

  5. 关于FreeMarker生成word文档后转换为pdf得解决方法及常见问题

    关于FreeMarker生成word文档后转换为pdf得解决方法及常见问题 最近在做一个项目要求之前下载出的word简历直接变成pdf 格式进行展现.因为格式比较复杂,所以采用的时模板并用Freema ...

  6. Java通过POI或Freemarker生成word文档,使用Jfreechart创建统计图表

    最近做了一个使用Java生成统计分析报告word文档的功能,有提前制作好的word文档,其中共包含了普通文本变量,普通表格,动态表格.统计图表(柱状图.饼状图.折线图等),在此记录下POI和freem ...

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

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

  8. Java Web项目中使用Freemarker生成Word文档

    Web项目中生成Word文档的操作屡见不鲜,基于Java的解决方案也是很多的,包括使用Jacob.Apache POI.Java2Word.iText等各种方式,其实在从Office 2003开始,就 ...

  9. Java freemarker 生成word文档

    工具类 package cn.gh.util;import freemarker.template.Configuration; import freemarker.template.Template ...

  10. Java项目中使用Freemarker生成Word文档

    Web项目中生成Word文档的操作屡见不鲜,基于Java的解决方案也是很多的,包括使用Jacob.Apache POI.Java2Word.iText等各种方式,其实在从Office 2003开始,就 ...

最新文章

  1. python中choicebox_学习python的第四天笔记
  2. 【一周速递】计算机视觉/图像处理论文集
  3. breeze源码阅读心得
  4. cgo linux arm,Golang交叉编译各个平台的二进制文件
  5. 获取小程序用户信息+java_java获取微信小程序用户信息
  6. ASP.NET获取客户端、服务器端基础信息
  7. 一个程序设计试题:读取2维字符数组,判断出表示的数字
  8. 三星Galaxy S20系列机模上手视频曝光:不再单独设置Bixby按键
  9. linux下使用vi操作
  10. L1-024 后天 (5 分) — 团体程序设计天梯赛
  11. Facebook内布拉斯加州数据中心将扩建100万平方英尺
  12. 基于单片机智能自动浇花控制系统设计(毕业设计)
  13. 用华秋DFM处理Allegro PCB文件
  14. java架构师之路:JAVA程序员必看的15本书
  15. Gitbook文档翻译
  16. 英伟达早期显卡驱动下载
  17. matlab化函数图像示例,Matlab绘制函数图像函数示例汇总
  18. S7-300系列PLC如何通过GSD文件实现PROFIBUS DP主从通讯?
  19. 卫星追踪利器 OpenATS简介
  20. 极客日报:王者荣耀道歉:因新游海报擅用原神素材;Facebook改名为Meta;Node.js v16.13.0发布

热门文章

  1. [010]Try块和异常处理
  2. 使用验证控件出现错误:要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping。”的解决办法。...
  3. SharePoint【Site Definition 系列】-- 05. List Definition与List Template之比较
  4. 迟到的读书笔记 李开复自传:世界因你不同
  5. Fedora 11的新特征和简易安置教程
  6. P3211 [HNOI2011]XOR和路径
  7. 404错误、500错误、异常错误提示页面的拦截和自定义
  8. Unknown collation: #39;utf8mb4_unicode_ci#39;
  9. C# WinFrom 对字符进行UTF-8编码
  10. 文档流、脱离文档流分析