java导出word
程序员文章站
2022-07-13 08:58:04
...
实现导出功能,多数人都会选择一些热门的框架来完成。这样做无可厚非。但有些时候,只为一些简单的导出引入一个框架来说有点儿用牛刀杀鸡的感觉。java.io本事自带的导入导出功能就能够解决这些简单的问题。而且,导出框架也都是基于java.io进行的扩展。
下面简单介绍下将页面内容用java.io自带的功能实现导出。
要导出的页面内容如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base target="download"/> <title> <s:property value="#request.title"/> </title> <jsp:include page="../common/meta.jsp"/> <STYLE type="text/css"> </STYLE> <script type="text/javascript"> $(function(){ $('#expinfo').val($('#s_info').html()); }); //打印2 function printInfo(){ //打印时将头尾两部分隐藏 $('#header_div').css('display','none'); window.print(); $('#header_div').css('display','block'); } </script> </head> <body> <div id="header_div"> <form name="expform" id="expform" method="post" action="${root}/jxEval/rwexp.action"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr style="height:30px"> <td width="6%"> <textarea name="expinfo" id="expinfo" style="display: none;" ></textarea> <!-- 导出文件名,根据导出的文件名称后缀判断导出文件类型 --> <input type="hidden" name="fileName" id="fileName" value="<s:property value="#request.title"/>.doc"> </td> <td align="right"> <input type="submit" class="btn" value="导出" title="导出Word" style="width:60px"/> <input type="button" class="btn" value="打印" title="打印" style="width:60px" onclick="printInfo()"/> </td> </tr> </table> </form> </div> <div id="s_info"> //添加导出内容部分 </div> <iframe id="download" name="download" height="0px" width="0px"></iframe> </body> </html>
这里,为了防止在导出时弹出一个页面,对页面做了如下处理:
1、在head中添加base标签
<base target="download"/>
2、在body中添加一个iframe
<iframe id="download" name="download" height="0px" width="0px"></iframe>
后台Action
private String fileName;//文件名 public String getFileName()throws Exception { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } @Override public String execute() throws Exception { String expinfo=request.getParameter("expinfo"); if(!ValidateUtil.validateString(expinfo)){ return null; } HttpServletResponse resp = ServletActionContext.getResponse(); resp.reset(); resp.setContentType("application/vnd.ms-word;charset=UTF-8"); String strFileName = FileUtil.getFilePrefix(fileName); strFileName = URLEncoder.encode(strFileName, "UTF-8"); String guessCharset = "gb2312"; strFileName = new String(strFileName.getBytes(guessCharset), "ISO8859-1"); resp.setHeader("Content-Disposition", "attachment;filename=" + strFileName + ".doc"); OutputStream os = resp.getOutputStream(); os.write(expinfo.getBytes(), 0, expinfo.getBytes().length); os.flush(); os.close(); return null; }
注意:
1、要对文件名进行编码,否则可能会出现无法导出。
2、在对outputstream执行write操作时,第三个参数请务必保持和第一个参数一致,否则可能会出现导出内容缺失的情况。
即写成
os.write(expinfo.getBytes(), 0, expinfo.getBytes().length);
而非
os.write(expinfo.getBytes(), 0, expinfo.length());
原因很简单,你懂得。
对应struts.xml文件配置
<action name="rwexp" class="com.xxx.action.RwexpAction"></action>
由于action的方法中无需返回值,这里也就无需多做配置了。
推荐阅读