iReport基于web开发配置向导

iReport_web开发配置向导

一、iReport简介


说到iReport不得不先介绍Jasperreport,Jasperreport是一个报表制作程序,用户需要按照它制定的规则编写一个XML文件,然后得到用户需要输出的格式文件。它支持输出的文件格式包括PDF,HTML,XML,XLS,CVS等等。而iReport就是一个制作Jasperreport的XML文件的可视化开发工具。只是一个UI。


二、安装说明


2.1 基本安装
现在最新的版本是iReport 0.5.1 (Aug 27, 2005).
下载后解压然后在根目录双击iReport.bat就可以用了,但是为了可以使用external ttf font还必须要把 iReport-0.5.1/fonts 加到环境变量里面去。

2.2 了解制作报表用的包
下载后到到 iReport-0.5.1/lib 里看看,你就可以发现iReport的真面目了。
(1) jasperreports-1.0.1.jar
jasperreports是iReport的核心内容。它是一个强力的报表产生工具,他有能力描述丰富内容到屏幕上、到打印机或到PDF, HTML, XLS, CSV和XML文件。它完全用Java编写的,并可在各种Java应用(包括J2EE或WEB应用)中用来产生动态内容。它的主要目的是以一种简单而灵活的方式来帮助创建导向的页面。
JasperReports组织根据在一个XML文件中定义的报表设计通过JDBC来接受来自一个关系数据库中的数据. 为了以数据来填充报表,报表设计必须首先被编译。
jasperreports的官方网站:http://jasperreports.sourceforge.net/

(2) itext-1.3.1.jar
iText是一个开放源码的Java类库,是用来生成PDF文件的。
iText的官方网站:http://itext.sourceforge.net
如果要在生成的pdf文件显示中文等亚洲字符,还必须下载itext的亚洲字符包。
tTextAsian的官方下载地址:http://itextdocs.lowagie.com/downloads/iTextAsian.jar
  
(3) jfreechart-1.0.0-rc1.jar
jfreechart是一款免费的、功能强大的统计图生成工具,可以直接生成PNG,JPG等各式的文件。
这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。
jfreechart的官方下载地址:http://www.jfree.org/jfreechart/
   
(4) jcommon-1.0.0-rc1.jar
JCommon是一组有用的classes集合.它已经用在JFreeChart,JFreeReport与其它项目上. 这个类库包含了以下功能: 文本工具类(text utilities), 用来显示关于应用程序信息的用户界面类,布局定制管理器,一个日期选择面板,序列化工具类,XML解析器支持类.
jcommon的官方下载地址:http://www.jfree.org/jcommon/

(5) poi-2.0-final-20040126.jar
Apache的Jakata项目的POI子项目,目标是处理ole2对象。目前比较成熟的是HSSF接口,处理MS Excel(97-2002)对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象,你可以控制一些属性如sheet,cell等等。
直接调用poi包的不是ireport,而是jasperreport。
poi的官方下载地址:http://www.apache.org/dyn/closer.cgi/jakarta/poi/

这些是用来制作报表用的包,所以可以用最新的版本来代替原有包。但是务必保持与项目中的包一致,因为很多开源的项目都不向下兼容。(例如jasperreport)


三、制作jrxml、jasper


3.1 选择语言
Tools->Option->General->Language
3.2 连接数据库
资料来源->连结/资料来源
如果要使用mysql以外的数据库,要保证jdbc包在环境变量里。放到iReport-0.5.1/lib 下也可以。name相当于一个JNDI。添好后点击test按钮如果显示成功就可以执行下一步了。
3.3 新建一个Report
定位可以控制报表是横向的还是纵向的。Portrait是纵向,Landscape是横向。
边距是可以调整的。

3.4 基本域
title域用来放报表的总标题
pageHeaher域顾名思义页头
columnHeader域是用来放static text的,也就是不循环的部分。
detail域是用来放text field的,也就是循环部分。
pageFooter域是用来放本页的统计参数的。
summary域是用来放整个表的统计参数的。

可以直接调整每个域的长度,也可以通过Band properties来调整。当然总长度是不会超过页面的原长。

3.5 报表查询
3.5.1 为报表添加SQL查询语句
资料来源->报表查询
在Report SQL query里填写SQl语句。如果语句正确,在下面的field里就会显示正常的表字段。

