iReport 相关资料汇总

JapertReports&iReport的开源报表实战
本文来自CSDN博客,转载请标明出处: http://blog.csdn.net/hellopro/archive/2007/11/01/1860478.aspx
JasperReports+iReports ,  类似于CrystalReport的开源报表系统,最主要能帮助我们在设计时把数据和表示分开,帮助我们实现Web报表的分页打印,分组合计,变量的加减处理,输出的格式化,还有导出Excel、pdf等,反正用过了的人都不肯回去重新自己画html页面出报表了。
    google上有入门教程,非常容易。但一遇到复杂的报表,入门那套很快就玩不转了,如果没有中级的研究,可能又得乖乖回去用html画报表。
    首先网上有一份JasperReport收费文档, 不过老实说,这份文档收费的话显得太单薄了。



1.自定义数据源

    1.1 为什么要自定义数据源
    简单的报表,当然用不着自定义数据源。但查询复杂起来时,还死守着一条SQL写完会让SQL变得又长又难读,从来都最讨厌别人在SQL上炫技。 这时候,把查询分开执行,每个查询只负责向VO(值对象Bean)赋值若干个列,程序就会清晰很多。而且,相近的查询还可以进一步封装在一个Reporter类里,提供给报表内或者报表之间重用。更何况,有些情况根本不可能一条SQL里写完,而放在Java程序里处理却轻松自在。 
    搞定了可分解重用的数据源后,我才真正敢把JasperReports用在我们的系统上,否则,无法想象怎么维护那么多的SQL.



    1.2 自定义数据源的机制
dori.jasper.engine.JRDataSource 接口非常简单,只要实现两个方法:

public boolean next() throws JRException;
public Object getFieldValue(JRField jrField) throws JRException;


       看函数名字都知道其意义了。所幸,我们连这两个方法都不用实现,Jaspert已经有两个关于VO Bean的实现了。它们是dori.jasper.engine.data.JRBeanArrayDataSource和dori.jasper.engine.data.JRBeanCollectionDataSource
       看名字可知,一个用Array来放bean,一个用Collection 。

       很可惜如果VO有内嵌对象,也不能用$F{order.customer.name}这样的语法读取。
       另外Hibernate的HQL查询,如果返回多个对象时,每一row是Object[],只能按index而不能按名取值,也就不支持getFileldValue(field)了,hibernate.org上有折衷的方法,但都不好。

     1.3 Sample代码与解释
//封装了大量查询的reporter类
MooncakeReporter mooncakeReporter = new MooncakeReporter();
//建立VO的Map,因为需要多次执行查询,需要快速找回VO来赋值,因此采用Map.
Map map = new HashMap();
rs = mooncakeReporter.findAllVaildProduct();
while (rs.next())
{
  MooncakeVO mooncakeVO = new MooncakeVO();
  String goods_no = rs.getString("goods_no");
  String goods_name = rs.getString("name");
       mooncakeVO.setName(goods_name);
       mooncakeVO.setCode(code);



       map.put(goods_no, mooncakeVO);
}

//调用Reporter封装好的查询函数获取数据,并通过主键goods_no获得VO来赋值。
rs = mooncakeReporter.findSaleOrderByShopType("shop");
while (rs.next())
{
   String goods_no = rs.getString("goods_no");
   MooncakeVO mooncakeVO = (MooncakeVO) map.get(goods_no);
   if (mooncakeVO != null)
   {
      mooncakeVO.setShopCount(new Integer(rs.getInt("count")));
   }
}

//如此重复执行查询若干步
.....

//因为JRBeanCollectionDataSource需要Collection或者Array,把Map转化为List。
List result = new ArrayList(map.values());

//对result进行排序,通过BeanUtils的beanComparator来实现,在下一小节会讲到。
Collections.sort(result, new BeanComparator("code"));

