1.准备word文档 fhd1.doc

2.将其另存为.xml 格式

3.用Notepad++ ;

里 XML TOOL >>>Pretty print (第二个,XML TOOL 在插件管理里有手动下载);打开检查文件;

列出一个错误的;

4.检查完毕后:另存为fhd1.ftl 文件;
在项目中打开fhd1.ftl 文件;
编辑添加<#list lists as list> </#list> 将图一的信息包裹进去

准备工作完毕后写一个工具类:

import java.io.*;
import java.util.HashMap;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;
import javax.servlet.http.HttpServletRequest;public class DownUtil {private static Configuration configuration = null;private static HashMap<String, Template> allTemplates = null;private DownUtil() {throw new AssertionError();}public static File createDoc(Map<?, ?> dataMap, String type, HttpServletRequest req) {configuration = new Configuration();configuration.setDefaultEncoding("utf-8");configuration.setServletContextForTemplateLoading(req.getSession().getServletContext(), "/ftl");//req.getSession().getServletContext() 项目根目录,下图中b2c,文件放到 target wedapp下; "/ftl"文件夹allTemplates = new HashMap<String, Template>();try {allTemplates.put("resume", configuration.getTemplate("fhd1.ftl"));//文件名称} catch (IOException e) {e.printStackTrace();throw new RuntimeException(e);}String name = "temp" + (int) (Math.random() * 100000) + ".doc";File f = new File(name);Template t = allTemplates.get(type);try {// 这个地方不能使用FileWriter因为需要指定编码类型否则生成的Word文档会因为有无法识别的编码而无法打开Writer w = new OutputStreamWriter(new FileOutputStream(f), "utf-8");t.process(dataMap, w);w.close();} catch (Exception ex) {ex.printStackTrace();throw new RuntimeException(ex);}return f;}}


方法的实现controller

 @RequestMapping("/write")public void write(HttpServletRequest req, HttpServletResponse resp) {int orderid = Integer.parseInt(req.getParameter("order_id"));   //查询数据目标IDString type = req.getParameter("type");//1为发货单,2为快递单try {orderPrintManager.service(req,resp,orderid,type);}catch ( Exception e){e.printStackTrace();}}

service方法
public void service(HttpServletRequest req, HttpServletResponse resp,int orderid,String type) throws ServletException, IOException;
serviceimpl方法

@Override
public void service(HttpServletRequest req, HttpServletResponse resp,int orderid,String type)
throws ServletException, IOException {
req.setCharacterEncoding(“utf-8”);
Map<String, Object> map = new HashMap<String, Object>();
/* Enumeration paramNames = req.getParameterNames();
// 通过循环将表单参数放入键值对映射中
while (paramNames.hasMoreElements()) {
String key = paramNames.nextElement();
String value = req.getParameter(key);
map.put(key, value);
}*/
List lists = this.listItems(orderid);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
String format = simpleDateFormat.format(new Date());
BigDecimal prices = BigDecimal.ZERO;
String shisi = “”;
String dianhua22= “”;
String dianhua= “”;
int itemCount = 0;
for (Map item : lists) {
int num = (Integer)item.get(“num”);
BigDecimal price = BigDecimalUtil.getBigDecimal(item.get(“price”));
shisi = item.get(“ship_name”).toString();
dianhua22 = item.get(“ship_addr”).toString();
dianhua = item.get(“ship_mobile”).toString();
itemCount+=num;
prices=prices.add(price);
}

    map.put("sj", format);map.put("num", orderid);map.put("sums", itemCount);map.put("prices", prices);map.put("shisi", shisi);map.put("dianhua22", dianhua22);map.put("dianhua", dianhua);String dz;if(type.equals(1)){map.put("dz", "发货单");dz="发货单.doc";}else {map.put("dz", "快递单");dz="快递单.doc";}map.put("lists", lists);// 提示:在调用工具类生成Word文档之前应当检查所有字段是否完整// 否则Freemarker的模板殷勤在处理时可能会因为找不到值而报错 这里暂时忽略这个步骤了File file = null;InputStream fin = null;ServletOutputStream out = null;try {// 调用工具类WordGenerator的createDoc方法生成Word文档file = DownUtil.createDoc(map, "resume",req);fin = new FileInputStream(file);resp.setCharacterEncoding("utf-8");resp.setContentType("application/msword");// 设置浏览器以下载的方式处理该文件默认名为resume.docresp.addHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(dz, "UTF-8"));out = resp.getOutputStream();byte[] buffer = new byte[512]; // 缓冲区int bytesToRead = -1;// 通过循环将读入的Word文件的内容输出到浏览器中while ((bytesToRead = fin.read(buffer)) != -1) {out.write(buffer, 0, bytesToRead);}} finally {if (fin != null)fin.close();if (out != null)out.close();if (file != null)file.delete(); // 删除临时文件}
}
OK;有疑问请留言

动态word文档 下载相关推荐

  1. 帝国cms把网站文章内容生成word文档下载插件

    帝国cms把网站文章内容生成word文档下载插件 插件介绍 jQuery Word Export是一款可以将网页中的文字导出到微软Word文档中的jQuery插件.它通过FileSaver.js文件来 ...

  2. 纯前端vue利用docxtemplater实现生成word文档下载 word模板,勾选框的默认勾选。。

    首先需要下载如下工具: cnpm i docxtemplater pizzip jszip-utils file-saver -S 然后将它们引入: import JSZipUtils from &q ...

  3. Vue+ElementUi 项目中 将页面内容转为 Word文档下载

    Vue+ElementUi 项目中 将页面内容转为 Word文档下载 需要提前做好的现成模板(魔板个页面基本上相同的内容)-模板内有变量,替换成页面对应的数据 HTML页面: 转换的word 以下是正 ...

  4. JAVA实现Freemarker生成动态数据的Word文档下载到浏览器

    使用的jar包版本:freemarker-2.3.28.jar 使用开发工具:idea 1. 创建模板: 新建一个word文档,打开后编辑成想要的格式 动态数据替换成${xxx},如果是多条集合用${ ...

  5. 根据模板生成word文档下载

    需求:根据数据库已有字段,填入写好的word并下载 工具 :freemark   一种方便生成word的引擎,内置好大量基础方法 思路: 一.将数据库数据按需求(根据id,根据name......)提 ...

  6. Word文档下载(图片,数据表格)

    Java 下载Word文档xwpfTemplate Java 下载Word文档xwpfTemplate 文档下载(图片,数据表格),pom依赖 <dependency><groupI ...

  7. php将html转成word文档下载

    <?php class word{ function start(){ ob_start(); echo ''; } function save($path) { echo "&quo ...

  8. 刘备学Android Word文档下载地址和序言

    序言 刘备学Android,采用了一种简单娱乐的方式去介绍了Android的一些基础知识,适用于刚开始学习Android的同学们. 刘备学Android,在内容上,稍微有点落后现在的Android版本 ...

  9. 【Java用法】使用Java导出word文档的解决方案(适用于从服务器上下载到本地电脑)

    本文目录 一.Controller 二.Service 接口类 三.ServiceImpl 实现类 四.Content-Type 类型与MIME Type类型对照表 最近在做一个word导出功能,需求 ...

最新文章

  1. 1、为什么使用Long时,推荐多使用valueOf方法,少使用parseLong方法
  2. kubeasz_使用kubeasz安装K8S集群,不受国内网络环境影响
  3. 什么检索是借助计算机技术进行自动标引的,自动文献检索系统
  4. Swift使用通知Notification
  5. 计算机视觉,基于skimage对图像阈值分割的学习
  6. makemoney 秘密
  7. 【深度学习】——pytorch搭建模型及相关模型
  8. python入侵数据库数据库_一个简单的Python访问Mysql数据库例子
  9. C++ char 类型:字符型和最小的整型
  10. 博文视点学院直播:如何用产品思维解决生活中的迷茫
  11. NSIS安装vcredist_64.exe
  12. 【工具-Hydra】暴力破解神器:Hydra-九头蛇
  13. 热插拔技术详解(上)
  14. 《后端》bug: java.lang.IllegalArgumentException: geronimo.jta.1.1.spec: Invalid module name: ‘1‘ is not
  15. PS下的遥感图像修图
  16. 什麼是雲端服務?阿正老師教你免費玩Amazon EC2雲端主機!(上篇)
  17. MyBatis-Plus之多租户架构(Multi-tenancy)——SAAS
  18. 三、Linux文件管理
  19. 排列组合中关于捆绑法、插空法、插隔板法
  20. 一点资讯推出“长风计划” 内容分发平台进入拉人大战

热门文章

  1. c++实现含有中文字符的字符串逆转,如:“我是小萌新”转换成“新萌小是我”
  2. 以外勤人员管理博企业管理效益
  3. 劲舞团登陆时与服务器中断,劲舞团登录就与服务器连接中断这是什么原因?
  4. 从零开始之驱动发开、linux驱动(五、字符驱动之led驱动改进)
  5. I - Inverted Deck
  6. 连接组学--神经科学的前沿 ------《连接组》读后感读书笔记
  7. 【最强白嫖指南】课代表来啦:35个免费宝藏网站,你居然还不知道?!
  8. Win11自定义电脑右下角时间显示格式
  9. Vmware VRA vRealize Automation 7 看不到Endpoint里的computer resource 故障排除
  10. Android之Emoji表情开源库