No pains, No gain
走过、路过、千万别错过
posts - 23,comments - 1,trackbacks - 0

JasperReport 用户指南(转贴) 

一.    JasperReports简介
JasperReports是一个强力的报表产生工具,他有能力描述丰富内容到屏幕上、到打印机或到PDF, HTML, XLS, CSV和XML文件。它完全用Java编写的,并可在各种Java应用(包括J2EE或WEB应用)中用来产生动态内容。它的主要目的是以一种简单而灵活的方式来帮助创建导向的页面。
JasperReports组织根据在一个XML文件中定义的报表设计通过JDBC来接受来自一个关系数据库中的数据. 为了以数据来填充报表,报表设计必须首先被编译。
描述报表设计的XML文件的编译通过执行dori.jasper.engine.JasperManager 类暴露的compileReport()方法。
通过编译,报表设计被装载入一个报表设计对象中,然后系列化并存储在磁盘上(dori.jasper.engine.JasperReport)。当应用程序想以数据来填充特定的报表设计时会使用这个已系列化的对象。事实上,报表设计的编译意指描述报表设计的XML文件中定义的所有Java表达式的编译。为了检查报表设计的一致性,在编译时做各种检验。结果被准备用来填 充报表设计,然后被用来以不同的数据集来产生文档 。
为了填充一个报表设计,可使用由dori.jasper.engine.JasperManager类暴露的 fillReportXXX()方法。这些方法接受作为参数的报表设计对象,或描述特定报表设计对象的文件, 在一个系列化的格式中,和一个从其中接受数据填 充报表的数据库JDBC链接。
结果是一个描述准备用来打印文档的对象(dori.jasper.engine.JasperPrint)并可被以一个系列化格式存储在磁盘上。 为以后使用,或可被分发到打印机,到屏幕或可被转换到一个PDF, HTML, XLS, CSV 或XML文档。
二.    JasperReports快速使用流程
1.    主要类
运行JasperReports 时使用的主要类
dori.jasper.engine.JasperCompileManager
dori.jasper.engine.JasperFillManager
dori.jasper.engine.JasperPrintManager
dori.jasper.engine.JasperExportManager
这些类表现JasperReports引擎的正面(façade), 他们有各种静态方法简化API功能的访问并用来编译一个XML报表设计、填充报表、打印它或输出到PDF, HTML和 XML文件。
dori.jasper.view.JasperViewer
这个可用来观察产生的报表。
dori.jasper.view.JasperDesignViewer
这个可用来观察报表设计。
2. 编译报表设计
报表设计由一个具有在jasperreport.dtd 文件中定义的结构的XML文件来表现。为了根据这样的报表设计来产生报表,需要编译它。
编译可通过使用由dori.jasper.engine.JasperCompileManager 类暴露的compileReportXXX()方法来完成。
当编译一个报表设计时,引擎会创建一个包括所有报表表示式的Java类文件,这个类是使用Java编译器编译并在结果.jasper文件中存储字节码。 
默认情况下,JasperReports使用目前JVM类路径来编译报表文件(java.class.path系统属性)并以目前工作目录作为产生文件的临时存放位置。
为了定制报表编译过程,JasperReports充许通过提供一个值给系统属性jasper.reports.compile.class.path来覆盖默认行为,这将被用报表类编译的类路径,赋一个值给系统属性jasper.reports.compile.temp,这个将被用作临时目录 
XML验证默认是打开的,可通过设定系统属性jasper.reports.compilation.xml.validation 为false来关闭。
如果你想使用一个不同的Java编译器,如jikes,你可以使用jasper.reports.compiler系统属性来提供编译器程序的名字。在你使用jikes情况下,请确信你将rt.jar文件加入到类路径中,可通过上面提及的系统属性 jasper.reports.compile.class.path。 
You can see some of those in action in the supplied "webapp" samples. Check the jsp/compile.jsp and WEB-INF/classes/servlets/CompileServlet.java files.
3. 观察报表设计 
报表设计可通过使用dori.jasper.view.JasperDesignViewer应用程序来察看。在其main()方法中,它接收那些包括报表设计的文件的名字来观看。这可以是XML文件或编译过的报表设计。 
4. 填充报表 
一个编译过的报表设计可通过调用dori.jasper.engine.JasperFillManager 类的fillReportXXX()方法来产生报表。
5. 观看报表 
产生的报表可通使用dori.jasper.view.JasperViewer应用来观看。在其main()方法中它接受包括报表的文件的名字来观看。
6. 打印报表
产生的报表可使用doriJasper.engine.JasperPrintManager 类暴露的静态方法printReport(), printPage()或printPages()来打印。
7.导出到PDF, HTML 或XML格式
在已经填充一个报表后,我们也可以通过使用dori.jasper.engine.JasperExportManager类的exportReportXXX()方法来以 PDF, HTML或XML格式导出它。
三.    技术指南简述
1.报表设计
一个报表设计描述一个被JasperReports引擎用来分发动态内容到打印机,到屏幕或到WEB的模板。存储在数据库中的数据根据报表设计被组织达到准备到打印,页面导向文档。
报表设计是在XML文件中定义并且必有一个特别的结构。此结构是在一个由JasperReports 引擎一起提供的DTD文件中声明的(XML类型定义文件jasperreport.dtd)。然后编译XML文件,为了在后面的报表填充操作中使用他们。
为了创建一个简单的报表设计,我们不得不编辑一个有以下结构的XML文件:
<?xml version="1.0"?> 
<!DOCTYPE jasperReport PUBLIC "-//JasperReports//DTD Report Design//EN" 
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"> 
<jasperReport name="name_of_the_report" ... > 
... 
</jasperReport>
2.参数
参数是传入到报表填充操作的对象引用
参数可的构造SQL查询
3.数据源 
JasperReports使用一个叫JRDataSource的接口来支持各种类型的数据源
4.字段
报表字段代表从数据源映射数据到报表产生程序的唯一途径
5.表达式
表达式是JasperReports的强大特点,它们可被声明的报表变量使用来执行各种计算。
6.变量
报表变量是才一个表达式开始时建立的特殊的对象。
变量可以在相应的表达式中执行内置类型的计算,如:count,sum,average,lowest,highest等
7.报表区
当我们建立一个报表设计时,我们需要定义报表区的内容和布局。报表设计的整个结构基于以下报表区<title>, <pageHeader>, <columnHeader>, <groupHeader>, <detail>, <groupFooter>, <columnFoter>, <pageFooter>, <summary>.
8.组
组代表了在报表上组织数据的一个灵活的方式,当我们填充一个报表时,JasperReports引擎可字段检测组表达式<groupFooter> 和 <groupHeader>等是否完整。
9.字体和Unicode支持
你可以用任何语言来创建你的报表。
10. Scriptlets
Scriptlets是java代码序列,在每次报表事件发生时被执行。通过 scriptlets,用户可以影响被报表变量存储的值。
当我们创建一个JasperReports scriptlet类时,开发者要实现或重载几个方法,象:beforeReportInit(), afterReportInit(), beforePageInit(), afterPageInit(), beforeGroupInit(), afterGroupInit()等,这些方法当填充报表时在适当的时候被报表引擎调用。
11.子报表
子报表是报表产生工具的重要特征,它允许更复杂报表的创建并简化设计工作。
子报表在创建主从报表时非常有用。

