jasperReport实现动态列打印

Java代码 复制代码
  1. public ActionResult projectPrint() {   
  2.     String[] printValue = null;   
  3.     // 从页面中获得要查询的字段   
  4.     String reqPrintValue = getRequest().getParameter("printValue");   
  5.     // 没有选择则默认全打印   
  6.     if (null == reqPrintValue || StringUtils.isEmpty(reqPrintValue)) {   
  7.       printValue = new String[] { "pnumber""pname""pdepart""pdecision""pthrow""plastmonth""pfund""ploan" };   
  8.     } else {   
  9.       printValue = reqPrintValue.split(",");   
  10.     }   
  11.     // 查询统计数据   
  12.     List<Object[]> projectList = getEntityManager().queryPrintProjectInfo(printValue);   
  13.   
  14.     // 将数据转换为Map对象,换化成Map对象   
  15.     List<Map> reportDataList = new ArrayList<Map>();   
  16.   
  17.     for (int i = 0; i < projectList.size(); i++) {   
  18.       Object[] personStr = projectList.get(i);   
  19.       Map reportData = new HashMap();   
  20.       for (int j = 0; j < personStr.length; j++) {   
  21.         reportData.put("field_" + j, String.valueOf(personStr[j]));   
  22.       }   
  23.       reportDataList.add(reportData);   
  24.     }   
  25.   
  26.     int columCount = 0;// 数据列   
  27.     int fieldCount = 0;// 字段列数(因为pname比较长所以想让pname比其它的列长些,故设计这个变量)   
  28.     int pnameCount = -1;// 记录下pname的序号   
  29.     for (int i = 0; i < printValue.length; i++) {   
  30.       // pthrow下面有两列   
  31.       if ("pthrow".equals(printValue[i])) {   
  32.         columCount = columCount + 2;   
  33.         fieldCount = fieldCount + 2;   
  34.         // ploan下面也有两列   
  35.       } else if ("ploan".equals(printValue[i])) {   
  36.         columCount = columCount + 2;   
  37.         fieldCount = fieldCount + 2;   
  38.         // 故意让pname也占两列   
  39.       } else if ("pname".equals(printValue[i])) {   
  40.         pnameCount = i;// 记录下pname的序号   
  41.         columCount = columCount + 1;   
  42.         fieldCount = fieldCount + 2;   
  43.       } else {   
  44.         // 其它的列都占一个单位   
  45.         columCount = columCount + 1;   
  46.         fieldCount = fieldCount + 1;   
  47.       }   
  48.     }   
  49.   
  50.     InputStream is = null;   
  51.     try {   
  52.       // 从资源文件中读取报表   
  53.       is = this.getClass().getResourceAsStream("/reports/project.jrxml");   
  54.       JasperDesign jasperDesign = (JasperDesign) JRXmlLoader.load(is);   
  55.   
  56.       Map styleMap = jasperDesign.getStylesMap();   
  57.       // column header 对应的样式   
  58.       JRDesignStyle theaderStyle = (JRDesignStyle) styleMap.get("theader");   
  59.       // column detail 对应的样式   
  60.       JRDesignStyle tbodyStyle = (JRDesignStyle) styleMap.get("tboby");   
  61.       // pagefoot 对应的样式   
  62.       JRDesignStyle tfootStyle = (JRDesignStyle) styleMap.get("tfoot");   
  63.   
  64.       int _START_X_ = 20;// x轴的起始位置   
  65.       int startX = _START_X_; // x轴的起始位置   
  66.       // 单列的宽度   
  67.       // 535是jasepreReport报表column最大的宽度   
  68.       int columnWidth = 535 / fieldCount;   
  69.       // 20,24,15是报表中已设置的,一定与之相同   
  70.       final int columnHeadBandHeight = 20;   
  71.       final int detailHeight = 24;   
  72.       final int pagefootHeight = 15;   
  73.   
  74.       // 设置报表字段   
  75.       for (int idx = 0; idx < columCount; idx++) {   
  76.         JRDesignField field = new JRDesignField();   
  77.         field.setName("field_" + idx);   
  78.         field.setValueClass(java.lang.String.class);   
  79.         jasperDesign.addField(field);   
  80.       }   
  81.   
  82.       JRDesignBand columnHeadBand = (JRDesignBand) jasperDesign.getColumnHeader();   
  83.       // 绘制表头   
  84.       for (int idx = 0; idx < printValue.length; idx++) {   
  85.         if ("pnumber".equals(printValue[idx])) {   
  86.           JRDesignStaticText staticText = new JRDesignStaticText();   
  87.           staticText.setStyle(theaderStyle);   
  88.           staticText.setWidth(columnWidth);   
  89.           staticText.setY(0);   
  90.           staticText.setX(startX);   
  91.           staticText.setHeight(2 * columnHeadBandHeight);   
  92.           staticText.setText("序号");   
  93.           columnHeadBand.addElement(staticText);   
  94.           startX += columnWidth;   
  95.         } else if ("pname".equals(printValue[idx])) {   
  96.           JRDesignStaticText staticText = new JRDesignStaticText();   
  97.           staticText.setStyle(theaderStyle);   
  98.           // 项目名称的宽度是其它的宽度的2倍   
  99.           staticText.setWidth(columnWidth * 2);   
  100.           staticText.setY(0);   
  101.           staticText.setX(startX);   
  102.           staticText.setHeight(2 * columnHeadBandHeight);   
  103.           staticText.setText("项目名称");   
  104.           columnHeadBand.addElement(staticText);   
  105.           startX += columnWidth * 2;   
  106.         } else if ("pdepart".equals(printValue[idx])) {   
  107.           JRDesignStaticText staticText = new JRDesignStaticText();   
  108.           staticText.setStyle(theaderStyle);   
  109.           staticText.setWidth(columnWidth);   
  110.           staticText.setY(0);   
  111.           staticText.setX(startX);   
  112.           staticText.setHeight(2 * columnHeadBandHeight);   
  113.           staticText.setText("部门");   
  114.           columnHeadBand.addElement(staticText);   
  115.           startX += columnWidth;   
  116.         } else if ("pdecision".equals(printValue[idx])) {   
  117.           JRDesignStaticText staticText = new JRDesignStaticText();   
  118.           staticText.setStyle(theaderStyle);   
  119.           staticText.setWidth(columnWidth);   
  120.           staticText.setY(0);   
  121.           staticText.setX(startX);   
  122.           staticText.setHeight(2 * columnHeadBandHeight);   
  123.           staticText.setText("已决策");   
  124.           columnHeadBand.addElement(staticText);   
  125.           startX += columnWidth;   
  126.         } else if ("pthrow".equals(printValue[idx])) {   
  127.           // 投审会下面有两列   
  128.           JRDesignStaticText staticText = new JRDesignStaticText();   
  129.           staticText.setStyle(theaderStyle);   
  130.           staticText.setWidth(columnWidth * 2);   
  131.           staticText.setY(0);   
  132.           staticText.setX(startX);   
  133.           staticText.setHeight(columnHeadBandHeight);   
  134.           staticText.setText("投审会");   
  135.           columnHeadBand.addElement(staticText);   
  136.   
  137.           staticText = new JRDesignStaticText();   
  138.           staticText.setStyle(theaderStyle);   
  139.           columnHeadBand.addElement(staticText);   
  140.           staticText.setWidth(columnWidth);   
  141.           staticText.setY(columnHeadBandHeight);   
  142.           staticText.setX(startX);   
  143.           staticText.setHeight(columnHeadBandHeight);   
  144.           staticText.setText("12月初");   
  145.   
  146.           staticText = new JRDesignStaticText();   
  147.           staticText.setStyle(theaderStyle);   
  148.           columnHeadBand.addElement(staticText);   
  149.           staticText.setWidth(columnWidth);   
  150.           staticText.setY(columnHeadBandHeight);   
  151.           staticText.setX(startX + columnWidth);   
  152.           staticText.setHeight(columnHeadBandHeight);   
  153.           staticText.setText("12月中");   
  154.           columnHeadBand.addElement(staticText);   
  155.           startX += 2 * columnWidth;   
  156.         } else if ("plastmonth".equals(printValue[idx])) {   
  157.           // 投决会下面有一列   
  158.           JRDesignStaticText staticText = new JRDesignStaticText();   
  159.           staticText.setStyle(theaderStyle);   
  160.           staticText.setWidth(columnWidth);   
  161.           staticText.setY(0);   
  162.           staticText.setX(startX);   
  163.           staticText.setHeight(columnHeadBandHeight);   
  164.           staticText.setText("投决会");   
  165.           columnHeadBand.addElement(staticText);   
  166.   
  167.           staticText = new JRDesignStaticText();   
  168.           staticText.setStyle(theaderStyle);   
  169.           columnHeadBand.addElement(staticText);   
  170.           staticText.setWidth(columnWidth);   
  171.           staticText.setY(columnHeadBandHeight);   
  172.           staticText.setX(startX);   
  173.           staticText.setHeight(columnHeadBandHeight);   
  174.           staticText.setText("12月下");   
  175.           columnHeadBand.addElement(staticText);   
  176.           startX += columnWidth;   
  177.         } else if ("pfund".equals(printValue[idx])) {   
  178.           JRDesignStaticText staticText = new JRDesignStaticText();   
  179.           staticText.setStyle(theaderStyle);   
  180.           staticText.setWidth(columnWidth);   
  181.           staticText.setY(0);   
  182.           staticText.setX(startX);   
  183.           staticText.setHeight(2 * columnHeadBandHeight);   
  184.           staticText.setText("基金投资额");   
  185.           columnHeadBand.addElement(staticText);   
  186.           startX += columnWidth;   
  187.         } else if ("ploan".equals(printValue[idx])) {   
  188.           // 投贷协同额下面有两列   
  189.           JRDesignStaticText staticText = new JRDesignStaticText();   
  190.           staticText.setStyle(theaderStyle);   
  191.           staticText.setWidth(columnWidth * 2);   
  192.           staticText.setY(0);   
  193.           staticText.setX(startX);   
  194.           staticText.setHeight(columnHeadBandHeight);   
  195.           staticText.setText("投贷协同额");   
  196.           columnHeadBand.addElement(staticText);   
  197.   
  198.           staticText = new JRDesignStaticText();   
  199.           staticText.setStyle(theaderStyle);   
  200.           columnHeadBand.addElement(staticText);   
  201.           staticText.setWidth(columnWidth);   
  202.           staticText.setY(columnHeadBandHeight);   
  203.           staticText.setX(startX);   
  204.           staticText.setHeight(columnHeadBandHeight);   
  205.           staticText.setText("金额");   
  206.   
  207.           staticText = new JRDesignStaticText();   
  208.           staticText.setStyle(theaderStyle);   
  209.           columnHeadBand.addElement(staticText);   
  210.           staticText.setWidth(columnWidth);   
  211.           staticText.setY(columnHeadBandHeight);   
  212.           staticText.setX(startX + columnWidth);   
  213.           staticText.setHeight(columnHeadBandHeight);   
  214.           staticText.setText("入库情况");   
  215.           columnHeadBand.addElement(staticText);   
  216.           startX += 2 * columnWidth;   
  217.         }   
  218.       }   
  219.   
  220.       // 绘制Detail部门   
  221.       startX = _START_X_;   
  222.       JRDesignBand columnDetailBand = (JRDesignBand) jasperDesign.getDetail();   
  223.       for (int idx = 0; idx < columCount; idx++) {   
  224.         JRDesignTextField textField = new JRDesignTextField();   
  225.         textField.setStretchWithOverflow(true);   
  226.         textField.setX(startX);   
  227.         textField.setY(0);   
  228.         if (pnameCount == idx) {   
  229.           textField.setWidth(2 * columnWidth);   
  230.           startX += 2 * columnWidth;   
  231.         } else {   
  232.           textField.setWidth(columnWidth);   
  233.           startX += columnWidth;   
  234.         }   
  235.         textField.setHeight(detailHeight);   
  236.         textField.setPositionType(JRElement.POSITION_TYPE_FLOAT);   
  237.         textField.setStyle(tbodyStyle);   
  238.         textField.setBlankWhenNull(true);   
  239.         JRDesignExpression expression = new JRDesignExpression();   
  240.         expression.setValueClass(java.lang.String.class);   
  241.         expression.setText("$F{field_" + idx + "}");   
  242.         textField.setExpression(expression);   
  243.         columnDetailBand.addElement(textField);   
  244.       }   
  245.   
  246.       JRDesignBand pageFootBand = (JRDesignBand) jasperDesign.getPageFooter();   
  247.       // 合计数据,本应统计的   
  248.       List<Object[]> pageCountList = new ArrayList<Object[]>();   
  249.       Object[] obj = new String[] { "合计""15299""""""67121""92420""155877", };   
  250.       pageCountList.add(obj);   
  251.       obj = new String[] { """""""XXX小计""""24473""16470", };   
  252.       pageCountList.add(obj);   
  253.       obj = new String[] { """""""WWW小计""""7289""1674", };   
  254.       pageCountList.add(obj);   
  255.       obj = new String[] { """""""ZZZ小计""""32700""13000", };   
  256.       pageCountList.add(obj);   
  257.       obj = new String[] { """""""YYY小计""""12733""120733", };   
  258.       pageCountList.add(obj);   
  259.       obj = new String[] { """""""AAA小计""""2225""120733", };   
  260.       pageCountList.add(obj);   
  261.       obj = new String[] { """""""BBB小计""""3000""0", };   
  262.       pageCountList.add(obj);   
  263.       int footWidth = 535 / 7;   
  264.       for (int p = 0; p < pageCountList.size(); p++) {   
  265.         for (int k = 0; k < 7; k++) {   
  266.           Object[] ob = pageCountList.get(p);   
  267.           JRDesignStaticText staticText = new JRDesignStaticText();   
  268.           staticText.setStyle(tfootStyle);   
  269.           staticText.setWidth(footWidth);   
  270.           staticText.setY(pagefootHeight * p);   
  271.           staticText.setX(k * footWidth + _START_X_);   
  272.           staticText.setHeight(pagefootHeight);   
  273.           staticText.setText(String.valueOf(ob[k]));   
  274.           pageFootBand.addElement(staticText);   
  275.         }   
  276.       }   
  277.   
  278.       // 编译报表   
  279.       JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);   
  280.       String type = this.getRequest().getParameter("type");//pdf格式   
  281.       JasperUtils.prepareReport(jasperReport, type);   
  282.       // 报表数据源   
  283.       JRDataSource dataSource = new JRBeanCollectionDataSource(reportDataList);   
  284.       JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, dataSource);   
  285.       HttpServletResponse response = this.getResponse();   
  286.       JasperUtils.export(jasperPrint, response, getRequest(), type);   
  287.     } catch (Exception e) {   
  288.       e.printStackTrace();   
  289.     }   
  290.   
  291.     return null;   
  292.   }  
public ActionResult projectPrint() {
    String[] printValue = null;
    // 从页面中获得要查询的字段
    String reqPrintValue = getRequest().getParameter("printValue");
    // 没有选择则默认全打印
    if (null == reqPrintValue || StringUtils.isEmpty(reqPrintValue)) {
      printValue = new String[] { "pnumber", "pname", "pdepart", "pdecision", "pthrow", "plastmonth", "pfund", "ploan" };
    } else {
      printValue = reqPrintValue.split(",");
    }
    // 查询统计数据
    List<Object[]> projectList = getEntityManager().queryPrintProjectInfo(printValue);

    // 将数据转换为Map对象,换化成Map对象
    List<Map> reportDataList = new ArrayList<Map>();

    for (int i = 0; i < projectList.size(); i++) {
      Object[] personStr = projectList.get(i);
      Map reportData = new HashMap();
      for (int j = 0; j < personStr.length; j++) {
        reportData.put("field_" + j, String.valueOf(personStr[j]));
      }
      reportDataList.add(reportData);
    }

    int columCount = 0;// 数据列
    int fieldCount = 0;// 字段列数(因为pname比较长所以想让pname比其它的列长些,故设计这个变量)
    int pnameCount = -1;// 记录下pname的序号
    for (int i = 0; i < printValue.length; i++) {
      // pthrow下面有两列
      if ("pthrow".equals(printValue[i])) {
        columCount = columCount + 2;
        fieldCount = fieldCount + 2;
        // ploan下面也有两列
      } else if ("ploan".equals(printValue[i])) {
        columCount = columCount + 2;
        fieldCount = fieldCount + 2;
        // 故意让pname也占两列
      } else if ("pname".equals(printValue[i])) {
        pnameCount = i;// 记录下pname的序号
        columCount = columCount + 1;
        fieldCount = fieldCount + 2;
      } else {
        // 其它的列都占一个单位
        columCount = columCount + 1;
        fieldCount = fieldCount + 1;
      }
    }

    InputStream is = null;
    try {
      // 从资源文件中读取报表
      is = this.getClass().getResourceAsStream("/reports/project.jrxml");
      JasperDesign jasperDesign = (JasperDesign) JRXmlLoader.load(is);

      Map styleMap = jasperDesign.getStylesMap();
      // column header 对应的样式
      JRDesignStyle theaderStyle = (JRDesignStyle) styleMap.get("theader");
      // column detail 对应的样式
      JRDesignStyle tbodyStyle = (JRDesignStyle) styleMap.get("tboby");
      // pagefoot 对应的样式
      JRDesignStyle tfootStyle = (JRDesignStyle) styleMap.get("tfoot");

      int _START_X_ = 20;// x轴的起始位置
      int startX = _START_X_; // x轴的起始位置
      // 单列的宽度
      // 535是jasepreReport报表column最大的宽度
      int columnWidth = 535 / fieldCount;
      // 20,24,15是报表中已设置的,一定与之相同
      final int columnHeadBandHeight = 20;
      final int detailHeight = 24;
      final int pagefootHeight = 15;

      // 设置报表字段
      for (int idx = 0; idx < columCount; idx++) {
        JRDesignField field = new JRDesignField();
        field.setName("field_" + idx);
        field.setValueClass(java.lang.String.class);
        jasperDesign.addField(field);
      }

      JRDesignBand columnHeadBand = (JRDesignBand) jasperDesign.getColumnHeader();
      // 绘制表头
      for (int idx = 0; idx < printValue.length; idx++) {
        if ("pnumber".equals(printValue[idx])) {
          JRDesignStaticText staticText = new JRDesignStaticText();
          staticText.setStyle(theaderStyle);
          staticText.setWidth(columnWidth);
          staticText.setY(0);
          staticText.setX(startX);
          staticText.setHeight(2 * columnHeadBandHeight);
          staticText.setText("序号");
          columnHeadBand.addElement(staticText);
          startX += columnWidth;
        } else if ("pname".equals(printValue[idx])) {
          JRDesignStaticText staticText = new JRDesignStaticText();
          staticText.setStyle(theaderStyle);
          // 项目名称的宽度是其它的宽度的2倍
          staticText.setWidth(columnWidth * 2);
          staticText.setY(0);
          staticText.setX(startX);
          staticText.setHeight(2 * columnHeadBandHeight);
          staticText.setText("项目名称");
          columnHeadBand.addElement(staticText);
          startX += columnWidth * 2;
        } else if ("pdepart".equals(printValue[idx])) {
          JRDesignStaticText staticText = new JRDesignStaticText();
          staticText.setStyle(theaderStyle);
          staticText.setWidth(columnWidth);
          staticText.setY(0);
          staticText.setX(startX);
          staticText.setHeight(2 * columnHeadBandHeight);
          staticText.setText("部门");
          columnHeadBand.addElement(staticText);
          startX += columnWidth;
        } else if ("pdecision".equals(printValue[idx])) {
          JRDesignStaticText staticText = new JRDesignStaticText();
          staticText.setStyle(theaderStyle);
          staticText.setWidth(columnWidth);
          staticText.setY(0);
          staticText.setX(startX);
          staticText.setHeight(2 * columnHeadBandHeight);
          staticText.setText("已决策");
          columnHeadBand.addElement(staticText);
          startX += columnWidth;
        } else if ("pthrow".equals(printValue[idx])) {
          // 投审会下面有两列
          JRDesignStaticText staticText = new JRDesignStaticText();
          staticText.setStyle(theaderStyle);
          staticText.setWidth(columnWidth * 2);
          staticText.setY(0);
          staticText.setX(startX);
          staticText.setHeight(columnHeadBandHeight);
          staticText.setText("投审会");
          columnHeadBand.addElement(staticText);

          staticText = new JRDesignStaticText();
          staticText.setStyle(theaderStyle);
          columnHeadBand.addElement(staticText);
          staticText.setWidth(columnWidth);
          staticText.setY(columnHeadBandHeight);
          staticText.setX(startX);
          staticText.setHeight(columnHeadBandHeight);
          staticText.setText("12月初");

          staticText = new JRDesignStaticText();
          staticText.setStyle(theaderStyle);
          columnHeadBand.addElement(staticText);
          staticText.setWidth(columnWidth);
          staticText.setY(columnHeadBandHeight);
          staticText.setX(startX + columnWidth);
          staticText.setHeight(columnHeadBandHeight);
          staticText.setText("12月中");
          columnHeadBand.addElement(staticText);
          startX += 2 * columnWidth;
        } else if ("plastmonth".equals(printValue[idx])) {
          // 投决会下面有一列
          JRDesignStaticText staticText = new JRDesignStaticText();
          staticText.setStyle(theaderStyle);
          staticText.setWidth(columnWidth);
          staticText.setY(0);
          staticText.setX(startX);
          staticText.setHeight(columnHeadBandHeight);
          staticText.setText("投决会");
          columnHeadBand.addElement(staticText);

          staticText = new JRDesignStaticText();
          staticText.setStyle(theaderStyle);
          columnHeadBand.addElement(staticText);
          staticText.setWidth(columnWidth);
          staticText.setY(columnHeadBandHeight);
          staticText.setX(startX);
          staticText.setHeight(columnHeadBandHeight);
          staticText.setText("12月下");
          columnHeadBand.addElement(staticText);
          startX += columnWidth;
        } else if ("pfund".equals(printValue[idx])) {
          JRDesignStaticText staticText = new JRDesignStaticText();
          staticText.setStyle(theaderStyle);
          staticText.setWidth(columnWidth);
          staticText.setY(0);
          staticText.setX(startX);
          staticText.setHeight(2 * columnHeadBandHeight);
          staticText.setText("基金投资额");
          columnHeadBand.addElement(staticText);
          startX += columnWidth;
        } else if ("ploan".equals(printValue[idx])) {
          // 投贷协同额下面有两列
          JRDesignStaticText staticText = new JRDesignStaticText();
          staticText.setStyle(theaderStyle);
          staticText.setWidth(columnWidth * 2);
          staticText.setY(0);
          staticText.setX(startX);
          staticText.setHeight(columnHeadBandHeight);
          staticText.setText("投贷协同额");
          columnHeadBand.addElement(staticText);

          staticText = new JRDesignStaticText();
          staticText.setStyle(theaderStyle);
          columnHeadBand.addElement(staticText);
          staticText.setWidth(columnWidth);
          staticText.setY(columnHeadBandHeight);
          staticText.setX(startX);
          staticText.setHeight(columnHeadBandHeight);
          staticText.setText("金额");

          staticText = new JRDesignStaticText();
          staticText.setStyle(theaderStyle);
          columnHeadBand.addElement(staticText);
          staticText.setWidth(columnWidth);
          staticText.setY(columnHeadBandHeight);
          staticText.setX(startX + columnWidth);
          staticText.setHeight(columnHeadBandHeight);
          staticText.setText("入库情况");
          columnHeadBand.addElement(staticText);
          startX += 2 * columnWidth;
        }
      }

      // 绘制Detail部门
      startX = _START_X_;
      JRDesignBand columnDetailBand = (JRDesignBand) jasperDesign.getDetail();
      for (int idx = 0; idx < columCount; idx++) {
        JRDesignTextField textField = new JRDesignTextField();
        textField.setStretchWithOverflow(true);
        textField.setX(startX);
        textField.setY(0);
        if (pnameCount == idx) {
          textField.setWidth(2 * columnWidth);
          startX += 2 * columnWidth;
        } else {
          textField.setWidth(columnWidth);
          startX += columnWidth;
        }
        textField.setHeight(detailHeight);
        textField.setPositionType(JRElement.POSITION_TYPE_FLOAT);
        textField.setStyle(tbodyStyle);
        textField.setBlankWhenNull(true);
        JRDesignExpression expression = new JRDesignExpression();
        expression.setValueClass(java.lang.String.class);
        expression.setText("$F{field_" + idx + "}");
        textField.setExpression(expression);
        columnDetailBand.addElement(textField);
      }

      JRDesignBand pageFootBand = (JRDesignBand) jasperDesign.getPageFooter();
      // 合计数据,本应统计的
      List<Object[]> pageCountList = new ArrayList<Object[]>();
      Object[] obj = new String[] { "合计", "15299", "", "", "67121", "92420", "155877", };
      pageCountList.add(obj);
      obj = new String[] { "", "", "", "XXX小计", "", "24473", "16470", };
      pageCountList.add(obj);
      obj = new String[] { "", "", "", "WWW小计", "", "7289", "1674", };
      pageCountList.add(obj);
      obj = new String[] { "", "", "", "ZZZ小计", "", "32700", "13000", };
      pageCountList.add(obj);
      obj = new String[] { "", "", "", "YYY小计", "", "12733", "120733", };
      pageCountList.add(obj);
      obj = new String[] { "", "", "", "AAA小计", "", "2225", "120733", };
      pageCountList.add(obj);
      obj = new String[] { "", "", "", "BBB小计", "", "3000", "0", };
      pageCountList.add(obj);
      int footWidth = 535 / 7;
      for (int p = 0; p < pageCountList.size(); p++) {
        for (int k = 0; k < 7; k++) {
          Object[] ob = pageCountList.get(p);
          JRDesignStaticText staticText = new JRDesignStaticText();
          staticText.setStyle(tfootStyle);
          staticText.setWidth(footWidth);
          staticText.setY(pagefootHeight * p);
          staticText.setX(k * footWidth + _START_X_);
          staticText.setHeight(pagefootHeight);
          staticText.setText(String.valueOf(ob[k]));
          pageFootBand.addElement(staticText);
        }
      }

      // 编译报表
      JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
      String type = this.getRequest().getParameter("type");//pdf格式
      JasperUtils.prepareReport(jasperReport, type);
      // 报表数据源
      JRDataSource dataSource = new JRBeanCollectionDataSource(reportDataList);
      JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, dataSource);
      HttpServletResponse response = this.getResponse();
      JasperUtils.export(jasperPrint, response, getRequest(), type);
    } catch (Exception e) {
      e.printStackTrace();
    }

    return null;
  }

 

Java代码 复制代码
  1. public static void export(JasperPrint jasperPrint, HttpServletResponse response, HttpServletRequest request,   
  2.       String type) throws IOException {   
  3.     if (EXCEL_TYPE.equals(type)) {   
  4.       exportExcel(jasperPrint, response, request);   
  5.     } else if (PDF_TYPE.equals(type)) {   
  6.       exportPDF(jasperPrint, response, request);   
  7.     } else if (HTML_TYPE.equals(type)) {   
  8.       exportHTML(jasperPrint, response, request);   
  9.     } else {   
  10.       exportPrint(jasperPrint, response, request);   
  11.     }   
  12.   
  13.   }  
public static void export(JasperPrint jasperPrint, HttpServletResponse response, HttpServletRequest request,
      String type) throws IOException {
    if (EXCEL_TYPE.equals(type)) {
      exportExcel(jasperPrint, response, request);
    } else if (PDF_TYPE.equals(type)) {
      exportPDF(jasperPrint, response, request);
    } else if (HTML_TYPE.equals(type)) {
      exportHTML(jasperPrint, response, request);
    } else {
      exportPrint(jasperPrint, response, request);
    }

  }

 

Java代码 复制代码
  1. public static void exportExcel(JasperPrint jasperPrint, HttpServletResponse response, HttpServletRequest request)   
  2.       throws IOException {   
  3.     response.setContentType("application/vnd.ms-excel");   
  4.     String filename = DownloadHelper.encodeFilename("未命名.xls", request);   
  5.     response.setHeader("Content-disposition""attachment;filename=" + filename);   
  6.     ServletOutputStream ouputStream = response.getOutputStream();   
  7.     JRXlsExporter exporter = new JRXlsExporter();   
  8.     exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);   
  9.     exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);   
  10.     exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);   
  11.     exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);   
  12.     exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);   
  13.     try {   
  14.       exporter.exportReport();   
  15.     } catch (JRException e) {   
  16.       e.printStackTrace();   
  17.     }   
  18.     ouputStream.flush();   
  19.     ouputStream.close();   
  20.   }   
  21.   
  22.   public static void exportPDF(JasperPrint jasperPrint, HttpServletResponse response, HttpServletRequest request)   
  23.       throws IOException {   
  24.     response.setContentType("application/pdf");   
  25.     String filename = DownloadHelper.encodeFilename("未命名.pdf", request);   
  26.     response.setHeader("Content-disposition""attachment;filename=" + filename);   
  27.     ServletOutputStream ouputStream = response.getOutputStream();   
  28.     try {   
  29.       JasperExportManager.exportReportToPdfStream(jasperPrint, ouputStream);   
  30.     } catch (JRException e) {   
  31.       e.printStackTrace();   
  32.     }   
  33.     ouputStream.flush();   
  34.     ouputStream.close();   
  35.   }  
public static void exportExcel(JasperPrint jasperPrint, HttpServletResponse response, HttpServletRequest request)
      throws IOException {
    response.setContentType("application/vnd.ms-excel");
    String filename = DownloadHelper.encodeFilename("未命名.xls", request);
    response.setHeader("Content-disposition", "attachment;filename=" + filename);
    ServletOutputStream ouputStream = response.getOutputStream();
    JRXlsExporter exporter = new JRXlsExporter();
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
    exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);
    exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
    exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);
    exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);
    try {
      exporter.exportReport();
    } catch (JRException e) {
      e.printStackTrace();
    }
    ouputStream.flush();
    ouputStream.close();
  }

  public static void exportPDF(JasperPrint jasperPrint, HttpServletResponse response, HttpServletRequest request)
      throws IOException {
    response.setContentType("application/pdf");
    String filename = DownloadHelper.encodeFilename("未命名.pdf", request);
    response.setHeader("Content-disposition", "attachment;filename=" + filename);
    ServletOutputStream ouputStream = response.getOutputStream();
    try {
      JasperExportManager.exportReportToPdfStream(jasperPrint, ouputStream);
    } catch (JRException e) {
      e.printStackTrace();
    }
    ouputStream.flush();
    ouputStream.close();
  }

 

  •  
  • 大小: 65.3 KB
  •  
  • 大小: 120.9 KB
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值