package com.ry.project.util.commUtil;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

import java.io.*;
import java.util.Map;

public class WordUtil {
private Configuration configuration = null;

public WordUtil() {
configuration = new Configuration();
configuration.setDefaultEncoding("utf-8");
}
//指定下载路径
public void createDoc(Map<String, Object> dataMap, String fileName) throws UnsupportedEncodingException {
configuration.setClassForTemplateLoading(this.getClass(), "/");
Template doct = null;
try {
doct = configuration.getTemplate("infoModel.ftl", "utf-8");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

File outfile = new File(fileName);

Writer out = null;
FileOutputStream outputStream = null;

try {
outputStream = new FileOutputStream(outfile);
OutputStreamWriter oWriter = new OutputStreamWriter(outputStream, "UTF-8");
out = new BufferedWriter(oWriter);

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

try {
doct.process(dataMap, out);
out.close();
outputStream.close();

} catch (TemplateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
//不指定下载路径,,,默认浏览器下载,需要在代码中设置请求头
public void createDoc(Map<String, Object> dataMap, OutputStream outfil) throws UnsupportedEncodingException {

configuration.setClassForTemplateLoading(this.getClass(), "/");
System.out.println(">>>>>class:" + this.getClass());
Template doct = null;
try {
doct = configuration.getTemplate("model.ftl", "utf-8");
} catch (IOException e) {
e.printStackTrace();
}
Writer out = null;
OutputStreamWriter oWriter = new OutputStreamWriter(outfil, "UTF-8");
out = new BufferedWriter(oWriter);

try {
doct.process(dataMap, out);
System.out.println("《《《《《《《《下载结束》》》》》");
out.close();

} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}

response.reset();//清除空白行纺织报错
response.setHeader("Access-Control-Allow-Origin", "*");//所有域都可以跨
response.setHeader("Content-Type", "application/octet-stream;charset=UTF-8");//二进制 流文件
response.setHeader("Content-Disposition", "attachment;filename=" + endCodeFileName+".doc");//下载及其文件名
response.setHeader("Connection", "close");//关闭请求头连接
//设置文件在浏览器打开还是下载
response.setContentType("application/x-download");
 


}

前端下载文档的java工具类的更多相关文章

  1. Java Windows下读取注册表的工具类

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...

  2. Java工具类——通过配置XML验证Map

    Java工具类--通过配置XML验证Map 背景 在JavaWeb项目中,接收前端过来的参数时通常是使用我们的实体类进行接收的.但是呢,我们不能去决定已经搭建好的框架是怎么样的,在我接触的框架中有一种 ...

  3. Java工具类——数学相关的类

    Java工具类--数学相关的类 在上一篇文章中,我们系统学习了 Java 里面的包装类,那么这篇文章,我们就来学习一下Java提供好的类--数学相关的类. 一.数学类介绍 在最早期学习 Java 基础 ...

  4. java工具类系列 (四.SerializationUtils)

    java工具类系列 (四.SerializationUtils) SerializationUtils该类为序列化工具类,也是lang包下的工具,主要用于序列化操作 import java.io.Se ...

  5. 下载文档--Struts2中国的文件下载被显示为空间的问题

    下载文档--Struts2中国人似乎是空文件下载格问题 前言:近期公司项目中用到文件下载,依据底层,决定使用struts2的文件下载模式. 乱码大多数都攻克了,竟然出现中文文件下载时,中文文字显示为空 ...

  6. 排名前 16 的 Java 工具类

    在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...

  7. 排名前16的Java工具类

    原文:https://www.jianshu.com/p/9e937d178203 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法 ...

  8. 干货:排名前16的Java工具类

    在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...

  9. Java工具类:给程序增加版权信息

       我们九天鸟的p2p网贷系统,基本算是开发完成了.   现在,想给后端的Java代码,增加版权信息.   手动去copy-paste,太没有技术含量. 于是,写了个Java工具类,给Java源文件 ...

随机推荐

  1. odoo检查规则

    @api.multidef button_cancel(self): for move in self: if not move.journal_id.update_posted: raise Use ...

  2. TCP协议系列之一一什么是TCP协议,TCP的三次握手,为什么不是2次或4次?

    CP 为什么三次握手而不是两次握手(正解版) https://blog.csdn.net/lengxiao1993/article/details/82771768 自己理解说明一下: 比如说有一条管 ...

  3. 大数据学习(23)—— ZooKeeper实战

    本片介绍两方面内容,一方面是命令行操作,另一方面是Java调用API. ZooKeeper集群环境的搭建在Hadoop集群搭建里已经讲过了,这里不再赘述,本篇内容基于zk3.5.8. 这里补充一点,除 ...

  4. 文件包含 & LFI-labs靶场

    文件包含漏洞学习 冲冲冲,好好学习 2020.1.30 认真对待自己做出的每一个决定 知识与实践 Q:什么是文件包含? A:简单一句话,为了更好地使用代码的重用性,引入了文件包含函数,可以通过文件包含 ...

  5. 04.委托Delegation

    1. 基本了解 1.1 委托简述 官方文档 委托是一种引用类型,表示对具有特定参数列表和返回类型的方法的引用,用于将方法作为参数传递给其他方法,可将任何可访问类或结构中与委托类型匹配的任何方法分配给委 ...

  6. UI_UE在线就业-笔记

    UI设计 一.字体设计的应用范围 Logo设计.平面海报.包装设计.banner设计.APP引导页.UI图标.UI界面.影视设计 二.字体的分类 衬线字体和非衬线字体之分 区别在于笔画开始与结尾地方有 ...

  7. SpringBoot - 根据目录结构自动生成路由前缀

    目录 前言 具体实现 配置文件指定基础包 自动补全路由前缀处理类 自动补全路由前缀配置类 测试类 测试 前言 本文介绍如何根据目录结构给RequestMapping添加路由前缀(覆盖RequestMa ...

  8. pwnable.kr之simple Login

    pwnable.kr之simple Login 懒了几天,一边看malloc.c的源码,一边看华庭的PDF.今天佛系做题,到pwnable.kr上打开了simple Login这道题,但是这道题个人觉 ...

  9. PCE | 华中农大郭亮团队蛋白质组学揭示油菜内源氧化还原修饰介导盐胁迫响应

    蛋白质翻译后修饰(PTM)在控制植物生长发育以及逆境适应方面发挥着重要的作用.发生在半胱氨酸巯基的亚磺酰化修饰(R-SOH)是一种可逆的氧化修饰类型,可以通过与其他修饰形态形成二硫键的形式来保护蛋白不 ...

  10. Bugku-misc 1-8题总结

    1.签到题 略过 2.这是一张单纯的图片 拉入winhex,在最后面有一段Uniocde编码,解码得到flag. 3.隐写 题目是隐写,binwalk打开分析 得到两个Zlib(提供数据压缩用的函式库 ...