//最后把result赋给JRBeanCollectionDataSource
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JRBeanCollectionDataSource(result));







    1.4 扩展
    1.用BeanComparator进行排序
      用map来存放的VO是没有顺序的,必须对其进行排序。 用jakata commons-beanutils的BeanComparator类,可以动态改变排序的列,比自己实现Compare()接口好。

  Collections.sort(result, new BeanComparator("code"));

     对于"Order by lastName, firstName"的情形,还可以写成这样,其中ComparatorChain属于jakata commons-collections包。

     ArrayList sortFields = new ArrayList();
     sortFields.add(new BeanComparator("lastName"));
     sortFields.add(new BeanComparator("firstName"));
     ComparatorChain multiSort = new ComparatorChain(sortFields);
     Collections.sort(rows,multiSort);



3.iReport报表的快速设计



2.<box>元素,终于不用手工划表格线了



   iReports终于出了0.41版,支持 JasperReports 0.64.



     JasperReports 0.64为什么这么重要?因为从0.63开始,JasperReports支持了千呼万唤始出来的box属性,可以像其他商业报表工具那样,设置表格的四周是否有线.而在以前,虽然人人都说神仙好,但一想起要手工划线, 还要精确的在两个field之间在留1个像素,就头皮一阵阵发麻.



     另外,新的box在excel下也表现良好,不再需要为Html和Excel制作两个不同的模版文件.




  一开始什么都不懂,对着满屏的元素,拖拉半天才把它对齐,差点就用不下去了。
       2.1 快速整理,对齐报表内的元素
      这里示范最快捷的方法:
      1.点击随便一个要对齐的元素,左边的文档结构列表里相应的report session会打开
      2.用shift键选择该session里的所有元素
      3.ctrl+shift+l, ctrl+shift+向上箭头

      原来杂乱无章的元素一下子排齐了。
      在报表里增加或删除元素后,用此法都可快速重新对齐页面。



其中第1,2步是快速批量选择所有元素,你也可以用鼠标拉框框选,或者按shift键一个一个选。
      第3步分别是左对齐和上对齐,都会向第一个选择的元素看齐。



       2.2 批量修改元素属性
       和很多网页编辑器一样,可以同时选择多个元素然后点选属性批量修改。





       2.3 iReport,UltraEdit双管齐下修改报表变量
       当变量比较多时,用Ultraedit直接Copy Paste就要比用iReport来增加filed和varible快很多。但用UltraEdit要注意以下两个问题:一是要注意Encoding,二是一个很奇怪的现象,iReport编译后,UltraEdit打开的文件第一句最左边的"



4.导出Excel文件



    刚开始导出的Excel文件叫人无比失望, 一个交得出去的Excel文件起码应该:
   1.所有的Field要撑满所在Band的高度,不要留空隙
   2.所有对象选成透明Transparent
   3.设置参数

     exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,
                    Boolean.TRUE);
     exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,
                    Boolean.FALSE);


   

5.JasperReports的一些补充    



5.1 输出GBK字符集
        

exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "GBK");



  5.2 定义filed显示的Pattern
        比如取小数后两位,财务计数法(每3位一个,号)等,如果ireport提供的pattern不爽,还可以直接改Xml文件

  5.3 Expresstion用三目运算符实现简单的if-else选择
        有些情况比如分母不能为0的判断,可以用三目运算符搞定,不一定要劳烦VO来计算。

  5.4 批量编译文件
        ireport的Plug-in里有批量编译目录下所有文件的命令









iReport+JasperReport系列文章:iReport入门和注意事项


这一系列的文章大概这样安排:前面两篇先对iReport和JasperReport进行简单的介绍,目的是把值得注意的地方提一下,免得后来者少走弯路。后面的几个文章将详细介绍一个使用Struts+Hibernate+Spring+iReport+JasperReport+Oracle联合报表(两个父子表联合)的设计过程,以及交叉表的设计过程。

    下面先是iReport的简单介绍,希望很多地方能通过一两句话就减少你大半天的摸索。


第一节.准备工作

    首先要做的事情,是到官方网站http://ireport.sourceforge.net下载最新版本的iReport,目前我用的是iReport-1.3.1-windows-installer.exe,好象现在已经出了1.3.2。下载后和普通的软件一样点下一步安装,这些就不用多说了。

    安装完毕后第一次打开时可能菜单会出些乱码,在Options->选项->general->语言,选择最上面的中文(中国),如果还不行的话就重启一下iReport一般都没问题了。



