<< 配置Tomcat和Eclipse集成调试来代替hot deploy热部署 | 首页 | OutOfMemoryError: unable to create new native thread >>

使用iReport和Jasperreport开发报表

使用iReport和Jasperreport开发报表

iReport是报表设计器,它负责设计报表模板,并生成*.jrxml,可以编译生成*.jasper模板文件;Jasperreport是报表产生库,它通过传入模板生成pdf或html格式的报表。

1,下载iReportJasperreport,要生成pdf必须要下载itext-2.0.1.jar和中文支持包iTextAsian.jar。我下载的版本是iReport-2.0.0.zip和jasperreports-1.3.4.jar。

2,配置数据库连接,加入合适的数据库JDBC驱动到iReport-2.0.0/lib,在iReport-2.0.0的菜单的Data->连接,数据源->点击New。

3,新建报表,可在i18n标签里选择xml的编码UTF-8或自己填写GBK,向报表设计面板里添加必要的对象。并使当前的报表和之前建立的数据库连接关联,在菜单建立->使用动态连接里选择。为了使产生pdf支持中文,导入iTextAsian.jar包,在iReport报表设计器里将field PDF font name 已经设置成STSong-Light,PDF Embedded PDF Encoding里面选择UniGB-UCS2-H (Chinese Simplified)

4,设计报表:

报表查询,在菜单Data->报表查询里编写合适的SQL,例如:select * from sys_module where level2=$P{level2} order by level2,在菜单预览->报表字段拖放字段到合适的位置。

设置分组展示,在菜单里预览->报表群组里new一个分组,在Group expression里输入要分组的字段,如$F{user_name},user_name为字段名,其实类似于group by user_name。

添加参数,参数是需要外界提供参数给报表的入口,比如SQL语句的where条件的表达式。通过菜单预览->报表参数开启报表参数列表对话框。例如:前面的sql里的$P{level2}可由程序传递过来,代码见后面的程序。定义Parameter Name为level2,Default Value Expression为"1"

添加变量,变量可以定义一些java语言表达式,也可以对某个字段做一些sum,count,average等计算,例如:定义Variable Name为level, Variable Expression为new Integer($F{LEVEL2}.intValue()),选择Calculation Type为Sum,即对LEVEL2字段做Sum合计,然后把$V{level}拖放在合适的位置

 

5,使用JasperReports报表引擎,编码产生pdf格式报表

 /**
  * @param args
  */
 public static void main(String[] args) {

     String sDBDriver = "oracle.jdbc.driver.OracleDriver";
     String sConnStr = "jdbc:oracle:thin:@localhost:1521:psmis";
     Connection conn = null;
     try
     {
      Class.forName(sDBDriver);
      conn = DriverManager.getConnection(sConnStr,"userName","password");
     }catch(Exception e){
      e.printStackTrace();
     }

     try
     {
         File business_rpt = new File("E:/ireport/psmis.jasper");
         Map parameters = new HashMap();
         parameters.put("level2", "2");
         JasperRunManager.runReportToPdfFile(business_rpt.getPath(),parameters,conn);
     }catch (JRException e)
     {
       e.printStackTrace();

     }
     try{
      if(conn!=null)conn.close();
     }catch(Exception e){
      e.printStackTrace();
     }
}

 

 

标签 : ,



发表评论 发送引用通报