作家
登录

javascript下用ActiveXObject控件替换word书签,将内容导出到word后打印第1/2页

作者: 来源:www.28hudong.com 2013-03-30 03:03:31 阅读 我要评论

最近有需求将数据导出到word里,然后编辑打印。 想过几种方案: 1.使用jacob。 2.使用apache的poi。 3.使用itext。 由于时间比较紧,没多的时候去学习研究上述工具包,现在用javascript操作ActiveXObject控件,用替换word模板中的书签方式解决。 前提条件: 1.浏览器安全级别降低,可以使用ActiveXObject控件。 2.装有office word。 目前实现了替换单个书签,多行表格书签,和图片,基本上满足需求。不过还有很多操作word的使用方法不太清楚,网上大部分都使用的VB,有不清楚的地方,大家可以交流。 下面说一下我的设计实现思路: 首先当然是定义word模板,在需要替换的地方加上标签。 菜单-插入-书签,输入属性名,如year,date,pic1,voList等等。 打印页面: 需要把打印的数据从后台取出,以单个vo(一个对象)为一组,或以voList(对象的列表集合)为一组 组织好页面上 再得到这些数据后进行替换。 数据组织形式如下: <div id="export2word"> <form id="singleVo" name="singleVo"> <textarea name="jcxcrs" style="display:none"><c:out value="${zywstjfxbgVO.jcxcrs }"/></textarea> <textarea name="xcjhl" style="display:none"><c:out value="${zywstjfxbgVO.xcjhl }"/></textarea> <textarea name="tbjcxcrs" style="display:none"><c:out value="${tbjcxcrs }"/></textarea> <textarea name="tptest" style="display:none">../zwgl/zw008-ZwMkjbxxCTRL-showWxytp.png?xh=3041</textarea> </form> <c:forEach var="mxvo" items="${jgList}" varStatus="s"> <form name="mxvoForm"> <!-- 注:这里的宽度设置为表格单元格宽度(厘米*100)--> <textarea name="tbjcmcrs" style="width:349;display:none"><c:out value="${mxvo.tbjcmcrs }"/></textarea> <textarea name="tbjcmcrsbl" style="width:270;display:none"><c:out value="${mxvo.tbjcmcrsbl }"/></textarea> <textarea name="tbjcxcrs" style="width:477;display:none"><c:out value="${mxvo.tbjcxcrs}"/></textarea> <textarea name="tbjcxcrsbl" style="display:none"><c:out value="${mxvo.tbjcxcrsbl }"/></textarea> </form> </c:forEach> </div> 使用: <input type="button" id="select2" name="select2" class="button" value="导出数据" onclick="print2doc();"> <script type="text/javascript" src="../public/scripts/export2word.js"></script> <script type="text/javascript"> function print2doc(){ //参数为模板(与页面的相对)路径 var word = new WordApp("test.doc"); //参数为form名,vo中需要添加的属性(为空时form里所有属性) var vo = word.getSingleVo("singleVo",["jcxcrs","xcjhl","tbjcxcrs"]); //var vo = word.getSingleVo("singleVo"); //组织成的图片vo var tpvo = word.getSingleVo("singleVo",["tptest"]); //参数为 form名,需要添加的属性(顺序为生成表格列的顺序,为空时form里的所有属性和顺序) var voList = word.getVoList("mxvoForm",["tbjcmcrs","tbjcmcrsbl","tbjczsrs"]); //var voList = word.getVoList("mxvoForm"); //替换普通书签 word.replaceBookmarkUsevo(vo); //替换图片书签 word.replaceBookmarkUsepicvo(tpvo); //替换书签jgList,画出表格形成多行数据。 word.replaceBookmarkUsevolist("jgList",voList); //文档可见 word.wordObj.visible=true; //word.closeApp(); } </script> 注意: 替换图片的值需要解释一下: 1.可以设为相对本页面的路径如../zbgl/abc.png 2.如果是输出流,则需要把请求输出流的url映射成以图片格式结尾的。如/.../abc.do?id=123换成/../abc.png?id=123 可以在web.xml里配一个servlet,如以*.png的请求转成.do的。如: public class PngDispatcherServlet extends HttpServlet { private static final long serialVersionUID = 6230740581031996144L; public void init() throws ServletException { } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //StringBuffer url = request.getRequestURL(); StringBuffer url = new StringBuffer(request.getRequestURI()); if(request.getQueryString() != null) { url.append('?'); url.append(request.getQueryString()); } String newUrl = url.toString().replaceAll(".png", ".do"); ServletContext sc = getServletContext(); RequestDispatcher rd = sc.getRequestDispatcher(newUrl); //定向的页面 rd.forward(request, response); } }

  推荐阅读

  asp.net和asp下ACCESS的参数化查询

今天我就把我用ACCESS参数化查询的一些方法和经验和大家分享 希望对大家有所启发,有写的不对的地方希望高手们多多指教 ASP.NET 用OleDbCommand的new OleDbParameter创建参数货查询 ASP用Command的CreateParameter>>>详细阅读


本文标题:javascript下用ActiveXObject控件替换word书签,将内容导出到word后打印第1/2页

地址:http://www.17bianji.com/kaifa2/JS/29627.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)