MyException - 我的异常网
当前位置:我的异常网» Java Web开发 » 整理一下ireport+jasperreports报表,对初学的朋友希

整理一下ireport+jasperreports报表,对初学的朋友希望有所帮助······解决方案(2)

www.MyException.Cn  网友分享于:2013-02-21  浏览:53次

b、定义报表可能需要的字体类型及其属性
  一个报表的内容五花八门,有表头、栏位名、数据、其他变量信息等等,如果这些信息都是一致的字体和属性(比如颜色),那么整个报表就死气沉沉,显得很粗糙了。我们可以在为报表添加每个元素时定义元素的属性,但是那是一个多么费时的工作,如果能预先定义一些属性的组合,之后在创建每个元素时只需选择这些组合的其中一个即可,省事又快速。
  单击【预览】-【报表字体】开启自定义组合对话框。单击【New】进入定义详细对话框,如图:
  按照图中的顺序填写信息和步骤,依次定义“表头”、“组”、“列”、“列内容”、“统计计算”、“其他”等6中字体组合。
  注意PDF内嵌字体的选择,如果你需要报表时以PDF文件格式提供,那么对此需要作出选择。



a、添加静态对象···
  可以通过工具栏的工具添加静态对象,比如文本,点击【T】,之后在报表的空白处单击,如此即可把静态对象添加到报表,然后拖动对象的边框,使它的大小合适,双击对象弹出对象的属性配置对话框,切换到【Font】Label,在“Report font”的ComBox选择“表头”字体,(表头字体是前文提供的自定义属性组合),再切换到【Static Text】Label,修改表头的名字,比如“Bug统计报表”或是“销售记录统计表”等等与业务有关的内容。添加图片,请点击【Image Tool】,之后的操作与Text类似。其他静态对象操作步骤类似。
b、使用连接···
  还记得前文提供的(3.2节)配置MySql数据库连接吗?这里我们将要使用前文配置的连接了。选择菜单【建立】-【使用动态连接】开启可选的动态连接, 选择任何一个你需要的连接最后【OK】,保存报表,这样你的报表就使用了这个连接了。
*【特别提示】此连接必须与以后应用程序使用的连接一致

c、创建SQL查询语句····
  SQL语句是对任何RDBMS起作用的语言,外部用户需要使用这些语言管理维护数据库中的数据,同样的,iReport也是需要这么做,我们需要提供查询数据库的语言-SQL语句,这样,iReport即可通过此SQL语句获取数据,之后组织到报表中并显示出来,以满足用户的需要为目的。
  通过菜单【资料来源】-【报表查询】开启SQL输入对话框,并在【Report SQL Query】 Label中输入SQL语句如图:图中的“Automatically Retrieve Fields”checkbox和“ReadFields”Button是确认自动获取还是手动获取数据库表的可用Fields。单击【OK】,保存报表。



d、创建字段动态对象·····
  报表的动态对象有变量、参数、字段,前文提及了他们的概念,这里将要一一讲解如何使用。字段也就是数据库中的字段,通过菜单【预览】-【报表字段】开启字段的列表(工具条上可以找到相应的工具),可以拖放任意字段到报表的任何位置,比如拖动一部分Bug的内容字段到detial段(内容无关紧要,只要知道原理)。
e、创建组···
  组是一个很重要的概念,一个报表可以多个组,每个组以一个关键字为标记,比如希望Bug统计是根据项目(或是产品)进行统计的。那么可以设立一个项目标记的组。如图:



组的参数设定可以看界面即可理解部分,其中最主要的是“Group expression”,这是必须输入格式正确的并且存在的字段名称,本文的“proname”是【字段】中的一个元素。依此类推,建立其他的组对象。
每建立一个组,在报表的界面上都会出现该组对应的段,如图:他们是首尾对应出现的。(Header和Footer)



------解决方案--------------------
f、添加参数和使用参数····
我们重申参数作用,一般是需要外界提供参数给报表的入口,比如SQL语句的where条件的表达式。通过【预览】-【报表参数】开启报表参数列表对话框(工具条上可以找到相应的工具)。如图:输入名称及其他参数。【ok】,保存报表。



那么如何使用呢?打开SQL语句对话框,参考“5.3创建SQL查询语句”,这时候的SQL语句应该是:SELECT * FROM bugs where proname=$P{ProjectName} order by proname,modulename
注意其中的红体字部分,就是把刚才定义的变量运用到SQL语句了。这样当应用提供参数时,只要指定提供给这个参数,那么报表解释引擎即可替换这些变量然后再执行SQL语句,在第二部分提到编程时,会提供参数设定代码。
  
g、添加变量和使用变量····
变量的定义类似参数,通过【预览】-【报表变量】开启报表变量列表对话框(工具条上可以找到相应的工具),如图,图中定义的变量的作用是:定义一个Bug的计数器,数据类型是java.lang.Integer,使用Count函数进行统计字段tester,作用范围是模块组,也就是统计模块的Bug量。其中的tester可以改成其他非组对象,比如proname是组对象,就不要用作这里的统计参数。以上提供的是自定义变量,其实iReport系统还有提供一些内嵌(Buildin)的变量,比如页码,行记录数等,视需要而使用。



10、最后的报表····
 a、完成后的报表···


 b、预览报表···
 点击动态运行报表,出现如图内容:


11、在jsp中调用报表·····
解决这个问题也用了我差不多2天时间:(,但总算是搞定了·····
下面分别介绍以pdf格式和以html格式显示报表····

a、pdf格式ireport_pdf.jsp····

Java code
<%@ page import="net.sf.jasperreports.engine.*" %>
    <%@ page import="java.util.*" %>
    <%@ page import="java.io.*" %>
    <%@ page import="java.sql.*" %>
    <%
      //报表编译之后生成的.jasper 文件的存放位置
      File reportFile = new File(application.getRealPath("ireport/xueji.jasper"));
      //这个是用来联接我的mysql 的JDBC URL
      String url="jdbc:mysql://localhost:3306/xueji?useUnicode=true&characterEncoding=gb2312";
      Class.forName("org.gjt.mm.mysql.Driver").newInstance();
      //传递报表中用到的参数值
      Map parameters = new HashMap();
     //"Name"是报表中定义过的一个参数名称,其类型为String 型

     parameters.put("banji", new String(" c1"));
     System.out.println("---------conn-------------");
     //连接到数据库
     Connection conn = DriverManager.getConnection(url,"root","root");
     System.out.println("---------Jasper begin-------------");
     //在控制台显示一下报表文件的物理路径
     System.out.println(reportFile.getPath());
     byte[] bytes=JasperRunManager.runReportToPdf(reportFile.getPath(),parameters,conn);

     System.out.println("---------Jasper end-------------");
     response.setContentType("application/pdf");
     response.setContentLength(bytes.length);
     ServletOutputStream ouputStream = response.getOutputStream();
     ouputStream.write(bytes, 0, bytes.length);
     ouputStream.flush();
     ouputStream.close();
   %>

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有