源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-02-12 00:46 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:javascript下用ActiveXObject控件替换word书签,将内容导出到word后打印第1/2页
最近有需求将数据导出到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);     }  }
当前1/2页 [b]1[/b][url=http://www.1sucai.cn/article/14919_2.htm]2[/url][url=http://www.1sucai.cn/article/14919_2.htm]下一页[/url][url=http://www.1sucai.cn/article/14919_all.htm]阅读全文[/url]
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部