1,编辑word模板,得到想要的样式
2,word另存为,筛选过的网页(*.htm;*.html) 例如:word_model_02.htm
3,改word_model_02.htm后缀为.jsp
4,在jsp文件的最上部加上:<%@ page contentType="application/msword; charset=gb2312" language="java"%> (不加入下载不了)
5,页面中加入按钮,并用servlet实现页面跳转,
<%=request.getContextPath()%>/servlet/DocumentHandleServlet?templateCode=/page/common/template/word/word_model_02.jsp
注:如果jsf项目可以利用js实现
form中加入
<f:verbatim>
<iframe id="togo" name="togo" height="0" frameborder="0" src=""
scrolling="no"></iframe>
</f:verbatim>
js如下
function downLoadWord(){
window.document.all("togo").src="<%=request.getContextPath()%>/servlet/DocumentHandleServlet?templateCode=/page/common/template/word/word_model.jsp";
return false;
}
6,定义servlet,在web.xml中配置servlet
<!-- 下载word模板 -->
<servlet>
<servlet-name>DocumentHandleServlet</servlet-name>
<servlet-class>com.nohi.document.servlet.DocumentHandleServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DocumentHandleServlet</servlet-name>
<url-pattern>/servlet/DocumentHandleServlet</url-pattern>
</servlet-mapping>
public class DocumentHandleServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
private Logger log = Logger.getLogger(this.getClass());
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doPost(req, resp);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
log.debug("DocumentHandleServlet ..................");
String templateCode = req.getParameter("templateCode");
log.debug("templateCode: " + templateCode);
//templateCode = "/page/common/template/word/word_model.jsp";
//到数据库中取数。。。vo.getUserList()返回的是一个 User对象列表
UserManagerVO vo = new UserManagerVO();
UserManagerDao dao = (UserManagerDao) FrameServiceFactory.findBean("userManagerDao");
dao.findUserListByHQL(vo);
log.debug("size: " + vo.getUserList().size());
req.setAttribute("fileName", "fileName_nohi");
req.setAttribute("userList",vo.getUserList());
req.setAttribute("text", "abc");
req.setAttribute("date", "2011-04-05");
req.getRequestDispatcher(templateCode).forward(req, resp);
}
}
7,word_model_02.jsp中编辑取数
在<%@ page contentType="application/msword; charset=gb2312" language="java"%>正文加入
<%@ page import="java.util.*"%>
<%@ page import="com.nohi.usermanager.model.*"%> <%-- 引入所有页面中用到的类 --%>
<%
//文档名称:文档类型_广义业务编号_版本号_模板名称
String fileName = (String) request.getAttribute("fileName");
String text = (String) request.getAttribute("text");
String date = (String) request.getAttribute("date");
List list = (List) request.getAttribute("userList");
fileName = new String(fileName.getBytes("GBK"), "ISO8859_1");
response.setHeader("Content-Disposition", "attachment; filename="+ fileName + ".doc");
%>
<p class=MsoNormal style='margin-left: 147.0pt; text-indent: 26.25pt'>
<b><span style='font-family: 宋体'>文本:</span>
<span lang=EN-US>
<%=text%> <%-- 取数 --%>
</span>
</b>
<b><span style='font-family: 宋体'>日期:</span>
<span lang=EN-US>
<%=date%> <%-- 取数 --%>
</span>
</b>
</p>
<%-- 取数:循环列表取数 --%>
<%
for (Iterator it = list.iterator();it.hasNext();) {
User user = (User)it.next();
%>
<tr>
<td width=189 valign=top
style='width: 142.0pt; border: solid black 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt'>
<p class=MsoNormal>
<b><span lang=EN-US><%=user.getUserId() %></span>
</b>
</p>
</td>
<td width=189 valign=top
style='width: 142.05pt; border-top: none; border-left: none; border-bottom: solid black 1.0pt; border-right: solid black 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt'>
<p class=MsoNormal>
<b><span lang=EN-US><%=user.getUsername() %></span>
</b>
</p>
</td>
<td width=189 valign=top
style='width: 142.05pt; border-top: none; border-left: none; border-bottom: solid black 1.0pt; border-right: solid black 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt'>
<p class=MsoNormal>
<b><span lang=EN-US><%=user.getPassword() %></span>
</b>
</p>
</td>
</tr>
<%
}
%>
本文档详细介绍了如何在Java Web项目中利用Word模板导入数据并实现下载。首先编辑Word模板以获得所需样式,然后将其另存为HTML。接着,将HTML文件转换为JSP页面,并在顶部添加内容类型声明。通过按钮和Servlet实现页面跳转,当用户点击下载时,Servlet从数据库获取数据并填充到模板中,最后以Word文档形式返回给用户。
1277

被折叠的 条评论
为什么被折叠?