1  首先看看
   http://plateau.sicool.com/main.html上的三篇
   iReport和Jasperreport整合开发报表向导(一)(二)(三)
   看完理解并自己运行一下,OK,你入门了
2  去找一份TheJasperReportsUltimateGuide.1.0.pdf,看完之后你就能
   了解JasperReport生成的基本过程及原理
3  当然是Java研究的这个论坛
   http://www.javaresearch.org/forum/forum.jsp?column=316&start=0&thRange=15
   多往后翻翻看看帖子,很多你要问的问题都能找到答案,还有好几篇前辈的理会等等 
   都是宝贵的经验
4  JasperReport最好的资料是什么??
   解压jasperreports-0.5.0-project.zip 后
   目录jasperreports\demo\samples下的例子,看看这些例子是你关于这个报表工具提升 
   能力的最好最快的方式,下面我简要说一下各个例子说的是什么以及有什么用
    alterdesign 该例子演示了报表编译后,在报表展现的时候如何动态的控制其中的元素
                比如让某一个矩形变色或其他
    antcompile  演示如何让 ant 来编译
    chart       演示了如何在报表中添加图像,JasperReport是用Scriptlet的方式
                往报表中添加图像,而Scriptlet是调用也是开源的jfreechart的Api来
                生成图形,去jfreechart看一下,该工具能的图形生成能力也很强
    datasource  演示了如何在报表中使用各种数据源,能够使用beanarray
                beancollection,也可以用自定义的数据源,只要继承了JRDataSource的
                两个接口,这个能给用户提供非常大的灵活性,报表的数据不用局限于一
                条Sql语句,也可以使用存储过程,对生成报表中的数据也可以排序,二
                次检索,等等
    fonts       各种字体的演示
    horizontal  演示了水平分栏的报表,演示报表中分了三栏,其中还用到了
                textFieldExpression,就像if语句的效果来选择输出的内容
    hyperlink   演示了各种样式的链接
    images      演示了如何在报表中加入图像以及图像的显示方式
    jasper      演示了分组分栏的报表,演示中用了2次group
    jcharts     演示了调用另一个开源的API jcharts来往报表中加入分析图形,原理同
                上chart,如果jfreechart都还不能满足你分析图形的要求,那到jcharts
                里找找看吧,说不定有
    landscape   演示横向的报表
    nopagebreak 演示比如在IE中不分页的方式打印出报表的内容,通过这个演示也可以
                了解报表输出如何配置参数
    noreport    演示了如何直接通过java程序生成JasperPrint对象来输出
    noxmldesign 演示了如何直接通过java程序生成JasperDesign对象来动态的生成报
                表,根据这个例子,用户可以作出自定义选列的报表,当然比较麻烦,
                而且肯定自己要补充他的API库
                (JasperReport真是强大啊,呵呵)    
    pdfencrypt  演示了pdf的输出方式,可以给pdf文件加密码,其实就是pdf输出方式的
                参数配置,具体有那些参数可配置,去看看API吧
    printservice演示了如何直接打印报表
    query       演示了如何让查询的sql动态起来,比如你可以通过一个Jsp页面传
                报表的sql的where条件,order条件,甚至整个sql语句
    rotation    演示了文字纵向显示的报表
    scriptlet   演示了如何继承JRDefaultScriptlet,并加入自己的处理语句,这个功能
                可是很强大的哦,看看这些接口
                beforeReportInit()  afterReportInit()  beforePageInit()
                afterPageInit()  beforeColumnInit()  afterColumnInit() 
                beforeGroupInit(String groupName)
                afterGroupInit(String groupName)  
                看看这些名字就知道你能完成那些功能,比如显示一列数据后,马上跟
                上该列数据的分析图形,当然你也可以加上自己的方法并在报表中调用
    shapes      演示了JasperReport中自带的图形,及能配置的参数
                当然你也能继承或者覆写JasperReport中的Api生成你要的图形,
    stretch     演示了如何处理报表中数据拉伸以及带来周围的线及框的拉伸,
                你能了解到虽然黑框式表格不是JasperReport中缺省的展现方式,
                但在JasperReport中不难实现
    subreport   演示了子报表,还告诉你一个报表中可以有n个子报表,子报表中还可以
                嵌套子报表
    tableofcontents  演示了如何生成一个有目录的,复杂的报表
    unicode     演示了各种 字符编码
    webapp      演示了如何把报表放到一个JavaWeb项目中,可以用Jsp Servlet
                applet,笔者做了一个
                有参数页面,可以选择html pdf applet输出方式的报表,有兴趣的 
                我可以在后面放上代码
5  比上面更好的资料是什么,就是JasperReport的源代码,看懂源代码,JasperReport
   就是在你脑子里的了,你想干什么都行了,优化代码,覆写,继承他的类,实现个性
   化的功能,甚至你可以参考他的思想,升华一下,做一个你自己的报表







 

posted on 2006-09-12 11:45 一缕青烟 阅读(484) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: