JasperDesign+ireport动态报表实现

直接上代码

package com.report;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRMapCollectionDataSource;
import net.sf.jasperreports.engine.design.JRDesignBand;
import net.sf.jasperreports.engine.design.JRDesignExpression;
import net.sf.jasperreports.engine.design.JRDesignField;
import net.sf.jasperreports.engine.design.JRDesignStaticText;
import net.sf.jasperreports.engine.design.JRDesignTextField;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.xml.JRXmlLoader;

public class DynamicIreport {

    /**
     * @param args
     * @throws JRException
     */
    public static void main(String[] args) throws JRException {
        report();
    }
    @SuppressWarnings("deprecation")
    public static void report() throws JRException{
        int randomNum = new Random().nextInt(20);
          String jrxmlPath ="D:\\workspace\\iReportTestAndJfreeChart\\report\\report1.jrxml";
        
          JasperDesign jasperDesign= JRXmlLoader.load(jrxmlPath);//因为还是添加元素进去,所以还只是jrxml文件

          JRDesignBand columnHeaderBand = (JRDesignBand )jasperDesign.getColumnHeader();//获取ColumnHeader拦
          JRDesignBand detailBand = (JRDesignBand )jasperDesign.getDetail();//获取Detail拦
          JRDesignTextField detailField= (JRDesignTextField )detailBand.getElementByKey("detail");
          JRDesignStaticText columnHeaderField = (JRDesignStaticText)columnHeaderBand.getElementByKey("header");
          
          columnHeaderBand.removeElement(columnHeaderField);
            detailBand.removeElement(detailField);//得到对象之后  将其从xml的文件中移除
            
          Map<String,Object> map = new HashMap<String, Object>();
          List< Map<String,Object>> list = new ArrayList< Map<String,Object>>();
          //根据随即生成的数进行动态添加列
          for(int i=0,y=3;i<=randomNum;i++,y++){
        String detailFieldKey = "detail"+y;
        //String columnHeaderFieldKey = "staticText-"+y+1;
        map.put(detailFieldKey,y);
        //map.put(columnHeaderFieldKey,"列"+y);
        JRDesignField jRDesignField= new JRDesignField();
          jRDesignField.setName(detailFieldKey);
          jRDesignField.setValueClass(java.lang.String.class);
          jasperDesign.addField(jRDesignField);
          
        detailField= (JRDesignTextField)detailField.clone();
        detailField.setX(i*60);
        JRDesignExpression expression = new JRDesignExpression();
        expression.setText("$F{"+detailFieldKey+"}");
        expression.setValueClass(java.lang.String.class);
        detailField.setExpression(expression);
        detailBand.addElement(detailField);

        columnHeaderField = (JRDesignStaticText)columnHeaderField.clone();
        columnHeaderField.setX(i*60);
        columnHeaderField.setText("列"+y);
        columnHeaderBand.addElement(columnHeaderField);
        }
        list.add(map);
        JRDataSource jRDataSource = new JRMapCollectionDataSource(list); //   数据集
          JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);//编译jrxml文件
          JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,null,jRDataSource); //填充打印
          
          JasperExportManager.exportReportToPdfFile(jasperPrint,"D:\\workspace\\iReportTestAndJfreeChart\\report\\test.pdf");
    }
                                                                                            
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值