第二节.创建报表

    可以通过文件->报表精灵按照提示一步步来新建一个报表,速度相当快,但那样能选择的样式比较少,而且往往不能符合我们的需求,到时候改起来也很痛苦。所以我主要介绍的是从零开始自己来设计的过程。

    首先开启新档,填上报表名称、选好尺寸,如果要横向报表的话在“定位”那里选择“Landscape”。如果怕出现中文乱码问题,在i18n->XML编码,填上GB2312。其它的根据需要改改,然后OK。

    新建的空白报表分为八个部分,具体每个部分的作用我就不多说了,网上的文章大把,找来看看,大概了解一下就可以。



第三节.连接数据源

    以Oracle数据库为例。(因为在iReport里不管用什么作为连接,如jdbc,JavaBeans还是Hibernate等,生成的报表文件都是一样的,应用到项目中只要字段名对上号,用什么方法填充都可以。所以为了简单起见,建议这里用jdbc就行。笔者开始时为了Spring Loading Hibernate Connection作为连接花费了不少时间才成功,白费劲)

    1. 添加Classpath。在Options->Classpath,,然后Add JAR,把ojdbc14.jar添加进来。

    2. 连接/资料来源。在Data->连接/资料来源,然后new。随便填上Name,在Type of Connection选择DataBase JDBC connection,其它的填写如图3.1所示。记得有空把Sava Password的勾给打上。最后点击Test出现成功提示就可以Save了。


(图3.1)

    3. 设定动态连接。在Data->设定动态连接,选择刚才填写的Name,点OK即可。

    4. 报表查询。在Data->报表查询,填上查询的SQL语句,如图3.2,下面能出现字段名和字段类型就没问题。




(图3.2)


第四节.设计报表

    1. 画线。如果需要画线,就选中该字段,右击->属性->Border,建议每个字段的左边和下边画上线,最后一字段就左边、下边和右边都画上线,这样就不会看上去两根线重复。

    2. 自动变量。如果需要增加一个自动增加的序号,可在预览->报表变量,随便起个名字,变量类型选择java.lang.Integer,Caculation type选择Count,Reset type选择Report,其余的默认,完了以后把该变量拖拉到你喜欢的位置设计下就OK了。(如图4.1)




(图4.1)

     3. 自动换行。如果不处理一下,有些字段的内容太长了就会显示不全。选中该字段,右击->属性,在Text Field把Stretch with overflow勾上。同时把该行所有的字段选上,右击->属性,在Common的Stretch Type选择Relative to tallest object。(如图4.2)




(图4.2)

    4. 待补充。

    还有很多细节,其实多用用就会熟悉了。



第五节.预览

     点击建立,选择JRViewer预览,然后使用动态连接执行报表就可以了





ireport + jasper使用笔记
还没发表过文章,把以前我做的笔记拿出来感觉一下,写得不成字句,没用过的话肯定读不懂。

     图形化页面设计工具,使用过两个月,感觉她在设计页面上缺陷很多,经常不能达到预期的效果,当然也可能是我还没有找到解决的办法,不过她的自动分页、数据统计功能非常强悍。


1.把jasperreport.jar包放到JDK/lib下,把JDK的Tools.jar和数据库驱动包放到iReport/lib下;如果iReport/lib下没有iTextAsian.jar包,要下载。

2.将jasperreport.jar包放到应用程序的classpath下。

3.找不到url、不能load的原因:程序中数据库连接错误;程序中参数类型与iReport中定义的参数类型不一致;路径确实不对;iReport中的问题;

4.一定要把Jasperrreport引入应用程序,修改web.xml文件。

5.Map.set(…..)这里set 的是Object类型,否则将会包错:cann’t load url …..

6.$P{sqlWhe}只能用于类似PreparedStatement参数绑定, $P!{sqlWhe}可替换Sql的任意部分.

7.控制某元素或某部分(Bands)是否显示:在对应的print when expression输入返回Boolean类型的表达式,例如:new Boolean($F{quarter} == new Integer(4)),当第四季度时才显示才Band。

