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. 阿里公开招募鉴黄师,日薪1000元,还送硬盘和网盘会员?!
  2. 如何使用R来连接各个数据库
  3. android中实现返回首页功能
  4. python之父叫什么-Python之父:为什么操作符很有用?
  5. c#获取对象的唯一标识_Articy Importer Guide - 01 基本对象处理
  6. 聚焦数字化智慧安防的新型社区
  7. 【Flink】Flink checkpoint was declined
  8. 中小微企业一大重要数据解析|司法数据指标与报告维度
  9. Apollo注册到自己的Eureka注册中心+配置中心集群
  10. [Hive]Hive合并小文件
  11. ring0检测隐藏进程
  12. AB-PLC软件安装以及授权
  13. cadence 与ad DXF 转换 以及板框制作
  14. 污水流量计常见故障形成原因检测方法
  15. nginx处理redirect location端口丢失的问题
  16. zencart模板,外贸鞋子模板
  17. Advanced COM Interop
  18. [19/05/14-星期二] HTML_body标签(列表标签和图片标签)
  19. 什么是Web应用防火墙
  20. Lumerical官方案例、FDTD时域有限差分法仿真学习(十四)——超透镜(Metalens)

热门文章

  1. 网页打开桌面应用windows版
  2. 劲舞团服务器中断解决方法,劲舞团一直连接中断什么连锁反应
  3. 树莓派入手,相关设置以及使用迅雷远程下载
  4. 列表标签,自定义列表,img标签,超链接a标签
  5. 二本理科计算机专业大学,二本大学 理科 计算机排名
  6. Easy-Forex外汇平台
  7. 八个小数码管滚动显示单个数字
  8. python 节气计算_Python可视化-二十四节气与生日间隔天数统计
  9. 不需要分层的双层车牌识别新方案
  10. 客户关系管理系统的系统需求分析与数据库设计