zoukankan      html  css  js  c++  java
  • 生成带有表格的word附件和动态赋值

    生成带有表格的word附件和动态赋值,

    表格前后需要添加一个特殊的开始和结束的域,表格第一列 TableStart:AuditJdcttbzInfo 和表格的最后一列 TableEnd:AuditJdcttbzInfo,然后再添加这个第一列和最后一列的需要展示的值得域;

    点击打印(生成)附件按钮,执行得后台代码:

         List<Integer> selectedlist = tableModel.getSelectedIndexes();
            String jdcttbzRowguidStr = "";
            if (selectedlist != null && selectedlist.size() > 0) {
                int i = 1;
                for (Integer index : selectedlist) {
                    Object[] arrobj = tableModel.getRowData().get(index);
                    jdcttbzRowguidStr += arrobj[0];
                    if(i<selectedlist.size()){
                        jdcttbzRowguidStr += ",";
                    }
                    i++;
                }
            }
            System.out.println("=======重定向地址==="+JsfHelper.getRequestCompleteUrl()+"/xxx/windowbusiness/businessmanage/PrintJdcttbzShbAndHzb.html?strs="+jdcttbzRowguidStr);
            sendRedirect(JsfHelper.getRequestCompleteUrl()+"/xxx/windowbusiness/businessmanage/PrintJdcttbzShbAndHzb.html?strs="+jdcttbzRowguidStr);

     其中tableModel是展示在页面的一个table样式得表格数据简单封装,作用是可以获取到所选的多行数据,讲这些选择的多行数据的每一行的唯一标识,拼接成一个用一个特殊符号隔开的字符串,需要放在重定向的地址后面传参给方法;

    重定向后的生成打印附件的页面的后台方法:

     @SuppressWarnings("deprecation")
        public void getWordContent() {
            
         // CommonUtil为封装的类,封装的一些常用的方法,封装的获取页面地址url的参数
         String jdcttbzRowguidStr
    = CommonUtil.getRequestParameter("strs"); String[] jdcttbzRowguidStrs = jdcttbzRowguidStr.split(","); String licenseName = CommonUtil.getDeployWarPath() + "WEB-INF/classes/license.xml"; License license = new License(); // 1 先获取要替换域和值的map集合 try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); license.setLicense(licenseName); Document doc = new Document();       
           // 封装的方法,获取服务器上工程下某个路径的文件
           String filepathname
    = CommonUtil.getDeployWarPath() + "xxx/printdocfolder/jdcttbzHsbAndHzb.docx"; doc = new Document(filepathname); // 赋值其中的除表格意外值的域 Map<Object, Object> map = new HashMap<Object, Object>(); // 获取会审表汇总表编号,此类型文件数量加1 int jdcttbzHsbAndHzbNum = 0; String jdcttbzHsbAndHzbNumStr = "";         
            // 一些数据库交互操作,获取到需要的数据
            String getNumSql
    ="SELECT COUNT(1) FROM xxxx WHERE CliengTag='哈雷机动车汇总表' ";
            // service为封装的一些dao层方法,执行数据库语句的方法
            jdcttbzHsbAndHzbNum
    = service.executeSql(getNumSql); jdcttbzHsbAndHzbNum += 1; @SuppressWarnings("static-access") int nowyear = new EpointDateUtil().getYearOfDate(new Date()); jdcttbzHsbAndHzbNumStr = String.valueOf(nowyear)+"00"+String.valueOf(jdcttbzHsbAndHzbNum); // 各个域赋值 map.put("jdcbzNum", jdcttbzHsbAndHzbNumStr); map.put("jdchzbNumSame", jdcttbzHsbAndHzbNumStr); map.put("displayname", userSession.getDisplayName()); map.put("newdate", sdf.format(new Date())); String tableid = String.valueOf(""); List<Object[]> objlist = getWordFieldAndValue(tableid, "", map); String[] fieldNames = (String[]) objlist.get(0);// word域 Object[] values = objlist.get(1);// 域对应的值 // 2 替换域和表格并且生成word入库 doc.getMailMerge().execute(fieldNames, values);// 替换基本信息表word中的域 // 赋值其中的表格多行值的域 List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();         
              // 遍历选择的每一行数据
              for(String str : jdcttbzRowguidStrs){ Map<String, Object> data1 = new HashMap<String, Object>(); String sql = " SELECT j.rowguid rowguid, p.FLOWSN FLOWSN, j.plateNumber, j.carFrameNumber, j.firstRegisterDate, j.useNature, j.ownerName, j.linkPhone, j.certNum, j.openAccBankName, j.openAccBankNum " + "FROM audit_jdcttbz j LEFT JOIN AUDIT_PROJECT p on j.projectguid=p.RowGuid WHERE j.rowguid='"+str+"';";           
              // 用Object[]数组接收多个返回的不同实体类的值
             Object[] arrobj
    = service.executeSql(sql); data1.put("flownum", arrobj[1] == null ? "" : arrobj[1].toString()); data1.put("plateNumber", arrobj[2] == null ? "" : arrobj[2].toString()); data1.put("carFrameNumber", arrobj[3] == null ? "" : arrobj[3].toString());
              // 避免返回null值前端有异常的情况
              data1.put(
    "firstRegisterDate", arrobj[4] == null ? "" : sdf.format(arrobj[4]).toString()); String useNature = arrobj[5] == null ? "" : arrobj[5].toString(); if ("1".equals(useNature)) { useNature = "营运"; } else { useNature = "非营运"; } data1.put("useNature", useNature); data1.put("ownerName", arrobj[6] == null ? "" : arrobj[6].toString()); data1.put("linkPhone", arrobj[7] == null ? "" : arrobj[7].toString()); data1.put("certNum", arrobj[8] == null ? "" : arrobj[8].toString()); data1.put("openAccBankName", arrobj[9] == null ? "" : arrobj[9].toString()); data1.put("openAccBankNum", arrobj[10] == null ? "" : arrobj[10].toString()); dataList.add(data1); // 对应信息更新为已打印 String updateSql = "UPDATE audit_jdcttbz SET printTag='1' WHERE rowguid='"+str+"' "; service.executeSqlUpdate(updateSql); } // 对应表格名的域,一头一尾特殊的域 doc.getMailMerge().executeWithRegions(new MapMailMergeDataSource(dataList, "AuditJdcttbzInfo")); doc.getFirstSection().getPageSetup().setSectionStart(SectionStart.NEW_PAGE); // 打印输出流 ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); doc.save(outputStream, SaveFormat.DOC); byte[] in2b = outputStream.toByteArray(); // 生成的最终附件输入流入库存储,可以其他地方获取供下载和展示 ByteArrayInputStream inputStream = new ByteArrayInputStream(in2b); saveFileInputStream(in2b.length, inputStream, userSession.getUserGuid(), userSession.getDisplayName(), jdcttbzHsbAndHzbNumStr); JsfHelper.sendRespose(in2b, URLEncoder.encode("机动车淘汰补助会审和汇总表.docx"), ".docx"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
    服务器上工程下某个路径的文件:
     
    生成的最终附件输入流入库存储,可以其他地方获取供下载和展示方法:
    public DocAttachFile saveFileInputStream(long size, InputStream inputStream,
                String userGuid, String displayName, String jdcttbzHsbAndHzbNumStr) {
            String attachGuid = UUID.randomUUID().toString();
            String cliengGuid = UUID.randomUUID().toString();
            // 附件信息
            DocAttachFile docAttachFile = new DocAttachFile();
            docAttachFile.setAttachGuid(attachGuid);
            docAttachFile.setCliengGuid(cliengGuid);
            docAttachFile.setAttachFileName("机动车淘汰补助会审和汇总表-" +jdcttbzHsbAndHzbNumStr+ ".docx");
            docAttachFile.setCliengTag("机动车会审汇总表");
            docAttachFile.setUploadUserGuid(userGuid);
            docAttachFile.setUploadUserDisplayName(displayName);
            docAttachFile.setUploadDateTime(new Date());
            docAttachFile.setContentType(".docx");
            docAttachFile.setAttachStorageGuid(attachGuid);
            docAttachFile.setAttachLength(size);
            return docAttachFileService.addDocAttachFile(docAttachFile);
    
        }

     其中DocAttachFile为附件存储的表对应的实体类,docAttachFileService为其业务逻辑实施层;

  • 相关阅读:
    5、垂直拆分---分库--mycat
    4、读写分离---双主双从(mycat)
    3、读写分离---一主一从(mycat)
    2、安装启动(Mycat)
    1、入门(Mycat)
    Nginx 相关参数记录(2)
    Nginx 相关参数记录(1)
    Linux
    一大波学习内容!
    开源镜像站
  • 原文地址:https://www.cnblogs.com/wmqiang/p/10529446.html
Copyright © 2011-2022 走看看