8. 在iReport里连接数据库。点 或 资料来源—连接/资料来源—new添写数据库连接信息,连接类型选JDBC连接,其他选项根据系统配置填写。然后点击“test”,将会显示测试结果。

9. 写查询语句:资料来源—报表查询,输入静态SQL语句(没有引用参数);

10.    引用参数、字段、变量:参数是在应用程序中定义的一个有值变量,引用形式为$P{parameters};字段就是数据表中一个字段,引用 $F{field};变量是在iReport中定义的,引用为$V{variable}。

11.    定义变量:在此只举个例子,比方想计算报表中人员列的总额。点快捷方式***----Variables---新增,Variable name处填写personTotal,变量类型选Integer,计算类型选Sum,Reset type处选报表,变量表达试写$F{person_num}(对此列进行总数统计),初始值添new Integer(0),最后再引用这个变量$V{personTotal},这样就完成对人员列的统计。

12.    所下载的jasperReport一定要与自己使用的iReport版本相匹配

13.    编译过程其实就是把jrxml后缀的文件生成jasper后缀的文件,程序要用到的是jasper文件。

IReport+Mysql制作分组报表
Step1 到iReport官方网站下载iReport软件包,有两种类型下载,其中一种带有源码包,建议下载带有源码的包,我下载的是0.41版。

Step2 解压软件包到某个目录D:\Ming\Programs\iReport.  在这个目录下创建一个startup.bat文件内容如下(需要做响应改变):
  @echo off
  set JAVA_HOME=d:\j2sdk
  set ANT_HOME=D:\Ming\Programs\ant
  set IREPORT_HOME=D:\Ming\Programs\iReport
  rem %ANT_HOME%\bin\ant javadocs
  %ANT_HOME%\bin\ant iReport

Step3 以后双击这个文件就可以启动iReport。

Step4 到MySQL官方网站下载MySQL Connector/J 3.1,这是一个Mysql的JDBC驱动包,为了支持连接mysql5.0。解压这个包,把mysql-connector-java-3.1.8-bin.jar放到iReport的lib目录下。把原来的的mysql-connector-java-3.0.8-stable-bin.jar删除。

Step5 启动mysql服务,重启iReport。

Step6 在iReport的Datesource菜单Connections子菜单里建立JDBC数据连接。
  Name: report   (注:随便一个名称)
   JDBC Driver: com.mysql.jdbc.Driver
   JDBC URL: jdbc:mysql://localhost/report
   Server Address: localhost
   Database: report  (注:mysql的一个数据库)
   User name: root (或者其他用户名)
   Password: 密码

Step7  在report数据库里创建表groups,共5个字段:id,Year,Month,Day,Hour,Data都是Integer类型。Id是自增长类型,作为主键。并插入一些数据。我们分别按Year,Month,day分组,显示Data值。

Step8 新建一个包表并且保存,Datasource |Report Query为报表添加SQL语句:
   select * from groups order by Year,Month,Day,Hour

Step9 为报表添加3个组:Year,Month,Day。添加方法:点击工具栏的Groups按钮,New,跳出的对话框中,设定(Year group举例): Group Name:Year

Group Expression:$F{Year}

此时报表的页面出现Year Header。

Step10 在报表中填入标题,单击T工具栏按钮,在报表中的Header栏中拉一个框出来,右键,选择property修改内容和字体。与此类似,在columns栏中添加5个框,分别是"年","月","日","时","数据"。并用直线把他们分开。参考附图。

Step11 在报表中填入分组数据的Field。添加方法,以Year为例,点击工具栏的F按钮,在"年"列,Yeargroup行对应的地方,拉出一个Field框,右击选择属性,在TextField标签里修改两项内容:TextField Expression Class:java.lang.Integer。TextField Expression:$F{Year}。

Step12 在报表中填入记录数据。在Detail行,"时","数据"列分别拉两个Field框,修改TextField标签里面的内容与Step11类似。

Step13 建立报表和数据源的连接。选择菜单:Build|Set Active Connection。

Step14 点击Run Report With connection。

1.设计图


2. 预览图





iReport & JasperReport配置及用户简明手册- -

                                      

