当前位置:软件学习 > Word >>

Java根据word模板生成word文档之后台解析和实现及部分代码(一)

后台主要工作是解析XML定义的标签文件,并获取到数据集,放入到Map中,然后调用Jacob.jar中提供的相关方法来实现替换。首先想多说一句就是jacob会每次生成word报告时都会启动一个office word进程,替换完毕之后 需要关闭掉这个进程,如果有死掉的word进程有可能会影响word的生成。这些具体做火这调试过程中就会发现这个问题的。

        还需要说明一点,解析XML有很多种方式,自己挑选自己熟悉的就行了,我采用jdom,当时想的没有这么负责,所以写代码也没有怎么重构,需要重新整理,主要方法我会贴出来。

       那么我就从头到尾的说一下,调用生成报告时,后台的整个调用过程是怎么样的,是如何运转的?

       首先访问web应用地址:http://192.16.3.22/demo/DocInfo!createDoc.action 这样我提交一个方法 action方法,这个方法首先是在web应用服务器上的,然后进入action中的createDoc方法,同时你需要获取到从方法传过来的相关参数,比如:sql中定义的那个查询条件,报告类型等参数。

 (在去调用生成报告的方法中,可能你还需要加入一些判断,如是否已经生成过报告啊,或者最新报告的版本啊,因为我们都是既保存word报告文档又会在数据库中插入一条记录,方便查询),这样就开始了:

首先是action的createDoc方法:

[java]
/**
     * 通过HttpCient调用报告服务器的方法生成报告 DOC
     */ 
    public String createDoc() throws Exception { 
                 //定义放回成功与否的判断码 
                 String prMsg=""; 
         // 获取当前登录的用户 
         UserVo userVo = CommonUtils.getUserMessage(); 
         //获取模版类型 
         docType = Struts2Utils.getParameter("docType"); 
         //重新创建文档 
         String creatOrnot = Struts2Utils.getParameter("creatOrnot"); 
         //获取组组编号参数 
         workgroupId = Struts2Utils.getParameter("workgroupId"); 
         //获取评估用例实例ID参数 
         evtcaseInstId = Struts2Utils.getParameter("evtcaseInstId"); 
        if(CommonUtils.isNotNull(docType)){ 
            //获取项目Id 
             projectId = Struts2Utils.getParameter("projectId"); 
            if(!CommonUtils.isNotNull(projectId)){ 
                if(CommonUtils.isNotNull(this.getIdFromSession("PM_PROJECTID"))){ 
                    projectId = this.getIdFromSession("PM_PROJECTID").toString(); 
                }else{ 
                    Struts2Utils.getRequest().setAttribute("msg", "请先选择项目!"); 
                } 
            } 
            if(CommonUtils.isNotNull(projectId)){ 
                prMsg = infoSystemDescService.downloadFileByUrl(projectId, userVo.getUserId(), workgroupId, evtcaseInstId, docType, creatOrnot); 
            } 
        } 
        return "docList"; 
    } 

      注:在我贴出来的代码中,能看懂就行了,有些不用管他(可能是其他业务方面的判断),关于最后返回的prMsg---代表各种状态 主要表示成功与否或者是出错的信息。


   接着我贴出service层的方法downloadFileByUrl   


[java]
</pre><p></p><p></p><pre name="code" class="java"><pre name="code" class="java">/**
     * 功能:
     * 1.(生成报告文档)
     * 2.保存指定URL的源文件到指定路径下  
     * @param projectId
     * @param userId
     * @param workgroupId
     * @param evtcaseInstId
     * @param docType
     * @param creatOrnot
     * @return
     * @throws Exception
     */ 
    @SuppressWarnings("deprecation") 
    public synchronized String downloadFileByUrl(String projectId,String userId,String workgroupId,String evtcaseInstId,String docType,String creatOrnot) throws Exception {    
        String msg = "1";//"1":默认为创建成功的提示信息 "2":标识创建失败 
        String srcUrl = "";  //报告服务器的执行路径 
        HttpResponse response = null;    
        FileOutputStream out = null;  
        HttpClient httpclient = null; 
        HttpGet httpget = null; 
        long time1 = System.currentTimeMillis(); 
        //获取保存后的路径  
        TProjDoc projDoc = projectDocDao.findFileByType(userId, Integer.parseInt(docType), Long.parseLong(projectId), workgroupId,evtcaseInstId); 
        if(projDoc == null || (projDoc != null && CommonUtils.isNotNull(creatOrnot) && creatOrnot.equals("1"))){   //FT_任务编号_[FID] 
             try {     
                 //获取报告服务器的执行路径 
                    srcUrl = xmlPathDef.getActionUrl(docType, projectId,userId,workgroupId,evtcaseInstId); 
                    
                    HttpParams httpParams = new BasicHttpParams();  
   &nb

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,