`

JasperReports学习笔记

    博客分类:
  • Java
阅读更多
reference:
http://www.javaworld.com/javaworld/jw-09-2002/jw-0920-opensourceprofile.html
JasperReports是一个非常流行的开源报表工具
所有的报表工具都离不了三个步骤:第一个就是定义报表模板, 第二个就是给模板填充数据, 第三个就是将最终数据的报表输出。
JasperReports的模板文件是一个后缀名为jrxml的xml文件, 它包含这样几个主要元素:
<jasperReport> 根元素
<title>标题
<pageHeader>页头
<detail>具体内容
<pageFooter>页尾
<band>作为以上元素的子元素, 用来定义报表区域
除了jasperReport之外, 其他元素都不是必须的
下面是一个jrxml文件的定义,用来输出helloworld
<?xml version="1.0"?>
<!DOCTYPE jasperReport
  PUBLIC "-//JasperReports//DTD Report Design//EN"
  "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">

<jasperReport name="Simple_Report">
 <detail>
    <band height="20">
      <staticText>
        <reportElement x="180" y="0" width="200" height="20"/>
        <text><![CDATA[Hello World!]]></text>
      </staticText>
    </band>
  </detail>
</jasperReport>

接下来就是将报表模板文件编译成二进制文件,然后就是给报表模板填充数据,最后是输出(比如输出为PDF文件),下面的代码完成这个工作:
public class JasperReportsIntro
{
  public static void main(String[] args)
  {
    JasperReport jasperReport;
    JasperPrint jasperPrint;
    try
    {
      jasperReport = JasperCompileManager.compileReport("reports/jasperreports_demo.jrxml");     
      jasperPrint = JasperFillManager.fillReport( jasperReport, new HashMap(), new JREmptyDataSource());      JasperExportManager.exportReportToPdfFile( jasperPrint, "reports/simple_report.pdf");
    }
    catch (JRException e)
    {
      e.printStackTrace();
    }
  }
}


上面的代码是JasperReport的早期版本的写法,不过原理还是一样的。

我们再看一个比较复杂的例子, 它的title是在程序中通过参数传递进行来的, 然后通过JDBC访问数据库来取得要填充的数据:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jasperReport PUBLIC "-//JasperReports//DTD Report Design//EN" 
 "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport name="BasicReport" >
  <parameter name="Title" class="java.lang.String"/>
  <queryString><![CDATA[select name, cost from product]]></queryString>
  <field name="NAME" class="java.lang.String"/>
  <field name="COST" class="java.lang.Double"/>
  <title>
    <band height="50">
      <textField>
        <reportElement x="0" y="0" width="200" height="50" />       
        <textFieldExpression class="java.lang.String">$P{Title}</textFieldExpression>
      </textField>
    </band>
  </title>
  <pageHeader>
    <band>
    </band>
  </pageHeader>
  <columnHeader>
    <band height="20">
      <staticText>
        <reportElement x="180" y="0" width="180" height="20"/>
        <textElement>
          <font isUnderline="true"/>
        </textElement>
        <text><![CDATA[NAME]]></text>
      </staticText>
      <staticText>
        <reportElement x="360" y="0" width="180" height="20"/>
        <textElement>
          <font isUnderline="true"/>
        </textElement>
        <text><![CDATA[COST]]></text>
      </staticText>
    </band>
  </columnHeader>
  <detail>
    <band height="20">
      <textField>
        <reportElement x="180" y="0" width="180" height="20"/>                  
        <textFieldExpression class="java.lang.String"><![CDATA[$F{NAME}]]></textFieldExpression>
      </textField>
      <textField pattern="0.00">
        <reportElement x="360" y="0" width="180" height="20"/>                  
        <textFieldExpression class="java.lang.Double"><![CDATA[$F{COST}]]></textFieldExpression>
      </textField>
    </band>
  </detail>
  <columnFooter>
    <band>
    </band>
  </columnFooter>
  <pageFooter>
    <band height="15">
      <staticText>
        <reportElement x="0" y="0" width="40" height="15"/>
        <textElement/>
        <text><![CDATA[Page:]]></text>
      </staticText>
      <textField>
        <reportElement x="40" y="0" width="100" height="15"/>
        <textElement/>
        <textFieldExpression class="java.lang.Integer"><![CDATA[$V{PAGE_NUMBER}]]></textFieldExpression>
      </textField>
    </band>
  </pageFooter>
  <summary>
    <band>
    </band>
  </summary>
</jasperReport>

从上面的模板文件中可以看出, 报表中的parameter, field, variable将通过P${name}, F${name}, and V${name}来进行引用。
下面是对应的java代码:
// First, load JasperDesign from XML and compile it into JasperReport
JasperDesign jasperDesign = JasperManager.loadXmlDesign("BasicReport.xml");
JasperReport jasperReport = JasperManager.compileReport(jasperDesign);
// Second, create a map of parameters to pass to the report.
Map parameters = new HashMap();
parameters.put("ReportTitle", "Basic JasperReport");
parameters.put("MaxSalary", new Double(25000.00));
// Third, get a database connection
Connection conn = Database.getConnection(); 
// Fourth, create JasperPrint using fillReport() method
JasperPrint jasperPrint = JasperManager.fillReport(jasperReport, 
   parameters, conn);
// You can use JasperPrint to create PDF
JasperManager.printReportToPdfFile(jasperPrint, "BasicReport.pdf");
// Or to view report in the JasperViewer
JasperViewer.viewReport(jasperPrint);

这里我们有几个类需要了解一下:
JasperDesign:可以看成报表模板对应的对象模型, 我们定义的jrxml文件最终需要转换成该模型来使用, 对于模板对象来说, 它是静态的对象, 因此只需在初始化的时候创建一次,而不必在每次生成报表的时候生成。
JasperReport:经过编译的JasperDesign就是JasperReport
JasperPrint:给JasperReport填充数据和传递参数之后得到的就是JasperPrint对象, 他就是我们最终要生成的报表对象。
JasperManager:可以看成以上的对象的工厂类,它提供有相关的方法来创建以上的类实例
分享到:
评论
4 楼 iris_1992 2015-04-30  
2005年以前,国外开原报表完全碾压国产软件,但是现在国内软件,像帆软、FineBI,都比较牛掰了,设计模式和数据处理方面优于开源报表,真犯不着再用Jasperreport了,
3 楼 nopain_nogain 2009-05-13  
你好,请问你在<queryString/>标签里是怎么使用in的?
如:
<parameter name="loginId" class="java.lang.String"/>
<queryString language="SQL">
<![CDATA[select * from report_log where 1=1 and login_id in($P!{loginId}]]>
</queryString>
parameters.put("loginId", "18187,18185,18182");
在ireport、程序里都不显示报表。

但是使用
select * from report_log where 1=1 and login_id=$P!{loginId}
这样就可以!

谢谢!
2 楼 baopei 2008-10-17  
“JasperDesign jasperDesign = JasperManager.loadXmlDesign("BasicReport.xml");“这句提供了实现了后台控制前台的接口,不错,学习了
1 楼 tzq88818453 2008-09-21  
你可以回去种田了

相关推荐

    JasperReports研究笔记

    通过阅读《报表研究笔记.doc》,你可以更深入地了解JasperReports的使用技巧和最佳实践,提升你在报表开发领域的专业能力。文档可能涵盖了从基础概念到高级特性的全方位介绍,是学习和解决问题的重要参考资料。

    iReport 3.6.7 学习笔记

    《iReport 3.6.7 学习笔记》 在IT行业中,报表设计和生成是数据可视化的重要环节,而iReport作为一款强大的Java报告工具,因其易用性和灵活性深受开发者喜爱。本学习笔记主要围绕iReport 3.6.7版本展开,探讨其核心...

    jasperreoprt+ireport学习笔记2

    在学习jasperreports和iReport的过程中,除了官方文档,还有许多社区资源可供参考,如Stack Overflow、Maven仓库的示例项目、以及各种技术博客。通过实际操作,设计并运行简单的报表,逐步理解这两个工具的用法和...

    jasperreoprt+ireport学习笔记4

    【jasperreports与iReport简介】 jasperreports是一款强大的开源报表工具,主要用于生成静态和动态的HTML、PDF、Excel、CSV、XML等格式的报表。它支持多种数据源,包括数据库、JavaBeans、CSV文件等,能灵活地设计...

    iReport3.7学习笔记(基础)

    ### iReport 3.7 学习笔记:基础知识点详解 #### 一、iReport简介与安装 **iReport** 是一个开源的报表设计器,它主要用于设计和创建JasperReports库支持的报表模板。JasperReports是Java平台上最流行的开源报表...

    Jasperreport+ireport学习笔记4

    ### JasperReport与iReport复合报表深度解析 #### 引言 在报表开发领域,JasperReport因其强大的功能和灵活性而受到广泛青睐。结合iReport工具,开发者能够更加便捷地设计和生成复杂报表。本文旨在深入解析...

    Jasperreport+ireport学习笔记1

    ### Jasperreport与iReport整合开发Web报表学习笔记 #### 一、环境配置 为了能够顺利地使用Jasperreport和iReport进行报表设计与开发,首先需要确保开发环境配置正确。 1. **Java JDK环境**: 确保已安装最新版的...

    iReport 3.7.6 学习笔记.pdf (绝对是3.7.6版本的)

    ### iReport 3.7.6 学习笔记精粹 #### iReport 3.7.6 概览 iReport 3.7.6 是一款功能强大的报表设计工具,专为 JasperReports 设计,提供了直观且易于使用的界面,允许用户以可视化方式编辑复杂的报表,包括图表、...

    jasperreport笔记1

    而"Jasperreport+ireport学习笔记(1).pdf"很可能是作者个人学习JasperReports和IReport的心得体会,可能会包含实战操作步骤、常见问题解决方案以及一些个人技巧分享。 综合以上信息,JasperReports的学习内容可能...

    报表学习基础制作笔记

    本压缩包中的“报表基础制作学习笔记”文件,应该包含了作者在学习报表制作过程中的笔记和心得,可能包括具体案例、代码示例、遇到的问题及解决方案等,对于初学者来说是一份宝贵的参考资料。阅读这份笔记,你可以...

    banking_java管理系统_Bankingbank_Bankingreport_sitnbh_

    5. **报表模块**:利用Java的报表库如JasperReports或iText,生成各种银行运营报告,提供数据分析支持。 6. **配置管理**:系统配置文件存储了数据库连接信息、服务器设置等,方便系统部署和维护。 7. **测试与...

    IREPORT配置与学习

    - 提供的文件"Jasperreport+ireport学习笔记(1-4).pdf"是逐步教程,覆盖了IREPORT的基础知识和高级技巧,建议逐个阅读,加深理解。 - "Ireport配置说明.pdf"详细解释了IREPORT的配置过程,对初学者尤其有帮助。 ...

    IReport文档合集

    首先,"iReport_学习笔记.doc"可能包含了基础操作和概念的介绍,如如何启动IReport、创建新的报表项目、添加数据源以及设计报表的基本布局。这通常会涵盖表格、图表、文本框、图片等元素的添加与编辑,以及样式和...

    java recouse

    在这个名为"java resource"的压缩包中,我们发现了一份名为“基础报表学习笔记”的文件。这显然是一份专门为Java初学者准备的学习资料,旨在帮助他们掌握Java编程的基础知识,特别是与报表相关的部分。Java作为一种...

    CRMSys项目笔记

    在CRMSys中,可能使用了JasperReports或BIRT等报表工具,通过SQL查询获取数据,然后根据业务需求生成各种定制化的报表。 6. **Ajax技术** “Ajax相关案例.txt”可能包含了一些使用Ajax技术实现异步更新的例子。...

    IReport详细帮助文档附带案例web案例

    - **jasperreoprt+ireport学习笔记1.pdf**:分享了作者的学习经验和技巧,有助于提升报表设计能力。 通过以上知识点的学习和实践,你将能够充分利用IReport在MyEclipse中创建出美观且功能丰富的报表,为你的业务...

    ireport开发交叉报表资料及笔记

    【ireport开发交叉报表资料及笔记】 交叉报表(Crosstab)是数据分析中常用的一种工具,它可以将数据按行和列的方式进行交叉展示,便于用户更直观地理解数据间的关联和对比。Ireport是一款强大的开源报表设计工具,...

    iReport教程

    4. **学习资源**:提供的文档如"ireport图文教程(超详细).doc"和"IReport-4.5-学习笔记.doc",包含了详细的操作步骤和实例,适合初学者逐步学习。"spring_ireport.rar"可能是包含示例代码的压缩包,可帮助理解SSM与...

    JasperReport + IReport 开发文档

    2. **这几天在弄ireport.doc**:可能是个人的学习笔记,记录了作者使用IReport时的经验和技巧。 3. **JasperReport初级教程(2_0_3)图文详解_绝对原创 - 川江号子_cn - CSDN博客.mht**:针对JasperReport的基础教程,...

Global site tag (gtag.js) - Google Analytics