关于iReport和JasperReport的简明手册

By Gem 伍子轩



1安装

1.1 iReport的安装

iReport直接解压后,将J2SDK\lib目录下的tools.jar拷贝到iReport\lib目录下,然后在iReport目录下运行iReport.bat即可。
需要注意的是tools.jar的版本必须要与本机安装的jre一致,也就是说,如果系统安装的是jre1.4.2就必须用jdk1.4.2的tools.jar。

1.2 JapserReport开发(运行)环境的搭建

JasperReport的开发环境必须要导入以下所有包:

1.  JasperReport包,如jasperreports-0.6.1.jar;

2.  Aparche Common包,包括logging、digester、beanutils、collections、logging-api;

3.  iText包,包括itext-1.1.jar和iTextAsian.jar(用于输出中文字符到PDF文件)

以上所有包(除了iTextAsian.jar)都已经包含在iReport\lib目录下。

2 开发流程

用iReport可视化编辑生成的文件是jrxml文档,这是一种xml文件,记录了一份report的详细信息,我们可以直接用写字板打开它编辑,iReport就是一个方便我们生成和编辑jrxml文件的工具,它也可以很方便地将jrxml文件编译成jasper报表文件。

jrxml文件通过Jasper编译之后就变成了jasper文件,这份文件才是真正在程序中调用生成报表的report文件。

但是有一点要注意的是,jasper的各个版本编译出来的jasper文件并不兼容,就是说用0.6.1版编译出来的文件用0.6.4版调用是会出错的,而iReport自带的Jasper版本是0.6.1,而jasper的最新版本是0.6.4。所以为了保持通用性,我建议只用iReport来开发编辑jrxml文件,而不编译成jasper文件,在我们的打印报表程序中再即时编译一次。虽然这样效率可能会低了一点,但是保证了不同版本的兼容性。

在我们的程序中,要调用Jasper的话,首先要得到一个数据库的Connection,形如:Connection con = ...

需要往JasperReport传参数的话只需要新建一个Map,以参数名作为key,需要传入的对象作为value,譬如:

Map props = new HashMap();

      props.put("name", new String("name"));

需要多个参数只需分别put进Map里去就可以了。

JasperReport有如下几个主要的Manager:

JasperCompileManager
将jrxml文件编译成jasper文件或JasperReport对象

JasperFillManager
从数据源中获取数据并填充jasper文件或JasperReport对象,产生JasperPrint对象

JasperPrintManager
将JasperPrint对象直接输出到打印机打印

JasperExportManager
将JasperPrint对象导出成PDF或HTML文件(或流)

JasperRunManager
运行一个jasper文件或JasperReport对象并输出到PDF或Html文件(或流)中,我的理解是等于集成了JasperFillManager和JasperExportManager的功能


对于上述对象的详细说明请参阅JasperReport的文档。

例程:

例程:

public static void main(String[] args) {

    try {

      Class.forName("org.gjt.mm.mysql.Driver");

      Connection con = DriverManager.getConnection(

          "jdbc:mysql://wes:3306/umpdb?useUnicode=true&characterEncoding=GBK", "root", "elite");

      File f1 = new File("Account.jrxml");

      File f2 = new File("Contact.jrxml");

      JasperReport main = JasperCompileManager.compileReport(f1

          .getAbsolutePath());

      JasperReport report = JasperCompileManager.compileReport(f2

          .getAbsolutePath());

      Map props = new HashMap();

      props.put("subreport", report);

      JasperPrint print = JasperFillManager.fillReport(main, props,con);

      //JasperPrintManager.printReport(print,true);

      JasperExportManager.exportReportToPdfFile(print, "a.pdf");

      //JasperRunManager.runReportToPdfFile("Account.jasper", "a.pdf", props, con);

    } catch (ClassNotFoundException e) {

      // TODO 自动生成 catch 块

      e.printStackTrace();

    } catch (SQLException e) {

      // TODO 自动生成 catch 块

      e.printStackTrace();

    } catch (JRException e) {

      // TODO 自动生成 catch 块

      e.printStackTrace();

    }

  }

