最近项目中需要一个word导出的功能,上网查了下相关资料,基本上都是基于Jacob或者POI等组件来实现,需要相关jar以及环境配置,如果不好好研究下,不是那么好实现,这里介绍一种单纯利用javaScript就可以实现Word导出的方法。
在项目中,我需要在流程结束时,把评审表导出成word。但在导出前用户可以先预览一下评审表,如下为评审表Web页面(到时候要导出的即为这个页面内容)
因为评审表有word的模版,所以我把word模版另存为一个html格式(主要是保留样式),再改成jsp,然后拿这个jsp文件作为预览页面的开发基础,在此页面进行数据获取之后就可以通过“导出word”按钮来进行导出了。
导出后的效果如下图。(基本上一模一样)
下面说说具体的代码以及实现方式
2个主要文件:WordExporter.js和word_out.jsp(都很小,js有500行,jsp有200行)
按钮的代码:
<input id="export" type="button" style="position: absolute; right: 20px; top: 23px;" value="导出Word"></input>//(有个id就行了,后面为他绑定个事件而已)
WordExporter.js:主要是构造函数、导出事件以及基本的过滤器等等。引用此插件之后,只要在业务逻辑js文件里进行初始化构造函数即可,上代码:
var wordputter = new $WordExporter("export",{//用于触发事件的元素id action : "../exportWord/word_out.jsp", //必须 提交地址
wordName :question_title,//必须 导出word的名称 默认名称:未定义.doc
outDiv : "body", //必须 要导出代码块父容器对象或ID 要导出DIV
cssLinkId : "" , //非必须 有默认css 要导出word格式LinkId;
cssString :"",//非必须 有默认css,同时设置该属性和cssLinkId,此属性优先 显式传入的css内容
data:[], //非必须附带提交到后台处理变量列表.格式:[{name:param,value:value}...]
filter:function(dataStr){return dataStr;} //过滤器扩展接口 ,同时 必须有返回值
});
通过上面的初始化基本上就可以把web导出为word了。如果有模版的,可以像我上面说的导出为html
再开发,这样会保留基本样式。如果样式比较少可以直接写在cssString参数后面,如果样式比较多的话,为了不造成混乱,可以把那些样式剪切到一个css文件里,然后在word_out.jsp里面进行通过读写css文件里面的内容来实现样式。上代码:
//获取部属应用系统的绝对路径
EnvironmentUtil environmentUtil = EnvironmentUtil.getInstance();
String storePath = environmentUtil.getAppPath()+"inms/exportWord/wordCss.css";
//实例化字符串缓冲类,大部分情况比StringBuffer快,比String拼接更快
StringBuilder builder = new StringBuilder();
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(new FileInputStream(storePath)));
char[] chars = new char[4096];
int length = 0;
while (0 < (length = reader.read(chars))) {
builder.append(chars, 0, length);
}
} finally {
try {
if (reader != null) reader.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
这里还有一个比较重点的就是过滤器,WordExporter.js里面已经有一些基本的过滤了,像我在开发预览页面的时候遇到一些隐藏域或者一些不是隐藏域但是是一些和文档不相关的按钮,比如我上面说的触发事件的按钮,如果没有进行过滤,在导出word之后,有值的隐藏域会把值也导出来(但这可能不是我们想要的)而遇到按钮什么的,就会导出为undefined,这时候正则表达式就派上用场了,正则表达式很强大,效率也高,但是要想学好却很难(本人菜鸟一只,勿喷!)
举个很简单例子:
<input id=”test” type=”hidden” style=”left:10px;display:none;right:10px”><input>
str = str.replace(/<INPUT[^>]*type=\”hidden\”[^>]*>/ig,””)。
str = str.replace(/<INPUT[^>]*style=\”[^>]*display:none[^>]*\”[^>]*>/ig,"");
解释:前后2个/为正则定界符,即表达式开始与结束。[^>]:非“>”的任意字符。*:匹配前面字符0次或者多次。\”:匹配双引号。i:忽略大小写。g:全局匹配。
这2句就可以把隐藏类型的input元素替换成””,这样在导出时就不会出现上面的情况了。大家也可以下载正则测试工具,挺好用的。
当然也可以用js或者就jquery来过滤,方法很多,看个人选择了。
最后一步就是执行下载的代码:
response.setHeader("Content-disposition","attachment;filename=\""+new String((wordName+".doc").getBytes("gb2312"),"ISO8859-1") + "\"");
作为附件下载,文件名为初始化时传进来的名称,并进行编码设置。
分享到:
相关推荐
JavaScript利用ActiveX导出Excel,Word
java\JavaScript利用ActiveX导出Excel,Word .doc
实例291 调用IE自身的打印功能实现打印 460 实例292 打印指定框架中的内容 461 实例293 利用WebBrowser打印 462 实例294 设置页眉页脚 463 11.2 利用Word打印报表 465 实例295 将页面中的表格导出到Word并打印 465 ...
实例291 调用IE自身的打印功能实现打印 460 实例292 打印指定框架中的内容 461 实例293 利用WebBrowser打印 462 实例294 设置页眉页脚 463 11.2 利用Word打印报表 465 实例295 将页面中的表格导出到Word...
利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...
SOAOffice 完全抛弃了传统利用Office服务器端自动化技术存取文档数据的种种弊端和缺陷,采用独创的专利技术构建了一个功能强大、简单易用的微软Office中间件平台,平台提供标准的.net和java组件接口,不但能够在线...
20.1 应用JavaScript导出到Word 765 20.2 应用响应流导出到Word 766 20.3 应用POI组件导出到Word 772 第21章 JSP操作Excel 775 21.1 应用JXL组件操作Excel 776 21.2 应用POI组件操作Excel 807 第22章 报表与打印 829...
20.1 应用JavaScript导出到Word 765 20.2 应用响应流导出到Word 766 20.3 应用POI组件导出到Word 772 第21章 JSP操作Excel 775 21.1 应用JXL组件操作Excel 776 21.2 应用POI组件操作Excel 807 第22章 报表与打印 829...
SharpRewriter:javascript + xml技术利用#实现url重定向 采用XHTML和CSS设计可重用可换肤的WEB站点 asp.net的网址重定向方法的比较:面向搜索引擎友好 也谈 ASP.NET 1.1 中 QueryString 的安全获取写法 ASP.NET运行...
全面的功能XFA表单填写 ——XFA (XML表单架构)表单允许您充分利用其表单特性进行表单填写、数据导入/导出等操作。 高性能 ——以超过其它PDF工具3倍的速度把200多种常用办公文件类型转换为PDF文件,并且还能一次...
实例139 通过SESSION实现购物车的功能 205 5.6 框架的应用 209 实例140 框架在聊天室中的应用 209 实例141 使用框架嵌套技术居中显示框架页 211 第6章 PHP与MySQL数据库技术 213 6.1 连接MySQL数据库 ...
利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...
利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...
PDF-XChange Viewer能够利用任何Windows的软件,比如说 Word、Excel、AutoCad来制作与Adobe相兼容的PDF文件。它具有丰富的配置和功能选项,而且非常的简单易用。它还能够当作打印机使用,以代替传统的纸质输出。 ...
凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...
利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...
利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...