poi导出word模板项目实例(一个文件)

在页面上填写值,然后导出到word模板中,并把页面上的值带到模板中,也就是导出word文档,提前有word 的模板形式,

1.jsp 页面  

   <table class="formTable">
       <TR>
			<TD class="label">会议地点</TD>
			<TD class="content">
			<INPUT id="meetingSite"  type="text" class="text" name="CommonLink/meetingSite"></TD>
			<TD class="label">会议人员</TD>
			<TD>
			<INPUT id="meetingPerson" type="text" class="text" name="CommonLink/meetingPerson"></TD>
		</TR>
		<TR>
			<TD class="label">会议内容</TD>
			<TD class="content">
			<INPUT id="meetingContent"  type="text" class="text" name="CommonLink/meetingContent"></TD>
			<TD class="label">会议时间</TD>
			<TD><INPUT id="meetingDate" type="text" class="text" name="CommonLink/meetingDate"></TD>
		</TR>
		<TR>
			<TD class="label">总经理</TD>
			<TD class="content">
			<INPUT id="manager"  type="text" class="text" name="CommonLink/manager"></TD>
			<TD class="label">采购部门</TD>
			<TD><INPUT id="purchaseDep"  type="text" class="text" name="CommonLink/purchaseDep"></TD>
		</TR>
    </table>
 <div id="btns" class="form-btns">
	<INPUT value="导出word文档" type="button" class="btn" onclick="exportWord();">
  </div> 

2.js异步的方法

function exportWord(){
	var data = setData();
	jQuery.post("http://localhost:8080/expWord/GKBX29_word.jsp",data,function(data1){
		var url = data1; //回调函数,返回值是地址,data1
		window.open(url); //打开
	});
}
function setData(){
	var data = {};
	data.author=‘zzz‘;
	data.meetingSite = document.getElementById("meetingSite").value;
	data.purchaseDep = document.getElementById("purchaseDep").value;
	data.meetingPerson = document.getElementById("meetingPerson").value;
	data.meetingContent = document.getElementById("meetingContent").value;
	data.meetingDate = document.getElementById("meetingDate").value;
	data.manager = document.getElementById("manager").value;
	return data;
}

3.GKBX29_word.jsp其实是后台的处理方法,因为本次开发用EOS,所以在jsp用request接收值,并传递到模板 

<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="com.boco.eoms.word.client.word"%>

<%
	request.setCharacterEncoding("UTF-8");

	String author = request.getParameter("author");

	String meetingSite = request.getParameter("meetingSite");
	String purchaseDep = request.getParameter("purchaseDep");
	String meetingPerson = request.getParameter("meetingPerson");
	String meetingContent = request.getParameter("meetingContent");
	String meetingDate = request.getParameter("meetingDate");
	String manager = request.getParameter("manager");

	word w = new word();
	Map map = new HashMap();

	map.put("author", author);

	map.put("meetingSite", meetingSite);
	map.put("purchaseDep", purchaseDep);
	map.put("meetingPerson", meetingPerson);
	map.put("meetingContent", meetingContent);
	map.put("meetingDate", meetingDate);
	map.put("manager", manager);

	String url = w.replacWordByMap(map, "model"); //模板名称,默认是.doc文件
	response.getWriter().write(url);
%> 

4. 生成word 的方法

package com.boco.eoms;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.poifs.filesystem.DirectoryEntry;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

//***************************************************************//

//**   需要使用变量的地方可以用如下替换  ${name}  ,name为变量名,在map中key使用变量名,value使用要替换成的字符串,如 map.put("name","栾主峰")   **//
//***************************************************************//

public class word {

	/**
	 * 根据传入的模板编号将变量替换成实际值之后生成word文档
	 * 需要使用变量的地方word中可以用变量替换 ,格式: ${变量名} 如: ${name}
	 * name为变量名,在map中key使用变量名,value使用要替换成的字符串
	 * 如 map.put("name","栾主峰")
	 * @param maps 变量集合
	 * @param DocName 模板名称
	 * @return 重新生成的文档名称包含全路径,返回-1时,文件生成错误
	 */
	public String createWordByMap(Map<String, String> maps, String DocName) {
		String path = this.getClass().getClassLoader().getResource("/")
				.getPath()
				+ "attach/";//获取基础路径
		String docModelPath = path + "word/model/"; //生成模板所在路径
		String docPath = path + "word/create/" + getCurrentDateTime("yyyyMMdd")
				+ "/";
		//+"/"+getCurrentDateTime("yyyyMMddHHmmssSSS");
		java.io.File filetemp = new java.io.File(docPath);
		if (!filetemp.exists())
			filetemp.mkdirs();
		String destFile = docPath + getCurrentDateTime("yyyyMMddHHmmssSSS")
				+ ".doc";
		HWPFDocument document = new word().replaceDoc(docModelPath + DocName
				+ ".doc", maps);
		if (document != null)
		{
			ByteArrayOutputStream ostream = new ByteArrayOutputStream();
			try {
				document.write(ostream);
				// 输出word文件
				OutputStream outs = new FileOutputStream(destFile);
				outs.write(ostream.toByteArray());
				outs.close();

			} catch (IOException e) {
				e.printStackTrace();
				destFile = "-1";
			}
		} else
			destFile = "-1";
		return destFile;
	}

