ireport自定义动态创建报表



       JasperDesign jasperDesign= JRXmlLoader.load(ireportPath);//因为还是添加元素进去,所以还只是jrxml文件
       Integer pageWidth = 0;
       if(100*serchColumns.size()>=600){
        pageWidth = 100*serchColumns.size()+100;
       } else {
        pageWidth = 600;
       }
       Integer pageHeight = 35*customReports.size()+160;
       //然后设置报表的长度和高度(针对分页的每页的高度)
       jasperDesign.setPageWidth(pageWidth);
       jasperDesign.setPageHeight(pageHeight);
       //接着动态生成表名:
       //表头title
       JRDesignBand title = (JRDesignBand)jasperDesign.getTitle();
       JRDesignStaticText titleStaticText = new JRDesignStaticText();
       titleStaticText.setPdfEncoding("UniGB-UCS2-H");
       titleStaticText.setPdfFontName("STSong-Light");
       titleStaticText.setHorizontalAlignment(HorizontalAlignEnum.CENTER);
       titleStaticText.setVerticalAlignment(VerticalAlignEnum.MIDDLE);
       titleStaticText.setFontSize(14);
       titleStaticText.setHeight(34);
       titleStaticText.setWidth(pageWidth);
       titleStaticText.setFontName("SansSerif");
       titleStaticText.setBold(true);
       titleStaticText.setText("自定义统计报表");
       title.addElement(titleStaticText);
       //再来动态生成列头和记录
       //列头和记录
       JRDesignBand columnHeader = (JRDesignBand)jasperDesign.getColumnHeader();//列头
       JRSection detail = jasperDesign.getDetailSection();//详细记录
       JRDesignBand jRDesignBand = (JRDesignBand)detail.getBands()[0];
       //需要先定义变量,好为后面jaspertsoft能够自动填充数据。name其实就是属性名,valueClass是对应的对象类型如String.class
       if(null != serchColumns
    && serchColumns.size()>0){
    Iterator<Entry<String,String>>  serchIte = serchColumns.entrySet().iterator();
    int strIndex = 0;
    while(serchIte.hasNext()){
     Entry<String,String> serchEntry = serchIte.next();
     String serchKey = serchEntry.getKey();
     String serchValue = serchEntry.getValue();
     String detailFieldKey = "attribute"+serchKey.toLowerCase();
     /**列属性**/
     JRDesignField field = new JRDesignField();
        field.setName(detailFieldKey);
        field.setValueClass(java.lang.String.class);
        jasperDesign.addField(field);
       /**列头**/
              JRDesignStaticText jDesignStaticText = new JRDesignStaticText();
              jDesignStaticText.setWidth(100);
              jDesignStaticText.setHeight(34);
              jDesignStaticText.setPdfFontName("STSong-Light");
              jDesignStaticText.setText(serchValue);
              jDesignStaticText.setBackcolor(new Color(153,204,255));
              jDesignStaticText.setPdfEncoding("UniGB-UCS2-H");
              jDesignStaticText.setHorizontalAlignment(HorizontalAlignEnum.CENTER);
              jDesignStaticText.setVerticalAlignment(VerticalAlignEnum.MIDDLE);
              jDesignStaticText.setX(100 * strIndex);
              jDesignStaticText.setY(0);
              columnHeader.addElement(jDesignStaticText);
              //详细记录
              JRDesignTextField jRDesignTextField = new JRDesignTextField();
              jRDesignTextField.setPdfEncoding("UniGB-UCS2-H");
              jRDesignTextField.setWidth(100);
              jRDesignTextField.setHeight(34);
              jRDesignTextField.setPdfFontName("STSong-Light");
              jRDesignTextField.setVerticalAlignment(VerticalAlignEnum.MIDDLE);
              jRDesignTextField.setHorizontalAlignment(HorizontalAlignEnum.CENTER);
              jRDesignTextField.setX(100 *strIndex);
              jRDesignTextField.setY(0);
              jRDesignTextField.setBlankWhenNull(true);
              jRDesignTextField.setStretchWithOverflow(true);
              jRDesignTextField.setPrintRepeatedValues(true);
              jRDesignTextField.setStretchType(StretchTypeEnum.RELATIVE_TO_TALLEST_OBJECT);
              JRDesignExpression expression = new JRDesignExpression();
              expression.setText("$F{"+detailFieldKey+"}");
              expression.setValueClass(java.lang.String.class);//然后这里是对应的对象类型
              jRDesignTextField.setExpression(expression);
              jRDesignBand.addElement(jRDesignTextField);
              strIndex++;
   }
  }
        /***设置页尾,在这里是页码的位置:
         * **/
         JRDesignBand pageFooter = (JRDesignBand)jasperDesign.getPageFooter();
         JRElement[] elements = pageFooter.getElements();
         if(null != elements
           && elements.length>0){
          JRDesignTextField pageFooter1 = (JRDesignTextField)elements[0];
          if(pageWidth>600){
           pageFooter1.setWidth(pageWidth);
                 pageFooter1.setX(0);
          }
             pageFooter1.setHeight(34);
             pageFooter1.setHorizontalAlignment(HorizontalAlignEnum.RIGHT);
             pageFooter1.setVerticalAlignment(VerticalAlignEnum.MIDDLE);
         }
        JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);//编译jrxml文件
        return jasperReport;                                            
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值