java导出数据到word文档中

1.功能概述:

web项目中,在html文件点击下载word文件,后台获取要输出的数据再导出到word文档中

 2. 操作步骤:

  (1).新建word模板,凡是需要填充的数据用${xxxx},编辑好word文档后,另存为word文档的(*.xml),命名为word.xml(名字不可更改)
 (2).在web项目中webroot目录下新建template文件夹,并将word.xml文件放到template文件夹下
 (3).拷贝DocUtil.java工具类到项目中,如下面的调用实例

 (4).界面上一个点击下载的按钮,访问该controller方法即可

3.依赖的maven文件:


<dependency>  
    <groupId>org.freemarker</groupId>  
    <artifactId>freemarker</artifactId>  
    <version>2.3.23</version>  
</dependency>  
<dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>javax.servlet-api</artifactId>
   <version>3.1.0</version>
   <scope>provided</scope>
</dependency>


4.java工具代码:

/**     
 * @文件名称: DocUtil.java   
 * @描述: TODO  
 * @作者:  wuwh
 * @时间:2018年4月10日 上午10:36:08  
 * @版本:V1.0     
 */ 


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.URLEncoder;
import java.util.Map;

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

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

/**  
 * @类功能说明:    1.该代码在web项目中调用使用,需要在项目中的webroot目录下新建一个template文件夹,然后将预定义word的模板转成word.xml文件放入template文件下即可
 * 			2.将要输出的数据放到map集合中,作为参数传入即可
 			依赖jar包:
			freemarker-2.3.13.jar
 * @作者: wuwh
 * @创建时间:2018年4月10日 上午10:36:08  
 * @版本:V1.0  
 */
public class DocUtil {
	public static void download(HttpServletRequest request,HttpServletResponse response,String newWordName,Map dataMap) {
		Configuration configuration = new Configuration();
		configuration.setDefaultEncoding("utf-8");                                       //注意这里要设置编码

      //模板文件word.xml是放在WebRoot/template目录下的
		configuration.setServletContextForTemplateLoading(request.getSession()
				.getServletContext(), "/template");

		Template t = null;
		try {
			//word.xml是要生成Word文件的模板文件
			t = configuration.getTemplate("word.xml","utf-8");                  // 文件名 还有这里要设置编码
		} catch (Exception e) {
			e.printStackTrace();
		}
		File outFile = null;
		Writer out = null;
		String filename = newWordName;
		try {
			outFile = new File(newWordName);
			out = new BufferedWriter(new OutputStreamWriter(
					new FileOutputStream(outFile),"utf-8"));                 //还有这里要设置编码
			
		} catch (Exception e1) {
			e1.printStackTrace();
		}

		try {
			t.process(dataMap, out);
		} catch (Exception e) {
			e.printStackTrace();
		}
		try {
			out.flush();
			out.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		InputStream fis = null;
		OutputStream toClient = null;
		try {
			fis = new BufferedInputStream(new FileInputStream(outFile));
			byte[] buffer = new byte[fis.available()];
			fis.read(buffer);
			fis.close();
			// 清空response
			response.reset();
			// 设置response的Header
			filename = URLEncoder.encode(filename, "utf-8");                                  //这里要用URLEncoder转下才能正确显示中文名称
			response.addHeader("Content-Disposition", "attachment;filename=" + filename+"");
			response.addHeader("Content-Length", "" + outFile.length());
			toClient = new BufferedOutputStream(response.getOutputStream());
			response.setContentType("application/octet-stream");
			toClient.write(buffer);
			toClient.flush();
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			try {
				if(fis!=null){
					fis.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				if(toClient!=null){
					toClient.close();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}


5.调用示例:


@RequestMapping("getDoc")
public void getDoc( HttpServletRequest request,HttpServletResponse response) {
MessageVO vo = new MessageVO();
Map<String,String> dataMap = new HashMap<String,String>();
dataMap.put("title", "个人信息");
dataMap.put("name", "wuhui");
dataMap.put("age", "18");
dataMap.put("birthday", "2000-11-11");
dataMap.put("address", "福建省福州市晋安区");
String newWordName = "信息.doc";
//调用打印word的函数
DocUtil.download(request, response, newWordName, dataMap);
}


6.结果图:



  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 25
    评论
Java ,可以使用 Apache POI 库来将文字和图片导出到文档。 Apache POI 是一个开源的 Java 库,可以用来操作 Microsoft Office 文档,如 Word、Excel 和 PowerPoint 等。 下面是一个示例代码,展示了如何使用 Apache POI 在 Word 文档添加文字和图片: ```java import java.io.FileOutputStream; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; public class WordExporter { public static void main(String[] args) throws Exception { // 创建一个新的 Word 文档 XWPFDocument document = new XWPFDocument(); // 创建一个段落 XWPFParagraph paragraph = document.createParagraph(); // 在段落添加文字 XWPFRun run = paragraph.createRun(); run.setText("这是一段文字。"); // 在段落添加图片 run = paragraph.createRun(); String imgFile = "image.jpg"; run.addPicture(new FileInputStream(imgFile), XWPFDocument.PICTURE_TYPE_JPEG, imgFile, Units.toEMU(200), Units.toEMU(200)); // 保存文档 FileOutputStream out = new FileOutputStream("document.docx"); document.write(out); out.close(); } } ``` 上面的代码会创建一个新的 Word 文档,并在文档创建一个段落。然后,在段落添加文字和图片。最后,将文档保存到本地。 注意,在使用 Apache POI 时,需要先在项目添加依赖。可以在项目的 `pom.xml` 文件添加如下依赖: ```xml <dependency>
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值