	/**
	 *
	 * @param destFile
	 * @param fileCon
	 */
	public void exportDoc(String destFile, String fileCon) {
		try {
			//doc content
			ByteArrayInputStream bais = new ByteArrayInputStream(fileCon
					.getBytes());
			POIFSFileSystem fs = new POIFSFileSystem();
			DirectoryEntry directory = fs.getRoot();
			directory.createDocument("WordDocument", bais);
			FileOutputStream ostream = new FileOutputStream(destFile);
			fs.writeFilesystem(ostream);
			bais.close();
			ostream.close();

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

	/**
	 * 读取word模板并替换变量
	 * @param srcPath
	 * @param map
	 * @return
	 */
	public HWPFDocument replaceDoc(String srcPath, Map<String, String> map) {
		try {
			// 读取word模板
			FileInputStream fis = new FileInputStream(new File(srcPath));
			HWPFDocument doc = new HWPFDocument(fis);
			// 读取word文本内容
			Range bodyRange = doc.getRange();
			// 替换文本内容
			for (Map.Entry<String, String> entry : map.entrySet()) {
				bodyRange.replaceText("${" + entry.getKey() + "}", entry
						.getValue());
			}
			return doc;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	//得到当前的系统时间
	/*
	 根据输入的格式(String _dtFormat)得到当前时间格式
	 */
	public String getCurrentDateTime(String _dtFormat) {
		String currentdatetime = "";
		try {
			Date date = new Date(System.currentTimeMillis());
			SimpleDateFormat dtFormat = new SimpleDateFormat(_dtFormat);
			currentdatetime = dtFormat.format(date);
		} catch (Exception e) {
			System.out.println("时间格式不正确");
			e.printStackTrace();
		}
		return currentdatetime;
	}

}

5.模板中的样式

时间: 2024-10-07 05:25:50

poi导出word模板项目实例(一个文件)的相关文章

使用java Apache poi 根据word模板生成word报表

项目开发过程中,客户提出一堆导出报表的需求,需要导出word格式,页眉还需要加上客户公司的logo,试了几种方案,最后选择了用 Apache poi 加上自定义标签的方式实现. 目前功能还比较简单,一些复杂的表格做不了,但是已经基本满足项目需求了. 使用poi读取word模板,替换word中的{text}标签,并根据自定义标签循环生成表格或表格中的行. 代码示例下载:https://download.csdn.net/download/u012775558/10306308 注意,仅支持docx

使用POI导出Word(含表格)的实现方式及操作Word的工具类

转载请注明出处:https://www.cnblogs.com/sun-flower1314/p/10128796.html 本篇是关于利用Apache 的POI导出Word的实现步骤.采用XWPFDocument导出Word,结构和样式完全由代码控制,操作起来还是非常的不太方便,只能够创建简单的word,不能设置样式,功能太少.但在这里还是实现一下,毕竟做过. 首先声明一些基本概念: XWPFDocument代表一个docx文档,其可以用来读docx文档,也可以用来写docx文档 XWPFPa

poi导出word时设置兼容性

接上一篇poi导出word http://www.cnblogs.com/xiufengd/p/4708680.html. public static void setAuto(XWPFDocument doc) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException{ List<POIXMLDocumentPart> list = doc.getRelat

poi导出word、excel

在实际的项目开发中,经常会有一些涉及到导入导出的文档的功能.apache开源项目之一poi对此有很好的支持,对之前的使用做一些简要的总结. 1,导入jar 为了保证对格式的兼容性,在项目的pom.xml添加这三个jar: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.13</version> &l

poi导出word表格跨行

DataCommon.java package com.ksource.pwlp.model.statistic; public class DataCommon { private Long id; private String name; private String otherName; private String dataName; private String otherDataName; private int value; private float otherValue; pr

poi导出word

本测试文档为自己找资料写的一个代码,实现了我所需要的功能,包括页眉页脚,段落剧中,创建表格,表格样式等等. 说一个比较实用的方法,插入分节和设置页面第二页开始时就是用的这种方法:先新建一个docx文件,编辑好自己需要的格式,包括页眉页脚,分页分节等,然后保存,重命名成zip压缩文件,解压后就会发现很多xml文件,这就是word的底层,可以从相关xml里面查找相应的功能. 目前仍存在一个问题就是空格的下滑先不显示,具体解决后续添加 package poi; import java.io.FileN

springboot使用poi导出数据生成excel(.xlsx)文件

前言:在实际开发中经常需要将数据库的数据导出成excel文件,poi方式则是其中一种较为常用的导出框架.简单读取excel文件在之前的一篇有说明 本项目实现需求:user发出一个导出student信息的请求,直接下载包含所有student信息的excel文件到本机.只贴出关键代码,未贴出的很简单,自行脑补 整体流程(服务器端):接收请求------>取出数据库数据------>将数据存成excel临时文件------>通过响应头让浏览器下载此临时文件------>删除临时文件 项目

在Java中导出word、excel格式文件时JSP页面头的设置

我们在JSP中往往会把一些表格里的东西需要导出到本地,一般都是导成word.excel格式的文件.这只需要在JSP页面头设置及在<head></head>标签中添加下面的代码: 导出为excel: <% response.setContentType("application/vnd.ms-excel;charset=UTF-8"); response.setHeader("Content-Disposition","atta

POI导出EXCEL模板数据

1.apache poi 3.14+版本 package com.jd.medicine.erp.shop.service.util; import java.io.IOException; import java.io.InputStream; import java.util.Date; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import org.apa