3 注意事项

1.iReport中新建中文报表的时候记得要输入XML编码GB2312。

2.iReport中定义中文字体的时候,要选择PDF Font Name为STSong-Light(宋体)、MHei-Medium(黑体)、MSung-Light,在PDF Encoding中选择GB-UCS2-H(Chinese Simplified),否则输出到PDF时会乱码。

3.用Report SQL查询之后,可能会出现某些字段没有自动建立Field,就需要在Field中手动定义了。





jasperreport和ireport应用
由于公司的项目需要这几天一直在研究jasperreport和ireport,到现在已经研究了一段时间了,在学习过程中遇到了一些问题同时也学到了一些技巧,特做小文以享于他人.

1。工具简介

      jasperreport和ireport都是开源软件,可以免费下载。

ireport使jasperreport的一个可视化设计工具,里面集成了一些画图工具和数据库的操作,用ireport做出来的是一个jrxml文件也可以在里面直接编辑此文件(比较麻烦)。经过运行编译后生成jasper文件,这个文件是我们需要的东西,将来我们做报表读取的就是这个文件。工具的其他一些东西像下载地址之类的网上到处都是,在此就不细说了。下面我就把我这段时间遇到的问题在这做一个总结。

2。用ireport遇到的一些问题

      (1)解决里面的中文问题:

              在pdf里面不能显示中文

              解决方案:

                 1。将itextasian.jar下载下来(google一搜就有)放到  ireport目录底下的lib文件夹下即可。有人还说要再放一个itext.jar到

lib目录下,但是在我的应用过程中发现不放此文件也可以。

                 2。将每个文本域属性当中的PDF font name改为STSong-Light并且将PDF encoding里面的设置改为UniGB-UCS2-H (Chinese Simplified),此时应该差不多了。

       (2) 解决IE里面的斜线问题

            用ireport画的斜线无法在IE里面显示(因为html本身无法支持斜线)

            解决方案:将需要显示斜线的地方做成图片,然后利用image控件加载图片即可

          (3)解决IE里面无法显示的问题

                 在ireport里面画出的图表无法在ie里面显示

                 解决方案:在Ireport里面画图的时候不要用直线工具,里面的线全部用static text文本框的border画出。也就是说,里面的图表全部都是用文本框堆积成的。切记:图表里面的所有元素都不能交叉,如果有一点交叉或重叠,在IE里面都是显示不全的。

3。应用时常见的几种方式:
       由于html自身的局限性,以及html显示的问题,现在在网络上传输的打印很多都采用pdf格式输出。jasperreport对pdf做了很好的支持!
       个人根据需要可以改写jasperreport的代码,以使之更好的为自己服务。

     1.可以把数据放到map中传递到pdf打印页面(一般适合类似票据打印)   

        Map parameters = new HashMap();//参数

        通过把map输出到ireport模板中,得到要打印的票据

     2.可以把结果集放到collection中,这样想打印什么都可以了!

     3.剩下的就是写sql了,通过map把参数传递过去,利用参数就可以写要查询的结果集了。

注:在ireport通过查询语句取结果集的时候发现定义的参数顺序和ireport生成模板的顺序不一致,这样在sql中如果条件是(a,b,c)结果它把参数的顺序写成了(b,c,a)或者什么的。不知道这是不是ireport的bug。



JasperReport 学习之路
最近工作中用到报表,而我在学习JasperReport的过程中遇到了很多问题(主要是国内的资料太少了),网上很少找得到,在此我就把我找到的一些资料和大家共享,希望能对大家有所帮助。
1、JasperReport和iReport的资源,最新版本可以到下面官方网站得到

iReport官方网站:
http://ireport.sourceforge.net
JasperReport官方网站:
http://jasperreports.sourceforge.net

2、安装
1)、JDK的安装,并配置JAVA_HOME
比如我的JAVA_HOME路径如下:
JAVA_HOME  D:\Program Files\j2sdk1.4.2_03

