1、先介绍一下ireport及asperreports吧····
Jasperreport是一个报表制作程序,用户需要按照它制定的规则编写一个XML文件,
然后得到用户需要输出的格式文件。它支持输出的文件格式包括PDF,HTML,XML,XLS,CVS等等。
而iReport就是一个制作Jasperreport的XML文件的可视化开发工具。
2、下载ireport和jasperreports···
jasperreport下载地址:(我下的是jasperreports-0.6.8)http://jasperreports.sourceforge.net
ireport下载地址:(我下的是iReport0.5.0)http://ireport.sourceforge.net
3、下载了ireport将它解压缩以后运行iReport.bat文件,过大约30秒如果能出现ireport的主窗体
则表明你的系统已经可以运行ireport了,但是我的不行,所以我编辑目录下的iReport.bat文件,
代码如下····
@echo off
set JAVA_HOME=C:\j2sdk1.4.0_03
set ANT_HOME=C:\ant
set IREPORT_HOME=C:\Documenti\progetti\iReport\iReport2\
rem %ANT_HOME%\bin\ant javadocs
%ANT_HOME%\bin\ant iReport
----------------
这里是采用ant来运行的,所以还需要下载一个ant···
如果你没有安装ant的话也可以找到noAnt文件夹下的startup.bat文件即可运行···
4、数据库···
我是用的mysql数据库,之前配置数据库的JDBC驱动器一直不成功原因是我下的mysql的jdbc驱动太老了,
和ireport的不兼容····
建议到http://dev.mysql.com/downloads/下载最新版本···
5、配置数据库连接····
这个是报表与数据库的接口,通过<资料来源>--<连接/资料来源>开启配置对话框,ireport会记录以前使用的
所有连接,除非你手工删除这些连接,否则连接将一直存在···
配置新连接界面如下:
提示:如果你需要报表提供中文内容显示可以在JDBC URL下工夫,比如输入:
jdbc:mysql://localhost/xiaoya?user=root&password=root&useUnicode=true&characterEncoding=GB2312
6、中文问题····
解决pdf中文问题需要下载itextasian.jar和itext-1.3.jar,将其下载后放到ireport/lib下即可··
要在这里提一下的是之前我也下载了这两个东东放到指定的位置了可还是乱码,后来还是解决了··
解决方法:
在iReport中新建一个TextField的时候会自动把pdf字体设为CP1252,这个是需要修改的,
否则pdf输出会报错说找不到字体,我就被这个捆饶了很久,修改如图:
7、理解几个重要的概念····
a、iReport的输出格式····
iReport的预览输出格式可以支持以下几种:
PDF、HTML、CSV、JAVA2D、Excel、纯文字、JRViewer,其中最常用的是PDF、JRViewer。
本文以JRViewer为例子。JRViewer是直接以C/S方式作为报表的输出格式,在JFrame框架下输出。Jasperreport提供默认的JRViewer输出类。
b、报表的动态对象变量、参数、字段····
在使用iReport的过程中会碰到很多与变量(Variables)、参数(Parameters)、字段(Fields)这些有关的内容,我们要介绍这些对象的使用和意义:
·字段(Fields):是数据库抽取出来的,希望在报表中出现的数据库内容。
比如一个ID的所有值。$F{ filedsName }
·参数(Parameters):这是你的应用需要提供给报表的入口,
比如你希望在报表被解释的时候提供Where语句的条件值,
那么就可以使用参数(Parameters)。$P{ parameterName }
·变量(Variables):这是报表中一些逻辑运算的表现,比如统计值。$V{ variablesName }
每种对象的定义格式如每个对象的后面说明,比如定义一个变量(Variables),
那么表达式就写成$V{ variablesName },报表中出现的就是这个变量的名称。
c、编译、静态运行、动态运行···
Jasperreport运行时需要的就是一个jasper后缀的文件,编译过程其实就是把jrxml后缀的文件生成jasper后缀的文件。(可以参考Jasperreport的运行原理) 静态运行和动态运行是相对的,后者带数据源运行,比如带数据库运行。前者就是静态文本运行,和数据源无关,如果报表中出现和数据源有关的对象,则以null显示。
d、报表的结构···
一个报表的结构大致是几个部分:title、pageHeader、columnHeader、detial、columnFooter、pageFooter、summary、groupHeader、groupfooter。
·Title:每个报表一般会有一个名字,比如×××销售报表,title就是搁置这个名称的最好地方了,当然你也可以根据需要搁置在合适的地方。
·pageHeader:报表的一些公共要素,比如页码、创建时间、创建人等信息放置在这里是比较好的选择。
·columnHeader:无可非议的这里是放置列的名称,记住不是列数据。
·Detial:放置需要循环的数据,比如销售记录数据。
·columnFooter:放置列级别的统计计算值或是列的说明。
·pageFooter:放置页级别的统计值或是页的说明。
·Summary:可能需要对几页(你的报表可能有几个页组成)的统计值。比如50个销售记录共占用了3页,那么放置这些统计记录的统计值最好的地方就是summary。
·groupHeader:每个表的内容可能需要根据某个属性进行划分显示内容和计算内容,比如希望以月份为单位每组分开显示销售记录,那么就可以定义一个组(组的定义参考后文),groupHeader就是放置组说明或是组标志最好的地方。
·Groupfooter:放置组的统计或是说明
8、建立一个新的报表·····
a、新建一个空报表的基本配置
单击工具栏的第一个工具“New Report”,新建一个报表,输入报表名称和定义报表的一些参数,比如名称输入(例子是做一个项目的Bug量统计报表)单击【More….】选择标签,填写或是选择XML编码,这是关系到你的XML支持的字符集的选择,请根据需要选择,比如需要你的XML文件支持中文,那么可以输入或是GBK,之后点击【OK】按钮,进入报表的设计界面。
b、定义报表可能需要的字体类型及其属性
一个报表的内容五花八门,有表头、栏位名、数据、其他变量信息等等,如果这些信息都是一致的字体和属性(比如颜色),那么整个报表就死气沉沉,显得很粗糙了。我们可以在为报表添加每个元素时定义元素的属性,但是那是一个多么费时的工作,如果能预先定义一些属性的组合,之后在创建每个元素时只需选择这些组合的其中一个即可,省事又快速。
单击【预览】-【报表字体】开启自定义组合对话框。单击【New】进入定义详细对话框,如图:
按照图中的顺序填写信息和步骤,依次定义“表头”、“组”、“列”、“列内容”、“统计计算”、“其他”等6中字体组合。
注意PDF内嵌字体的选择,如果你需要报表时以PDF文件格式提供,那么对此需要作出选择。
9、向表添加对象····
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····
<%@ 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();
%>
<!----> b、html格式ireport_html.jsp····<!---->
<!---->
<%
File reportFile = new File(application.getRealPath("/ireport/xueji.jasper"));
JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());
Map parameters = new HashMap();
parameters.put("baiji", "c1");
//parameters.put("BaseDir", reportFile.getParentFile());
//JRBeanArrayDataSource jrDataSource = new JRBeanArrayDataSource(objects);//objects为要打印的实体数组;
Class.forName("org.gjt.mm.mysql.Driver");
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/xueji","root","root");
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, conn);
JRHtmlExporter exporter = new JRHtmlExporter();
StringBuffer sbuffer = new StringBuffer();
Map imagesMap = new HashMap();
session.setAttribute("IMAGES_MAP", imagesMap);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
//exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap);
//exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "/ireport/ireport_html.Image?image=");
//exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML, "
");
exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);
exporter.exportReport();
//out.flush();
conn.close();
% >
注意:以html格式调用主要要注意//exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap);
//exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "images目录的路径?image=");
在生成html预览的时候会生成一个px文件,而这个images_uri的路径就是那个px的路径,建议不用,就用下面
的语句就可以了····
exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);
而这个语句则是处理分页用的····
//exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML, "
");
需要注意的地方····
必须在tomcat5以上版本中运行····
在运行的时候还要将jasperreports/lib下的包全部拷到tomcat下你所放文件目录下的win-inf/lib下···
特别要注意的是看看ireport/lib下的包与jasperreports/lib的包是否兼容···
之前我的一直有问题就是因为我的发布环境是jasperreports-0.6.7.jar而运行环境是jasperreports-0.6.8.jar···
这样也会出现错误的····
参考资料····
感谢···
http://www-128.ibm.com/developerworks/cn/java/j-ireport/?ca=dwcn-newsletter-java
http://blog.csdn.net/jemlee2002/archive/2004/10/05/125107.aspx
转自:http://xiaoya317.bokee.com/2006282.html
分享到:
相关推荐
iReport是一款开源的报表设计工具,它允许开发者通过图形化界面设计JasperReports报表。用户可以使用拖放功能添加数据字段、图表、文本框等元素,同时支持SQL查询,方便从数据库中提取数据。iReport支持多种导出...
iReport和JasperReports是Java世界中非常流行的报表设计和生成工具,它们为开发者提供了强大的报表解决方案。在本文中,我们将深入探讨这两个工具的核心特性、使用场景以及如何联合使用它们来创建复杂的JAVA报表。 ...
【报表制作的详细流程(iReport+jasperReports)】 在IT领域,报表系统是数据分析和决策支持的重要工具。本文将深入探讨使用iReport和jasperReports这两个开源工具来创建专业报表的详细步骤。这两个工具结合使用,...
1. **iReport**:这是一个基于Java的报表设计工具,它允许开发者通过直观的用户界面创建、编辑和管理JasperReports报表模板。iReport支持多种数据源,包括数据库、CSV、XML等,并提供丰富的图表类型和样式选项。 2....
iReport和JasperReports是Java世界中非常流行的报表设计工具,它们主要用于创建复杂的数据报告,广泛应用于企业级应用系统中。本套教程包含了从基础到高级的全方位学习内容,旨在帮助用户掌握这两款工具的使用技巧,...
IReport和JasperReports是两个非常流行的开源工具,专门用于设计和生成复杂的报表。本篇文章将深入探讨如何利用这两款工具实现Flash报表查询功能。 首先,IReport是一款基于Java的报表设计工具,它可以与...
iReport和JasperReports是两个强大的开源工具,专门用于设计和实现这些报表。本文将深入探讨这两个工具,以及如何利用它们来开发Java应用报表。 iReport是JasperSoft公司推出的一款基于Eclipse的报表设计工具,它...
《iReport-JasperReports报表开发指南+操作手册》是一份详尽的资源,旨在帮助开发者深入理解和高效使用iReport和JasperReports这两个强大的报表工具。iReport是JasperReports的图形化设计工具,用于创建复杂的报表...
iReport和JasperReports是Java世界中用于生成报表的两款强大工具,它们为开发者提供了创建复杂、美观且数据丰富的报表的能力。在这个教程中,我们将深入理解这两款工具的核心概念、功能以及如何结合使用。 首先,...
iReport是一款基于Java的报表设计工具,它可以用来创建、编辑和管理JasperReports报表模板。通过直观的用户界面,开发者可以轻松地设计复杂的报表布局,包括表格、图表、文本、图片等多种元素。iReport支持WYSIWYG...
新手看,入门所用~喜欢就回复~!~~ 都是一些简单的东西
首先,iReport是Jaspersoft公司开发的一个开源报表设计器,它允许用户使用拖放界面来创建和编辑JasperReports报表。iReport支持多种数据源,包括数据库、CSV文件、XML文件等,可以设计各种类型的报表,如表格、图表...
### iReport与JasperReports报表开发详解 #### 一、简介 JasperReports是一个功能强大的报表制作工具,它允许用户根据特定的规则编写XML文件,从而生成多种格式的输出文件,例如PDF、HTML、XML、XLS等。iReport则是...