jsp按格式导出doc文件实例详解
程序员文章站
2023-11-13 18:13:22
jsp按格式导出doc文件实例详解
原理:doc文件其实可以保存为xml文件,该xml文件用字符串表示了doc文件的表现形式,我们只需要用java将那些要填的内容替换掉然...
jsp按格式导出doc文件实例详解
原理:doc文件其实可以保存为xml文件,该xml文件用字符串表示了doc文件的表现形式,我们只需要用java将那些要填的内容替换掉然后下载给客户就行了。
1.首先是按照你的文档填写好数据。
2.将文档另存为xml文件,然后编辑该xml文件,将填好的内容用某种格式替换,如:将名字张三替换成${name}
3.读取文件,将文件中的${name}替换成真正的名字。
4.下载。
接下来看代码:
首先是那个转换类
package com.my.util; import java.io.bufferedreader; import java.io.bytearrayinputstream; import java.io.file; import java.io.fileinputstream; import java.io.filenotfoundexception; import java.io.filereader; import java.io.ioexception; import java.io.inputstream; import java.io.inputstreamreader; import java.io.unsupportedencodingexception; import java.util.iterator; import java.util.map; public class dowloaddocbytemplate { public inputstream dowload(string templatepath,map map) throws ioexception{ file file = new file(templatepath); stringbuffer sb = new stringbuffer(); bufferedreader br; br = new bufferedreader(new inputstreamreader(new fileinputstream(file),"utf-8")); string s; while ((s = br.readline()) != null) { sb.append(s); } br.close(); s = sb.tostring(); iterator<string> keys = map.keyset().iterator(); while(keys.hasnext()) { string key = (string) keys.next(); s=s.replace(key, (string) map.get(key)); } return new bytearrayinputstream(s.getbytes("utf-8")); } }
然后是action:
/** * 检查下载权限 * @return */ public string downloadcheck(){ return success; } public string gettargetfilename(){ return "zengguoqg.doc"; } public inputstream getinputstream(){ //exporttowordutil etw = new exporttowordutil(); stringbuffer carnumber = new stringbuffer("<w:tr w:rsidr='00000000'> <w:trpr> <w:trheight w:hrule='exact' w:val='482'/> </w:trpr>"); string s1 = "<w:tc><w:tcpr><w:tcw w:w=\"236\" w:type=\"dxa\"/></w:tcpr><w:p w:rsidr=\"00000000\" w:rsidrdefault=\"009f38ee\">" + "<w:ppr><w:rpr><w:rfonts w:hint=\"eastasia\"/></w:rpr></w:ppr><w:r>" + "<w:rpr><w:rfonts w:hint=\"eastasia\"/></w:rpr><w:t>"; string number = "450981199202073518"; char[] ch = number.tochararray(); for(int i =0;i<ch.length;i++){ carnumber.append(s1).append(ch[i]).append("</w:t></w:r></w:p></w:tc>"); } carnumber.append("</w:tr>"); map<string,string> map = new hashmap(); map.put("${name}","曾强"); map.put("${sex}","男"); map.put("${writedate}", "2014.1.2"); map.put("${cardnumber}", "1100106"); map.put("${personnumber}", carnumber.tostring()); map.put("${birthday}", "2014.1.2"); map.put("${education}", "本科"); map.put("${marride}", "未婚"); map.put("${comefrom}", "广西"); map.put("${nation}", "汉族"); map.put("${residenceaddress}", "广西"); map.put("${postalcode}", "543002"); map.put("${qq}", "1104566175"); map.put("${job}", "软件工程师"); map.put("${politicalstatus}", "政治面貌"); map.put("${graduateschool}", "学院"); map.put("${professional}", "软件工程"); map.put("${beginworktime}", "2014.1.2"); map.put("${bankcarnumber}", "622709"); map.put("${emergencycontactperson}", "曾强"); map.put("${relationship}", "同学"); map.put("${ummovetelephone}", "0774133"); map.put("${mobilephone}", "1350335"); map.put("${adreess}", "广西"); map.put("${mainexperience}", "无工作"); map.put("${favoriteandgoodat}", "喜欢打篮球"); string path = servletactioncontext.getservletcontext().getrealpath("/filetemplate/renyuandengjibiao2.xml"); system.out.println(path); //return etw.export(path, "test.xml", map, "out.doc"); try { return new dowloaddocbytemplate().dowload(path, map); } catch (ioexception e) { // todo auto-generated catch block e.printstacktrace(); return null; } } }
最后是strut配置下载:
<package name="dowload" extends="struts-default"> <action name="dowload" class="zhaopingaction" method="downloadcheck"> <result name="success" type="stream"> <param name="contenttype">application/zip</param><!--默认为 text/plain--> <param name="inputname">inputstream</param> <param name="contentdisposition">filename="${targetfilename}"</param> <param name="buffersize">4096</param><!-- 输出时缓冲区的大小 --> </result> </action>
完了,就这些了。xml文件我放在webroot/filetemplate/renyuandengjibiao2.xml。
如有疑问,请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!