2)、由于中文的问题,所以还需要下载:itext-1.02b.jar和iTextAsian.jar包
下载地址:http://itext.sourceforge.net/downloads/iTextAsian.jar
并在CLASSPATH中设置
例如我的CLASSPATH如下:
CLASSPATH
E:\Program Files\Apache GroupTomcat4.1\webapps \estreport\WEB-INF\lib\itext-1.02b.jar;E:\Program

Files\Apache GroupTomcat 4.1\webapps\ estreport\WEB-INF\lib\iTextAsian.jar;E:\Program Files\Apache

GroupTomcat 4.1\webapps \estreport\WEB-INF\lib;D: \ools\iReport0.2.3\lib

3)、iReport的安装iReport只要解压就OK,如果没有安装Ant,可以直接在iReport下的noAnt目录下,
运行startup.bat就可以了,这样iReport就可以启动了

4)、JasperReport
Jasperreport不需要任何配置,你只需将下载以后的jar包放到classpath下即可
5)、数据库的JDBC驱动包
加入到CLASSPATH中

3、详细资源
iReport官方提供了一些关于iReport视频,对于初学者很有帮助:
地址:http://ireport.sourceforge.net/docs.html

JasperReport官方提供的使用指南
地址:http://jasperreports.sourceforge.net/tutorial/index.html

JasperReport提供的一些例子:
地址:http://jasperreports.sourceforge.net/samples/index.html

4、常见问题
1)、iReport中提示框输入中文是不能正常显示,请将iReport下lib中的这个包删除tinylaf.jar
2)、在iReport中运行报表时如果出现乱码问题,请检查itext-1.02b.jar和iTextAsian.jar这两个包是否加到CLASSPATH
3)、在jsp或servlet高度报表时出现乱码或不显示,请检查你在报表设计过程中所设置的字体及其编码
比如:pdfname、pdfencoding
5、下面是两个调试例子
Servlet:
import javax.servlet.*;
import javax.servlet.http.*;
import dori.jasper.engine.*;
import java.io.*;
import java.util.*;
import java.sql.*;

