必威体育Betway必威体育官网
当前位置:首页 > IT技术

JAVA 下载Word文档

时间:2019-08-07 08:42:10来源:IT技术作者:seo实验室小编阅读:51次「手机版」
 

word文档下载

最近在做java中页面下载word文档,给大家分享一下。

我的环境是MyEclipse10 , JDK1.6 ,Tomcat 6,我这里使用的是FreeMarker。FreeMarker是一个引擎模板点击了解

FreeMarker。好了,废话不多说直接上代码

一。首先我们需要制作一个ftl模板,这样freemarker才能识别模板

我们新建一个word文档,非常简单的word生成

然后我们将这个word文档另存为xml格式,然后我们用notepad++ 或者其他编辑器打开它

这里使用notepad++ 打开。格式是不存在的我们需要调一下他的格式

们需要通过Plugin Manager进行安装插件。更郁闷的是7.5版本之后notepad++就不带Plugin Manager这一功能了。

当然我么可以通过https://blog.csdn.net/yuan_ren_sheng/article/details/80555430 这里进行下载安装,这里不再阐述

下载好以后我们点击Show Plugin Manager 找到xml Tools进行安装。安装好

通过这里Pretty开头的,我们把xml文件全选。然后随便点Pretty开头的方法。有的人notepad++上面没有XML Tools

格式调好了,然后把他转换成ftl结尾

写一个工具

package utils;

import java.io.File;
import java.io.Fileoutputstream;
import java.io.IOException;
import java.io.outputstreamwriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;

import freemarker.template.configuration;  
import freemarker.template.Template;
@SuppressWarnings("deprecation")  
public class DownUtil {
	 	private static Configuration configuration = null;
	    private static HashMap<String, Template> allTemplates = null;
	  
	    static {  
	        configuration = new Configuration();  
	        configuration.setDefaultEncoding("utf-8");  
	        configuration.setClassForTemplateLoading(DownUtil.class,"/ftl/");  
	        /*  
	         * allTemplates = new HashMap<>(); // Java 7 钻石语法  
	         */  
	        allTemplates = new HashMap<String, Template>();  
	        try {  
	            allTemplates.put("resume", configuration.getTemplate("word3.ftl"));  
	        } catch (IOException e) {  
	            e.printstacktrace();  
	            throw new runtimeexception(e);  
	        }  
	    }  
	  
	    private DownUtil() {  
	        throw new AssertionERROR();  
	    }  
	  
	    public static File createDoc(Map<?, ?> dataMap, String type) {  
	        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;  
	    }  
}

web.xml

    
    <servlet>
        <servlet-name>HelloWorld</servlet-name>
        <servlet-class>servlet.download</servlet-class>
    </servlet>

    <servlet-mAPPing>
        <servlet-name>HelloWorld</servlet-name>
        <url-pattern>/HelloWorld</url-pattern>
    </servlet-mapping>

这里直接访问HelloWorld让他触发浏览器下载引擎。

Servlet层

package servlet;

import java.io.File;
import java.io.fileinputstream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletrequest;
import javax.servlet.http.HttpServletresponse;

import utils.DownUtil;


public class download extends HttpServlet {
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");  
        Map<String, Object> map = new HashMap<String, Object>();  
/*      Enumeration<String> paramNames = req.getparameterNames();  
        // 通过循环将表单参数放入键值对映射中  
        while (paramNames.hasMoreElements()) {  
            String key = paramNames.nextElement();  
            String value = req.getParameter(key);  
            map.put(key, value);  
        }*/  
        map.put("topic", "我是标题");  
        map.put("module", "我是模块");  
        // 提示:在调用工具类生成Word文档之前应当检查所有字段是否完整  
        // 否则Freemarker的模板殷勤在处理时可能会因为找不到值而报错 这里暂时忽略这个步骤了  
        File file = null;  
        InputStream fin = null;  
        ServletOutputStream out = null;  
        try {  
            // 调用工具类WordGenerator的createDoc方法生成Word文档  
            file = DownUtil.createDoc(map, "resume");  
            fin = new FileInputStream(file);  
  
            resp.setCharacterEncoding("utf-8");  
            resp.setcontentType("application/msword");  
            // 设置浏览器以下载的方式处理该文件默认名为resume.doc  
            resp.addHeader("content-Disposition","attachment;filename=resume.doc");  
  
            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(); // 删除临时文件  
        }  
	}
	
}

相关阅读

Java小项目中WEB-INF下jsp页面如何访问

一:一般为啥要把jsp页面放在WEB-INF呐?     这样主要是为了网站的安全的角度来说的,WEB-INF是安全目录Tomcat 默认的访问路径是W

Java ——简易俄罗斯方块

一、将对象抽象为类首先考虑俄罗斯方块游戏中含有哪些具体的对象,对象中含有哪些具体属性和方法,然后用代码来实现。建立如下类:Cell

Java接口练习

/**2.编程题: 利用接口做参数,写个计算器,能完成加减乘除运算。 (1)定义一个接口Compute含有一个方法int computer(int n, int m)。

JAVA布局模式:GridBagConstraints终极技巧

GridBagConstraints布局,先发一个实例:gridx = 2; // X2gridy = 0; // Y0gridwidth = 1; // 横占一个单元格gridheight = 1; // 列

【官网】微信骰子魔术手APP魔术手骰子控制隐形魔术手

微信骰子魔术手APP魔术手骰子控制隐形魔术手软件可以3连发5连发6连发任意个数可以录制视频,可以任意控制骰子的点数,想出几就可以出

分享到:

栏目导航

推荐阅读

热门阅读