3.5.2 为报表添加动态字段
预览->报表字段
把fields里的字段直接拖到报表上就行了。

3.5.3 为SQL语句添加参数
预览->报表参数
在parameters里新增一个参数
paratemeter name 是参数名,在SQL语句里写成"$P{参数名}"
paratemeter class type里选择参数类型。
注意:如果是int型的数据,最好在报表字段里将该字段的Class type改成java.lang.String型的。
另外一种办法,不管该字段原来是什么数据类型,直接在paratemeter class type里选择java.lang.String类型,然后在Default value expression 填写"Integer.toString(整数)"。

3.5.4 添加报表变量
预览->报表变量 $V{变量名}

3.5.5 处理字体
3.5.5.1 基本设置
选中字段->右键->properties->font(双击也可以)
Report font 选择全局的字体(仅限于该报表)
Font name 选择在ireport里面显示的字体
Pdf font name 选择在pdf里面显示的字体
Rotation 选择内容是否旋转(很有用的选项)
PDF Encoding 中文要用UniGB-UCS2-H,外部字体要选Identity-H

3.5.5.2 选择外部字体
第一步 先在Pdf font name里选择External TTF font,然后在下面的Ture Type font里选择外部字体,当然要用的外部字体放在iReport-0.5.1/fonts目录下面。
第二步 在web项目的WEB-INF/classes/下面放要用到的外部字体,才能在程序里正常显示。

3.5.5.3 设定该报表的全局字体
预览->报表字型

3.6 编译jrxml
建立->编译
编译后生成一个后缀名为jasper的binary文件,可以直接给程序调用。


四、web项目应用

 

4.1 jsp输出PDF报表

4.1.1 需要放到项目里的包
itext-1.3.1.jar
iTextAsian.jar
jasperreports-1.0.1.jar

4.1.2 输出PDF注意事项:

4.1.3 jsp输出PDF的例子

<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<%@ page import="net.sf.jasperreports.engine.JasperFillManager" %>
<%@ page import="net.sf.jasperreports.engine.JasperPrint"%>
<%@ page import="net.sf.jasperreports.engine.JRException"%>
<%@ page import="net.sf.jasperreports.engine.JasperRunManager"%>//pdf

<%
   String rowid = "1";//初始化变量
  
   Connection conn= DriverManager.getConnection("proxool.test");//从数据源连接数据库
  
   //装载jasper文件application
   File exe_rpt = new File(application.getRealPath("/reports/test.jasper"));
  
   //rowid就是iReport的变量$P{rowid}的名称
   Map parameters = new HashMap();
   parameters.put("rowid",rowid);

   try{
    // fill
    JasperPrint jasperPrint = JasperFillManager.fillReport(exe_rpt.getPath(),parameters,conn);
   
    // 生成pdf
    byte[] bytes = JasperRunManager.runReportToPdf(exe_rpt.getPath(),parameters,conn);
  
    response.setContentType("application/pdf");
    response.setContentLength(bytes.length);
    ServletOutputStream ouputStream = response.getOutputStream();
    ouputStream.write(bytes,0,bytes.length);
    ouputStream.flush();
    ouputStream.close();
   
    conn.close();
}catch(JRException ex){
    out.print("Jasper Output Error:"+ex.getMessage());
   }

%>

4.2 jsp输出EXCEL报表

4.2.1 需要放到项目里的包
jasperreports-1.0.1.jar
poi-2.0-final-20040126.jar

4.2.2 输出excel要注意的:
(1) 输出excel报表必须fields的边界刚好填充满整个页面,不然会有大量的空白出现。
(2) 删除记录最下面的空行需要加上参数
exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE);
(3) 删除多余的ColumnHeader需要加上参数
exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,Boolean.FALSE);
(4) 在ireport里给fields加上border,那输出的excel就会有很黑的边框,跟excel默认的灰度边框就会很不协调。但是如果不加border,在输出的excel里就不会显示每个表格的边框。
解决方法是:
第一步 在选中字段->右键->properties->Common->Transparent 打上勾。
第二步 在输出的jsp页面加上参数
exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,Boolean.FALSE);

