java导出word文档

使用freemarker模板导出word文档,用的比较多。这里也是采用的这种方式。

1  编辑一个word文件的模板,用于在程序中需要读入填充在模板中的数据先用字母代替,注意word版本为word2003或高于这个版本;

如:test.doc

2 把模板另存为xml文件;

如:test.xml

3 在xml中查找之前用字母代替的值 加上${} ,如${test}  ${guojia},把文件名改为test.ftl;

4 在项目的WebContent目录下新建一个文件夹,把test.xml放进去;

5 编写代码;

package com.web.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;
import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ActionSupport;

import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
@Controller
public class ExportAction extends ActionSupport{
	//word模板
	public static final String word_template="/test.ftl";
	//存放模板的目录
	public static final String template_path="/template";
	//临时文件
	public static final String word_temp="/temp.doc";

	public String executeExport(){
		HttpServletRequest request=ServletActionContext.getRequest();
		HttpServletResponse response=ServletActionContext.getResponse();	

		try {
			Map dataMap=new HashMap();
			if(getData(request, response, dataMap)){
				File previewFile=new File(request.getSession().getServletContext().getRealPath(word_temp));
				InputStream is=new FileInputStream(previewFile);
				response.reset();
				response.setContentType("application/vnd.ms-word;charset=UTF-8");
				response.setHeader("Content-Disposition","attachment; filename=export.doc");
				OutputStream os=response.getOutputStream();
				byte[] b=new byte[1024];
				int len;
				while((len=is.read(b))!=-1){
					os.write(b, 0, len);
				}
				is.close();
				os.flush();
				os.close();
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public static Template configTemplate(HttpServletRequest request,String temp){
		Template template=null;
		try {
			Configuration cfg=new Configuration();
			ServletContext application=request.getSession().getServletContext();
			System.out.println(application.getRealPath(template_path));
			cfg.setDirectoryForTemplateLoading(new java.io.File(application.getRealPath(template_path)));
			cfg.setObjectWrapper(new DefaultObjectWrapper());
			template=cfg.getTemplate(temp,"utf-8");
		} catch (Exception e) {
			e.printStackTrace();
		}

		return template;
	}

	public static void toPreview(HttpServletRequest request,String temp,Map<?, ?> root){
		try {
			String previewPath=request.getSession().getServletContext().getRealPath("")+word_temp;
			Template tmplate=configTemplate(request, temp);
			FileOutputStream fis=new FileOutputStream(previewPath);
			Writer out=new OutputStreamWriter(fis,"utf-8");
			tmplate.process(root, out);
			out.flush();
			out.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public boolean getData(HttpServletRequest request,HttpServletResponse response,Map dataMap){
		dataMap.put("test", "测试");
		dataMap.put("guojia", "中国");
		dataMap.put("shoudu", "首都");
		toPreview(request, word_template, dataMap);
		return true;
	}

}

6 我用的struts2,executeExport为处理请求的方法,之前返回值我写的是任意字符串,不影响结果但是抛出异常 java.lang.IllegalStateException,我把返回的字符串改成null,这个异常被解决了。呵呵 当然这是和导出无关的事情,只是在这个程序里遇到了这个问题。

7  导出结果:



时间: 2024-10-10 20:39:10

java导出word文档的相关文章

Java 用Freemarker完美导出word文档(带图片)

Java  用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. 准备材料 1.word原件 2.编辑器(推荐Firstobject free XML editor) 实现步骤 1.用Microsoft Office Word打开word原件: 2.把需要动态修改的内容替换成***,如果有图片,尽量选择较小的图片几十K左右,并调整好位置: 3.另存为,选择保存类型

JAVA原始的导出excel文件,快捷通用 方便 还可以导出word文档哦

现在导出excel基本上都是用poi了,当报表格式很负责的时候 开发难度会加大 如果报表有格式有变化 那就更复杂了,先发现一个很老的技术,可以解决格式复杂的报表. 实例代码如下: <%@ page contentType="application/vnd.ms-excel;charset=GBK" %> <%@page import="java.net.URLEncoder"%> <% String filedisplay = &quo

java 处理word文档 (含图片,表格内容)

由于本人长期从事Oa相关项目的开发,所以处理word文档,Pdf,Excel等是在所难免的. 1.需求      处理Excel 可以用jxl        或者poi 2需求     用户在系统上填写信息,保存后导出标准的word文档,用户在系统上填写的信息我们用富文本编辑工具kindEditor,这个插件可以将用户从word文档拷贝的表格标签保存,但是图片信息需要另行上传. 现在问题出来了,我们要将这些包含图片,表格,特殊符号的东东生成word文档. 如果是单纯的没有特殊格字符,图片等信息,

自动生成并导出word文档

今天很荣幸又破解一现实难题:自动生成并导出word文档 先看页面效果: word效果: 代码: 先搭建struts2项目 创建action,并在struts.xml完成注册 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

[转载]Java生成Word文档

在开发文档系统或办公系统的过程中,有时候我们需要导出word文档.在网上发现了一个用PageOffice生成word文件的功能,就将这块拿出来和大家分享. 生成word文件与我们编辑word文档本质上是相同的,只不过在用程序生成word文档的时候换成了用代码来操作.下面的例子中主要有添加标题,正文(段落.字体.字号.倍行间距.对齐方式.首行缩进等),插入图片等操作.这里写的例子给出的内容只是PageOffice 组件生成word文件的部分方法,需要使用更多方法的还是要自己根据实际的需求去查看AP

java导出pdf文档

java导出pdf文档,多是iText实现的,可以创建pdf文档,并向文档写入内容. 1 导入包:itext-2.0.6.jar       itext必须使用的包. iTextAsian.jar      向pdf写入中文必须的包. 2 代码: package com.exp.pdf; import java.awt.Color; import java.io.FileOutputStream; import com.lowagie.text.Document; import com.lowa

通过NPOI导出Word文档

1 XWPFDocument doc = new XWPFDocument(); 2 XWPFParagraph p0 = doc.CreateParagraph(); 3 p0.Alignment = ParagraphAlignment.LEFT; 4 5 XWPFRun r0 = p0.CreateRun(); 6 r0.FontFamily = "宋体"; 7 r0.FontSize = 18; 8 r0.IsBold = true; 9 r0.SetText("未登

C#,WPF使用word模板导出word文档

使用word模板导出word文档,首先需要在word模板中插入书签: 根据创建的书签名和位置,将需要写入的内容插入到word文件中. 需要引用  Microsoft.Office.Interop.Word;在添加引用-程序集中搜索可以找到. using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Windows; usin

C# 导出word文档及批量导出word文档(1)

这里用到了两个dll,一个是aspose.word.dll,另外一个是ICSharpCode.SharpZipLib.dll,ICSharpCode.SharpZipLib.dll是用于批量导出word文档的,通过把文件打包成压缩包,以文件流的方式输出下载.aspose.word.dll最好使用最新版的,14.5或者更高,我使用的是14.5版本,页面是采用mvc的语法.在这里感谢赵某人为我提供的帮助.         首先制作好word模板,使用模板可以避免在代码中对word进行排版,方便简单.