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

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

上一节贴出了web应用访问生成报告的action和service层的关键2个方法。并提到了调用了httpclient方法去执行报告服务器上的方法,从而返回数据流。下面主要是看报告服务器上的方法是怎么样的?

        首先还是要说明一下,我们的web服务器都是linux环境,而之所以要用到httpclient和单独的报告服务器就是解决jacob不支持linux服务器的问题,所以将生成word报告的工作交给了报告服务器去做,这样无形也减轻了web应用服务器的压力,下面从httpclient·反问开始:

如:httpclient·的url如下:

    

[java]
String url = "http://" + this.getRepIpUrl() + "/infoDisposal/<span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px; ">creatdocrep</span>.action?docType=" + docType + "&projectId=" + projectId + "&userId=" + userId + "&workgroupId=" + workgroupId + "&evtcaseInstId=" + evtcaseInstId; 

注:这里可以使用https也是可以的,看项目需要怎么配置

 

然后我跟着这个地址找到了报告服务器上的类和方法:

找到了creatDocRep.action

其方法如下:

[java]
/**
  * 获取文件流对象
  * @param inputPath
  * @return InputStream 文件流对象
  * @throws Exception
  */ 
 public InputStream getInputStream(){ 
    InputStream inputStream = null; 
    Map<String,String> paramMap = new HashMap<String,String>(); 
    //获取模版类型 
    String docType = Struts2Utils.getParameter("docType"); 
    Integer docType_i = 0; 
    if(CommonUtils.isNotNull(docType)){ 
        docType_i = Integer.parseInt(docType); 
    } 
    //获取用户id 
    String userId = Struts2Utils.getParameter("userId"); 
    //MAP对象参数 
    String projectId = Struts2Utils.getParameter("projectId"); 
    //获取参数MAP 
    paramMap.put("project_id", projectId); 
    //获取组组编号参数 
    String workgroupId = Struts2Utils.getParameter("workgroupId"); 
    if(CommonUtils.isNotNull(workgroupId) && !workgroupId.equals("null")){ 
        paramMap.put("workgroupId", workgroupId); 
    } 
    //获取评估用例实例ID参数 
    String evtcaseInstId = Struts2Utils.getParameter("evtcaseInstId"); 
    if(CommonUtils.isNotNull(evtcaseInstId)){ 
        paramMap.put("evtcase_inst_id", evtcaseInstId); 
    } 
     
    if(CommonUtils.isNotNull(userId)){ 
        paramMap.put("userId", userId); 
    } 
    //获取模版路径 
    String xmlTempUrl = xmlPathDef.getXmlPath(docType); 
     
    //设置打开word模版路径 
    String docPath = ""; 
    //取得对应的模版路径 
    TTemplIdx templIdx = templIdxService.findFileByType(Integer.parseInt(XmlPathDef.TEMPL_IDX_1),Integer.parseInt(docType)); 
    if(templIdx != null){ 
        docPath = xmlPathDef.getPath(XmlPathDef.getBasePath() + templIdx.getTemplFileName()); 
        try { 
            String outPath = infoSystemDescService.showWordRp(xmlTempUrl, docType_i, paramMap, docPath); 
            if(CommonUtils.isNotNull(outPath)){ 
                inputStream = ServletActionContext.getServletContext().getResourceAsStream(xmlPathDef.getRealRepPath(outPath,projectId,docType,workgroupId)); 
            } 
        } catch (Exception e) { 
            logger.error("没有创建成功"); 
            e.printStackTrace(); 
        } 
    } 
    return inputStream; 
  } 

主要是调用了service层的方法,这里主要也是传入了相关的参数和取得了word报告模板路径,创建word文档,然后返回流文件。

然后再看service层方法:

[java]
/**
       * 生成报告(doc文档)
       * @param  xmlTempUrl 模版路径
       * @param  docType  要生成的报告类型
       * @param  paramMap  报告参数
       * @param  webName  要展示的报告名称
       * @param  filename   报告文件名称
       * @param  docId   报告文件主键
       * @param  version  报告文件版本
       * @param  docPath  报告路径 www.zzzyk.com
       * @param  outRepPath  报告生成的路径
       * @return
       * @throws Exception
     */ 
    public String showWordRp(String xmlTempUrl,Integer docType,Map<String,String> paramMap,String docPath) throws Exception { 
        boolean boo= true; 
        String outRepPath = ""; 
        try { 
            Long projectId = 0l; 
            Long workgroupId =0l; 
            String evtcaseInstId =""; 
            String userId =""; 
            Set<Entry<String, String>> sets = paramMap.entrySet(); 
            Iterator<Entry<String, String>> it = sets.iterator(); 
            while (it.hasNext()) { 
                Map.Entry<String,String> entry = (Map.Entry<String,String>) it.next(); 
                String key = entry.getKey(); 
          &

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