4.2.3 jsp输出EXCEL的例子
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<%@ page import="net.sf.jasperreports.engine.JasperFillManager" %>
<%@ page import="net.sf.jasperreports.engine.JasperPrint"%>
<%@ page import="net.sf.jasperreports.engine.JRException"%>
<%@ page import="net.sf.jasperreports.engine.JRExporterParameter"%>//excel
<%@ page import="net.sf.jasperreports.engine.export.JRXlsExporterParameter"%>//excel
<%@ page import="net.sf.jasperreports.engine.export.JRXlsExporter"%>//excel

<%
   String rowid = "1";
   Connection conn= DriverManager.getConnection("proxool.test");

   //装载jasper文件application
   File exe_rpt = new File(application.getRealPath("/excel/test_excel.jasper"));
  
   //rowid就是iReport的变量$P{rowid}的名称
   Map parameters = new HashMap();
   parameters.put("rowid",rowid);
  
   try{

    // fill
    JasperPrint jasperPrint = JasperFillManager.fillReport(exe_rpt.getPath(),parameters,conn);
   
    // excel输出
    ByteArrayOutputStream oStream = new ByteArrayOutputStream();
  
    JRXlsExporter exporter = new JRXlsExporter();
   
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
    exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, oStream);
    exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE); // 删除记录最下面的空行
    exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,Boolean.FALSE);// 删除多余的ColumnHeader
   exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,Boolean.FALSE);// 显示边框
    exporter.exportReport();
   
    byte[] bytes = oStream.toByteArray();
   
    if(bytes != null && bytes.length > 0) {
     response.reset();
     response.setContentType("application/vnd.ms-excel");
     response.setContentLength(bytes.length);
     ServletOutputStream ouputStream = response.getOutputStream();
     ouputStream.write(bytes,0,bytes.length);
     ouputStream.flush();
     ouputStream.close();
  
    }else{
     out.print("bytes were null!");
    }
   
    conn.close();
   }catch(JRException ex){
    out.print("Jasper Output Error:"+ex.getMessage());
   }

%>

4.3 jsp输出html报表
没有意义,不写。

 

五、备注


5.1 下载地址
iReport的官方网站:http://ireport.sourceforge.net/
jasperreports的官方网站:http://jasperreports.sourceforge.net/
tTextAsian的官方下载地址:http://itextdocs.lowagie.com/downloads/iTextAsian.jar
jfreechart的官方下载地址:http://www.jfree.org/jfreechart/
jcommon的官方下载地址:http://www.jfree.org/jcommon/
poi的官方下载地址:http://www.apache.org/dyn/closer.cgi/jakarta/poi/

- 作者: wudaming 2007年01月20日, 星期六 17:30  回复(0) |  引用(0) 加入博采

关于报表转载
笔者最近做的一个基于J2EE的Web项目,使用IReport与JasperReport作为Web报表的解决方案,在使用Html报表形式进行打印时出现如下问题。
    1.问题描述:使用JasperReport生成Html报表后,数据显示正确,但各种线条显示不出来(若中文显示不出来请参见文章:
iReport与JasperReport中文支持全面解决 )。
         产生原因:在生成HTML页面时JRHtmlExporterParameter.IMAGES_URI参数设置不正确,主要是图片的路径问题
         解决办法:生成HTML页面可作如下设置:
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,"/Reports/image?image=");
/Report/是图片所在目录,图片的名称为image,没有扩展名,笔记试了好久,设置成其它属性均不凑效,可将IReport生成Html时生成的px文件改名后放入/Reports/目录中。
2.问题描述:使用JasperReport生成Html报表后,使用IE打印时报表的各种线条无法打印出来
        产生原因:其实,由JasperReport生成Html时,那些线条是一个名称为px像素的图片,是内置在jasperreports包中的,在IE显示时以图片的形式显示,打印时浏览器无法打印这些图片。
解决办法:通过设置IE选项,使其可以打印背景颜色和图像,方法:工具internet选项高级打印打印背景颜色和图像,重新预览即可显示出各种线条。
3.问题描述:在使用IReport设计报表模板时,采用标准A4纸,生成Excel及PDF时显示正确,在生成HTML文件时整个报表比原来的尺寸变小好多(数据显示完整) ,所有数据都显示在一个页面上,无法分页。
        解决办法:尚未得到妥善的解决,请高手指教!

- 作者: wudaming 2007年01月20日, 星期六 17:12  回复(0) |  引用(0) 加入博采

ireport和jasperreports

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:放置组的统计或是说明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值