/**
* @author Administrator
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public class TestReport extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Connection conn = null;

try {

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
conn =
DriverManager.getConnection(


"jdbc:microsoft:sqlserver://192.168.0.10:1433;DatabaseName=am;user=sa;password=sa");

ServletContext servletContext =this.getServletContext();
File reportFile = new File(servletContext.getRealPath("test/iteminfo.jasper"));
Map parameters = new HashMap();
Integer i=new Integer(8);
parameters.put("pjId", i);
byte[] bytes =
JasperRunManager.runReportToPdf(
reportFile.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();
} catch (JRException jre) {
System.out.println("JRException:" + jre.getMessage());
} catch (Exception e) {
System.out.println("Exception:" + e.getMessage());
}

}

public void doPost(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {

doGet(request, response);

}

}



1 首先看看

http://plateau.sicool.com/main.html
上的三篇ireport和Jasperreport整合开发报表向导(一)(二)(三)
看完理解并自己运行一下,OK,你入门了


2 去找一份TheJasperReportsUltimateGuide.1.0.pdf

看完之后你就能了解JasperReport生成的基本过程及原理,里面也回答了很多
刚接触这个报表工具会产生的疑问

3 论坛上的经验

Java研究的论坛上有很多关于JasperReport及iReport的经验及问题解答,所以
大家在提问的时候不妨多翻翻论坛上的帖子,很多你要问的问题都能找到答案,
还有很多宝贵的经验
当然说起论坛最正宗还是
https://sourceforge.net/projects/ireport/
https://sourceforge.net/projects/jasperreports/
大家可以到sourceforge.net去看看,论坛上提供搜索,也能翻到很多东西,顺便
练练你的英语

4 学习JasperReport的Samples

解压jasperreports-0.5.0-project.zip 后目录jasperreportsdemosamples
下的例子,看看这些例子是你关于这个报表工具提升能力的最好最快的方式,
我会在下面贴上各个例子的简要说明。
要运行sample下的例子,首先你要安装ant,并设置好环境变量
如ANT_HOME    值为   D:Installant161
然后到dos方式下,到某一个sample的目录,比如到
jasperreportsdemosamplesalterdesign目录下
运行 ant 则会编译报表文件
运行 ant view 则会展现报表

5 比上面更好的资料是什么?

就是JasperReport的源代码,看懂源代码,JasperReport
就是在你脑子里的了,你想干什么都行了,优化代码,覆写,继承他的类,实现个性
化的功能,甚至你可以参考他的思想,升华一下,做一个你自己的报表

1. alterdesign

该例子演示了报表编译后,在报表展现的时候如何动态的控制其中的元素
比如让某一个矩形变色或其他

2. antcompile

演示如何让 ant 来编译

3. chart

演示了如何在报表中添加图像,JasperReport是用Scriptlet的方式
往报表中添加图像,而Scriptlet是调用也是开源的jfreechart的Api来
生成图形,去jfreechart看一下,该工具能的图形生成能力也很强

4. datasource

演示了如何在报表中使用各种数据源,能够使用beanarray
beancollection,也可以用自定义的数据源,只要继承了JRDataSource的
两个接口,这个能给用户提供非常大的灵活性,报表的数据不用局限于一
条Sql语句,也可以使用存储过程,对生成报表中的数据也可以排序,二
次检索,等等

5. fonts

各种字体的演示

6. horizontal

演示了水平分栏的报表,演示报表中分了三栏,其中还用到了
textFieldExpression,就像if语句的效果来选择输出的内容

7. hyperlink

演示了各种样式的链接

8. images

演示了如何在报表中加入图像以及图像的显示方式

9. jasper

演示了分组分栏的报表,演示中用了2次group

10. jcharts

演示了调用另一个开源的API jcharts来往报表中加入分析图形,原理同
上chart,如果jfreechart都还不能满足你分析图形的要求,那到jcharts
里找找看吧,说不定有

11. landscape

演示横向的报表

12. nopagebreak

演示比如在IE中不分页的方式打印出报表的内容,通过这个演示也可以
了解报表输出如何配置参数

13. noreport

演示了如何直接通过java程序生成JasperPrint对象来输出

14. noxmldesign

演示了如何直接通过java程序生成JasperDesign对象来动态的生成报
表,根据这个例子,用户可以作出自定义选列的报表,当然比较麻烦,
而且肯定自己要补充他的API库
(JasperReport真是强大啊,呵呵)

15. pdfencrypt

演示了pdf的输出方式,可以给pdf文件加密码,其实就是pdf输出方式的
参数配置,具体有那些参数可配置,去看看API吧

16. printservice

演示了如何直接打印报表

17. query

演示了如何让查询的sql动态起来,比如你可以通过一个Jsp页面传
报表的sql的where条件,order条件,甚至整个sql语句

18. rotation

演示了文字纵向显示的报表

19. scriptlet

演示了如何继承JRDefaultScriptlet,并加入自己的处理语句,这个功能
可是很强大的哦,看看这些接口
beforeReportInit() afterReportInit() beforePageInit()
afterPageInit() beforeColumnInit() afterColumnInit()
beforeGroupInit(String groupName)
afterGroupInit(String groupName)
看看这些名字就知道你能完成那些功能,比如显示一列数据后,马上跟
上该列数据的分析图形,当然你也可以加上自己的方法并在报表中调用

20. shapes

演示了JasperReport中自带的图形,及能配置的参数
当然你也能继承或者覆写JasperReport中的Api生成你要的图形,

21. stretch

演示了如何处理报表中数据拉伸以及带来周围的线及框的拉伸,
你能了解到虽然黑框式表格不是JasperReport中缺省的展现方式,
但在JasperReport中不难实现

22. subreport

演示了子报表,还告诉你一个报表中可以有n个子报表,子报表中还可以
嵌套子报表

23. tableofcontents

演示了如何生成一个有目录的,复杂的报表

24. unicode

演示了各种 字符编码

25. webapp

演示了如何把报表放到一个JavaWeb项目中,可以用Jsp Servlet
applet,笔者做了一个有参数页面,可以选择html pdf applet
输出方式的报表,有兴趣的 我可以在后面放上代码




本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hellopro/archive/2007/11/01/1860478.aspx

你可能感兴趣的:(sql,mysql,ant,jdbc,Excel)