1. JasperReport介绍

    JasperReport
是一个开源的Java报表引擎,它不像任何的表格工具,例如科瑞斯特尔报表是基于Java的,没有自己的表达式语法。JasperReports有提供丰富的情节到显示器上,到打印机,或转换成PDF,HTML,XLS,RTF,ODT,CSV,TXT和XML文件的能力。JasperReports是一个Java类库,须要停放到Java应用程序中。JasperReport的表征如下:

  • 富有灵活的表格布局;
  • 可以用文字或图片显示数据;
  • 开发人士可以通过多种格局提供数据;
  • 可以承受来自多个数据源的数额;
  • 可以转移水印(水印是那般的办法被放置在主图像的副图像);
  • 可以生成子报表;
  • 可见导出报表到多种格式的。

贾斯帕(Jasper)(Jasper)Report报表开发(一)–原理介绍,jasperreport报表

澳门金沙国际 1

java学习之JasperReport踩坑,javajasperreport

上面进入正题,来介绍下前日的猪脚JasperReport或者叫它ireport亦或jasperstudio,当然前面多个是它的可视化工具。

贾斯帕(Jasper)Report是个怎么样东西?

那货其实在国内用户也不少,是个国外的制品,而且可以说在JAVA报表领域使用是一对一的广阔。

本人当年恰恰接触这几个表格的时候仍旧格外的欣赏的,最重点的是它的可视化工具,真的是让自家进退两难够,竟然可以经过简单画图的方法来统筹JAVA报表。说起画图就是足以由此可视化的工具,让我们可视化的设计报表模板,并且它匡助出口的文件格式很广泛,蕴含EXCEL、WORD、PDF、HTML、XML、CSV等等。

看起来是否很强大,四回规划,很多次复用。当然强大得的东西,往往都有两面性,那不就被自己赶上了,折磨了自己一定长的时日,后文子禽详细描述的。

贾斯帕(Jasper)Report的大胸弟

面前我说,Jasper(Jasper)Report或者叫它ireport或jasperstudio,其实那是不标准的。二哥ireport、小弟jasperstudio其实是jasper的助手视觉设计工具,你不用它也能设计jasper报表,多写点XML白。5.5往日这几个工具叫ireport,5.5未来乘机三哥jasperstudio的落地,ireport就被统统代表了,其实那三个工具基本上是如出一辙的,一奶同胞。

具体的做事流程:

①首先贾斯帕(Jasper)(Jasper)会获取须要输出的格式信息的xml文件,然后从xml文件中编译出.jasper类型的公文,然后这几个jasper文件能够在大家的应用程序中被加载生成最后的报表。有没有很熟练的觉得,是的,这点和java很像,都亟待编译一下。

下图,就是ireport的操作界面,jasperstudio类似,就不贴了,我们可以活动百度下。

澳门金沙国际 2

上图每种档次的band不难介绍一下。

(1)Title
band:title段只在全部表格的率先页的最上面部分显得,除了第一页以外,不管报表中共有多少个页面也不会再次出出现Title
band中的内容。

(2)pageHeader Band:顾名思义,pageHeader
段中的内容将会在方方面面表格中的每一个页面中都会产出,突显在职责在页面的上部,假诺是报表的首先页,pageHeader
中的内容将显得在Title
Band上边,除了第一页以外的此外具备页面中pageHeader中的内容将在呈现在页面的最上方。

(3)pageFooter Band:展现在所在页面的最下端。

(4)lastPageFooter Band:突显在最后一页的最下端。

(5)Detail Band:报表内容段,在这一个Band
中规划报表中需求再一次现身的内容,Detail 段中的内容每页都会现出。

(6)columnHeader Band:针对Detail
Band的表头段,一般意况下在这些段中画报表的表头。

(7)columnFooter Band:针对Detail Band的表尾段。

(8)Summary Band:表格的说道段,出现在整整表格的最终一页中的Detail band
的末端,一般用来总结报表中某一个或某多少个字段的合计值。

地点就是可视化的工具的整个,其实怎么用很简单,上手摸索下就会了,既然是踩坑实录,那些当然不是根本,不说了。

代码中的应用

那是自身总括的手续,可能描述的不是很标准,大家集合下

①安排模板,生成JRXML文件,↑↑上边的可视化工具设计你所须求的沙盘样式

②编译模板,JRXML编译成贾斯帕(Jasper)文件,就像是java中的.java和.class文件一律,程序中运作的内需是*.jasper的二进制文件。

实际这一步可以一贯用ireport编译生成.jasper,当然也可以在运转时通过jasper程序编译。然而提出一旦在先后中编译的话,jasper版本最好和ireport或者jasperstudio的版本一样。

③实践报表(数据填充到报表)

1、 加载模板生成Jasperreport对象

2、利用JasperFillManager,生成JasperPrint对象

④说到底动用JRXlsxExporter导出类,将报表导出或者体现

加载模板

既然如此大家早就运用可视化工具生成了.jasper或者.jrxml文件了,自然是内需让程序加载它。

加载的代码,重回jasperport对象

    if (urlPath.endsWith(".jrxml")) {
      //compile jrxml to jasper
      try {
        InputStream is = url.openStream();
        jasperReport = JasperCompileManager.compileReport(is);
      } catch (IOException e) {
        throw new BaseException("Load jasper error", e);
      } catch (JRException e) {
        throw new BaseException("The jrxml template transform to jasper file error", e);
      } catch (Throwable e) {
        log.error(e);
        throw new BaseException(e.getMessage());
      }
    } else if (urlPath.endsWith(".jasper")) {
      try {
        InputStream is = url.openStream();
        jasperReport = (JasperReport) JRLoader.loadObject(is);
      } catch (IOException e) {
        throw new BaseException("Load jasper error", e);
      } catch (JRException e) {
        throw new BaseException("The jrxml template file error", e);
      } catch (Throwable e) {
        log.error(e);
        throw new BaseException(e.getMessage());
      }
    } else {
      throw new BaseException("Invalid file!");
    }

得到报表中的数据源

那里自己利用javabean的法门获得

      JRDataSource dataSource = null;
      if (fieldValues != null && fieldValues.size() > 0) {
        dataSource = new JRBeanCollectionDataSource(fieldValues);
      } else {
        dataSource = new JREmptyDataSource();
      }

fieldValues 为数据库中拿走的pojo集合。

进行报表填写

得到jasperprint对象

Map<String, Object> parameterValue = new HashMap<String, Object>();
jasperPrint = JasperFillManager.fillReport(jasperReport, parameterValue, dataSource);

最终我们运用JRXlsxExporter导出报表

以此也是急需配备参数最多的一个地点

baos = new ByteArrayOutputStream();
exporter = new JRXlsxExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
exporter.exportReport();

完了,数据已经写入输出流中了,怎么输出自己控制,是否比其余格局代码简介很多。

真的在代码书写中Jasper(Jasper)Report有着不可能比拟的优势,种种api已经封装好。但是可能是刚刚做的太多,问题也不少。

JasperReport的问题

1、两行前的空域

假诺您利用方面的代码导出EXCEL的话,你会意识Excel的背景是反动,没了Excel一个个的小格子,那是因为jasper默许背景为白色,那样在导出其余格式时也好做到兼容,当然当我们导出EXCEL并不须要。只必要丰裕上边两行就足以化解。

      //去除两行之前的空白 
      exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE); 
      exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_COLUMNS,Boolean.TRUE); 
      //设置Excel表格的背景颜色为默认的白色 
      exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,Boolean.FALSE);

2、数据量很大,title多次写入

一经你一个Sheet数据很多,可能会碰着表头数十次打印的场所,那种状态下,你必要加上高度设置。

Field pageHeight = JRBaseReport.class.getDeclaredField(
          "pageHeight");
      pageHeight.setAccessible(true);
      pageHeight.setInt(jasperReport, Integer.MAX_VALUE);

3、Cell的花色的题目

有时候大家导出的Excel报表,须求使用Excel的函数统计,如若全都是文本格式,自然统计不了,那种情景下,我们须求利用

 //自动选择格式
 exporter.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE);

难忘,在表格设计时,菲尔德字段选用正确的档次。

4、多Sheet的问题

我上面万分简单的例子,只是一个文书中富含一个Sheet页,若是我们的急需是一个文件导出七个Sheet怎么做,别急,那些Japser早已为我们想到了。

只需求将上文中导出步骤换成上边那几个样子

baos = new ByteArrayOutputStream();
exporter = new JRXlsxExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, listJasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
//设置为true,即可在一个excel中,每个单独的jasper对象放入到一个sheet页中
exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,Boolean.TRUE);

JRExporterParameter.JASPER_PRINT_LIST,传入一个list贾斯帕(Jasper)Print的集纳,每个JasperPrint即一个Sheet页。

5、Linux下启动不报错,可是不可以导出报表

其实这一个问题也烦扰了我很久,后来在大佬的协助下才想起来问题所在,因为它抛出的常有不是个Exception,而是Error。我看到网上也有同学问这几个题材,所以贴出来。

可以用throwable捕获,就足以获得错误信息,报错:java.lang.InternalError:
Can’t connect to X11 window server using ‘:0.0’ as

杀鸡取卵办法:修改tomcat/bin/catalina.sh 加JAVA_OPTS=”$JAVA_OPTS
 -Djava.awt.headless=true”

6、大数量内存溢出和内存败露问题!!

此间须求说一下,EXCEL
03和07版的分别,03版我记得好像是只扶助65532行呢,而07版之后就大的多了,具体数字我忘了,反正不是一个数据级的。

JRXlsxExporter协理导出xlsx文件,

JRXlsExporter则是xls的公文,很好辨认,导出的工具和excel的格式一样。

下一场是内存溢出和内存败露问题,这几个自家信任玩JAVA的爱人大多都赶上过。

至于内存溢出最常见的解决办法便是增大容器的内存,扩充tomcat的内存大小,方法大家可以百度,有众多,不重复造轮子了。

那里提示下,如若你利用的是tomcat的话,windows安装版,解压缩版和Linux版的布署格局都是不一致的,需求小心下。

此地自己索要介绍的是JasperReport的章程,其实贾斯帕(Jasper)Report是对大数量有解决方案的,在很早期的本子便推出了,JRFileVirtualizer的仿真器。

其一东西是做吗用的吧,其实它会根据你设置的参数,将数据写到硬盘的临时文件上,那样解决了填充报表时内存占用过大溢出的题材。

近日贾斯帕(Jasper)Report有3个仿真器,都是用来解决那几个题目标。

分别是:

①JRFileVirtualizer

②JRSwapFileVirtualizer

③JRGzipVirtualizer

那七个仿真器又有啥样不同呢?

率先是生产最早的JRFileVirtualizer,我在测试时,当导出30W左右的多寡,就会报内存溢出,后来添加那么些后就足以健康导出了。那几个仿真器会把每一个对象生成一个临时文件存放在硬盘上化解内存占用的问题,不过因为暴发的临时文件较多,无形中增添了文件创制和删除的内存消耗,所以并不是很推荐。

//写多个文件
 JRFileVirtualizer virtualizer = new JRFileVirtualizer(2, catchPath);
 Map<String, Object> parameterValue = new HashMap<String, Object>();
 parameterValue.put(JRParameter.REPORT_VIRTUALIZER, virtualizer);
virtualizer.setReadOnly(true);

catchPath为文件缓存路径,必须实际存在,否则会报错。

JasperReport报表开发,Jasper(Jasper)Report制作报表二。下一场是JRSwapFileVirtualizer,这一个是为了化解JRFileVirtualizer的题目而生产的。那么些仿真器,只会创建一个临时文件,每个对象会占这一个文件的一片段,所以就减弱的文件创立和删除的内存消耗,其实那个也不是特地推荐。

//写单个文件
RSwapFile arquivoSwap = new JRSwapFile(catchPath, 4096, 25);
JRAbstractLRUVirtualizer virtualizer = new JRSwapFileVirtualizer(2, arquivoSwap, true);

Map<String, Object> parameterValue = new HashMap<String, Object>();
parameterValue.put(JRParameter.REPORT_VIRTUALIZER, virtualizer);
virtualizer.setReadOnly(true);

最终是JRGzipVirtualizer那一个,看到Gzip,不知晓您是否有牵连到压缩那个词汇。没错,那一个仿真器就是运用一种非凡的压缩算法,可以将内存占用压缩到二至极之一要么非凡之一来着,同理可得很神奇。

JRAbstractLRUVirtualizer virtualizer = new JRGzipVirtualizer(2);
Map<String, Object> parameterValue = new HashMap<String, Object>();
parameterValue.put(JRParameter.REPORT_VIRTUALIZER, virtualizer);
jasperPrint = JasperFillManager.fillReport(jasperReport, parameterValue, dataSource);

说了这么多,总之就是三种仿真器解决内存溢出题目,我也看了不少博客里面写利用JRFileVirtualizer,解决内存大数据问题。然后自己在此处想说,我最最最不引进应用JRFileVirtualizer仿真器,因为它不仅开创文件消耗大,还有个很严重的BUG,内存走漏!!!还有JRSwapFileVirtualizer也有那么些问题。

除此以外,必要评释的是不使用仿真器,也会有内存败露的题目,当你导出报表后,dump出堆栈消息,会意识net.sf.jasperreports.engine.fill.JRTemplatePrintText类的实例更加多,无法回收,不可以回收!!!并且最新版的japserreport
6.x一如既往存在那几个题目,在jasper的社区和Stack
Overflow存在很多如此的问题,而尚未解决方案。

此间推荐JRGzipVirtualizer仿真器,固然仍旧存在走漏问题,可是因为特殊的压缩算法,已经将内存败露问题决定在很小的限量里了,算是一种缓解的方案吗,几乎败露的内存占用缓解了九成以上。

总的看,我现在早就丢弃那种方案了,写出来也是为着后来的哥们儿少走弯路。撸了一个POI的工具类,接下去准备把具有的报表改成POI导出的主意,话说POI的大数据方案仍旧挺不错的。

上边进入正题,来介绍下后天的猪脚Jasper(Jasper)Report或者叫它ireport亦或jasperstudio,当然前面多个是它的可视…

2. 支出流程

   
贾斯帕(Jasper)(Jasper)Report完全由Java编写,可以用来在种种Java应用程序,包括J2EE,Web应用程序中变化动态内容。它首要目的是协理生成面向页面的、准备打印的文档。上边的流程图描述了一个典型的报表开发的办事流程。

 澳门金沙国际 3

    如上图所示,贾斯帕(Jasper)(Jasper)Report报表开发分为多少个阶段:

(1)设计报表

   
这一个等级是创建jrxml文件,该公文是带有报表布局定义的XML文档,可以利用贾斯帕(Jasper)Soft
Studio或iReport那二种可视化开源开发工具来创制。

(2)编译报表

   
这一品级是将源文件(*.jrxml)编译成二进制文件(*.jasper),该jasper文件可以随应用程序运行。

(3)执行报表

   
该步骤是将应用程序中的数据填充在报表模板中,即jasper文件。这一阶段将会爆发jasper打印文件(*.jrprint),该文件可以用来打印或导出报表。

(4)导出报表到所须要的格式中

   
Jasper(Jasper)Report提供了各类款式的导出格式,如:HTML,PDF,Excel等。该阶段可以导出须要的报表格式。

1. JasperReport介绍

    Jasper(Jasper)Report
是一个开源的Java报表引擎,它不像任何的表格工具,例如Crystal报表是基于Java的,没有协调的表明式语法。JasperReports有提供丰硕的始末到屏幕上,到打印机,或转换成PDF,HTML,XLS,RTF,ODT,CSV,TXT和XML文件的能力。Jasper(Jasper)Reports是一个Java类库,须要安置到Java应用程序中。Jasper(Jasper)Report的特征如下:

  • 装有灵活的报表布局;
  • 可以用文字或图表突显数据;
  • 开发人士可以经过多种办法提供数据;
  • 可以承受来自四个数据源的多少;
  • 可以转变水印(水印是那般的艺术被放置在主图像的副图像);
  • 可以生成子报表;
  • 可见导出报表到多种格式的。

1.   
贾斯帕(Jasper)FillManager:填充管理,首要的主意如下:

3. 已毕原理

    贾斯帕(Jasper)Report
Library为报表开发提供了丰硕的类库,其中变化报表并打印、导出全经过如下图所示。

 

澳门金沙国际 4

    开发流程如下:

(1)开发报表设计文本,也就是一个*.jrxml文件。

(2)使用JasperReports提供的JasperCompileManager工具编译*.jrxml文件,编译后生成一个*.jasper文件。

(3)使用贾斯帕(Jasper)Reports提供的JasperFillManager工具填充编译后的*.jasper文件,填充后生成一个*.jrprint文件。

(4)使用导出管理器JasperExportManager或者各类格式的文书导出器JRXxxExporter将*.jrprint文件导出成各类格式的表格文件。也足以应用JRViewer工具类来一向浏览报表。也可以利用打印管理器贾斯帕(Jasper)(Jasper)PrintManager来打印表格。

2. 开发流程

   
贾斯帕(Jasper)Report完全由Java编写,可以用来在各个Java应用程序,包蕴J2EE,Web应用程序中变化动态内容。它最首要目标是接济生成面向页面的、准备打印的文档。下边的流程图描述了一个天下无双的报表开发的干活流程。

 澳门金沙国际 5

    如上图所示,贾斯帕(Jasper)Report报表开发分为七个等级:

(1)设计报表

   
那几个等级是创办jrxml文件,该公文是富含报表布局定义的XML文档,可以使用JasperSoft
Studio或iReport那三种可视化开源开发工具来创立。

(2)编译报表

   
这一等级是将源文件(*.jrxml)编译成二进制文件(*.jasper),该jasper文件可以随应用程序运行。

(3)执行报表

   
该步骤是将应用程序中的数据填充在报表模板中,即jasper文件。这一阶段将会爆发jasper打印文件(*.jrprint),该公文可以用来打印或导出报表。

(4)导出报表到所必要的格式中

   
贾斯帕(Jasper)Report提供了各个形式的导出格式,如:HTML,PDF,Excel等。该阶段可以导出须求的报表格式。

       
fillReport:填充报表,多态函数,再次来到值为JasperReport,参数为报表和表格参数Map,
参数Map里包涵Parameters、DataSource等,假使是从数据库取多少还要有connection参数;

4. 相关兑现类

    在贾斯帕(Jasper)Report的支付流程中,首要涉嫌下边的这么些类:

(1)net.sf.jasperreports.engine.design.JasperDesign

    那几个类可以在贾斯帕(Jasper)Report类库内置的XML解析器对XML report
design进行分析处理将来获得\[2\]。其对应与报表模板文件在内存中的形式,即*.jrxml文件。

(2)net.sf.jasperreports.engine.JasperReport

    那个类的实例包蕴了一个经过编译的report
design对象。生成它的机会是对报表编译之后,但绝非对其填入数据的时候。编译进度中,贾斯帕(Jasper)Report须求生成一个临时的类公事,用以保存report
表明式,如变量表明式、文本、图像表明式、组表明式等等。那一个临时的Java
Source
File是被动态编译的,编译器使用的是JDK中用来推行应用程序的编译器类(compiler
class)。倘使tools.jar不在classpath中,编译进度将运用javac.exe来展开后台编译。编译后所得的字节码保存在贾斯帕(Jasper)Report类中,用来在执行期填充数据和给表达式赋值。对应二进制报表文件在内存中的方式,也就是呼应的*.jasper文件。

(3)net.sf.jasper.engine.JasperPrint

   
当一个报表已经装填好数据之后,那么些文档就以JasperPrint类的实例出现。那些类可以平昔用贾斯帕(Jasper)Report内置的viewer举行查看,也可以体系化到硬盘以备后用,或者发送到网上去。这么些类的实例是报表装填进程后的产物,它可以被贾斯帕(Jasper)(Jasper)Report类库中的导出方法导出成各样流行的格式如PDF,HTML,XML等等。

(4)net.sf.jasperreports.engine.xml.JRLoader

   
装载器用于报表生成的逐条显要阶段如编译,填充等。用户和发动机都得以使用那个类来装载所需的种类化对象如file、URLs、intput
stream等。这么些类最令人感兴趣的函数当属loadOnjectFromLocation(String
location)\[3\]。当用户拔取这几个类从指定地址装载对象的时候,该函数将第一将location解释为一个合法的URL,倘诺条分缕析战败,函数将认为所提供的location是硬盘上的一个文书名,并将准备读取它。即使在指定地点没找到文件,它将通过classpath定位一个应和于该location的资源,所有努力战败之后,将抛出相当。

(5)net.sf.jasperreports.engine.JasperCompileManager

   
那是一个与编译有关的类,利用它提供的一对编译方法,允许大家将一个报表设计文档(*.jrxml文件)编译成一个二进制文件(*.jasper文件)。其余,它也可以一贯将net.sf.jasperreports.engine.design.Jasper(Jasper)Design(*.jrxml文件在内存中的方式)对象编译成net.sf.jasperreports.engine.贾斯帕(Jasper)(Jasper)Report对象。

(6)Class net.sf.jasper.engine.JasperFillManager 

   
这几个类用来贯彻报表的多寡填充。报表填写就是为报表的数据查询提供数据库连接,给报表的参数设置值等。填充往日是*.jasper文件,经过填充后就改成了*.jrprint文件–这是一个可突显或者可导出成报表的文本。这一个类提供了众多办法来经受各样别型的report
design,能够是一个对象、文件、或输入流。它的出口结果也是比比皆是的:file、Object、output
Stream。

(7)net.sf.jasperreports.engine.JasperPrintManager

   
用于将一个*.jrprint文件已毕打印。在JapserReports中,大家可以经过那些类来打印表格,它包蕴了有着的打印成效。它提供了打印整个文档或者有些文档、显不显得打印对话框的法门。使用这一个类能够将贾斯帕(Jasper)(Jasper)Reports文档的一页作为一个java.awt.Image对象来显示。

(8)net.sf.jasperreports.engine.JasperExportManager

   
这一个管理类对分化来源和不一致去处(文件、输入输出流等)的数量提供不相同的办法。用于将可展示的表格导出成各样格式的报表文件,例如PDF、HTML、XML和其他的格式。

(9)net.sf.jasperreports.engine.export.JRXxxExporter

   
那是一文山会海的文本导出器,它们用于将*.jrprint文件导出成对应格式的报表文件。例如XSL、PDF、HTML、XML、CSV、RTF、TXT和任何的格式。JRXlsExporter、JRPdfExporter、JRXmlExporter、JRCsvExporter、JRHtmlExporter、JRTextExporter、JRRtfExporter。

(10)net.sf.jasperreports.engine.JasperRunManager

   
那个类可以直接将*.jasper文件导出成各样格式的表格文件,有时候在表格填写进程中我们不指望生成中间的net.sf.jasperreports.engine.JasperPrint对象,而直接扭转我们所需要的文档格式,例如:PDF或HTML。

3. 落到实处原理

    贾斯帕(Jasper)Report
Library为报表开发提供了增加的类库,其中变化报表并打印、导出全经过如下图所示。

 

澳门金沙国际 6

    开发流程如下:

(1)开发报表设计文本,也就是一个*.jrxml文件。

(2)使用JasperReports提供的贾斯帕(Jasper)CompileManager工具编译*.jrxml文件,编译后生成一个*.jasper文件。

(3)使用JasperReports提供的贾斯帕(Jasper)FillManager工具填充编译后的*.jasper文件,填充后生成一个*.jrprint文件。

(4)使用导出管理器Jasper(Jasper)ExportManager或者各个格式的文书导出器JRXxxExporter将*.jrprint文件导出成种种格式的表格文件。也得以应用JRViewer工具类来一向浏览报表。也可以利用打印管理器贾斯帕(Jasper)PrintManager来打印表格。

       
fillReportToFile:填充报表生成文件,多态函数,无再次来到值,参数为源文件、目的文件和表格参数Map。

5. 表格数据源

   
Jasper报表引擎得到来自数据源的数码,可以从数据库,XML文件,对象数组和聚集中的对象来赢得。前边大家介绍了运用贾斯帕(Jasper)FillManager来完毕报表的多寡填充,具体是由fillReportXXX()方法取得数据源进行填空。

(1)JDBC数据源

   
JRResultSetDataSource类关联入一个java.sql.ResultSet对象。那是当报表数量从关周密据库中提取最常用的数据源落成。假使利用java.sql.Connection传递给引擎,它首先实施有关的询问,并将该重返java.sql.ResultSet中的对象在一个JRResultSetDataSource实例。

(2)JavaBean数据源

   
JRBeanArrayDataSource类和JRBeanCollectionDataSource类已毕了可以独家包装的JavaBean对象的数组或集合。数组或集合中的每个对象都将被视为对这序列型的数据源中的一个笔录。一个一定的JavaBean属性和相应的表格字段之间的映射是透过命名约定进行。报表字段的称号必须是一样的所指定的JavaBeans的业内JavaBean属性的称呼。

(3)基于Map数据源

   
父级应用程序已经储存在内存中的java.util.Map对象提供填充数据的落到实处类JRMapArrayDataSource和JRMapCollectionDataSource相当有效。被装进的数组或集合中的每个映射对象被认为是数据源中的一个虚拟的笔录,每个报表字段的值从映射中利用报表字段名作为键提取。

(4)TableModel的数据源

   
许多客户端应用程序的多少以表格方式显得。在很多行使中广泛的须要是同意用户打印该表格格局的告知。达成类JRTableModelDataSource使生成的表格格式的Swing应用程序报告的义务。这一个类包装了一个javax.swing.table.TableModel对象。列在包装的TableModel对象足以经过她们的名字或他们的依照0索引来访问。

(5)XML数据源

   
类JRXmlDataSource是根据DOM,它应用XPath表明式来挑选XML文档数据的数据源的兑现。
XML数据源中的记录是透过XPath表明式选用的节点元素表示。字段值是由每个记录使用由字段描述(JRXML<fieldDescription>元素)所提供的XPath表明式检索。

(6)CSV数据来源

    JRCsvDataSource
代表了从结构化文本文件中查找其数量的数据源的达成,平常为CSV。字段值是正值利用他们的列索引检索。

(7)XLS数据来源于

    JRXlsDataSource
代表其搜索的Excel文件的数码的数据源的完结。报表字段映射为这几个数据源的兑现也是根据字段列索引。

(8)空数据来源

   
类JREmptyDataSource,模拟与其中虚拟空的笔录给定数据的数据源。它是由用户界面的工具来提供基本的报表预览成效,或在越发报告模板,或用于测试和调剂目标。

   

到此甘休,贾斯帕(Jasper)Report报表开发的百分之百流程和落成原理已经介绍完了,在明白了这么些之后,后边推行起来心里就要了然部分。

4. 连锁兑现类

    在JasperReport的费用流程中,紧要涉嫌下边的那多少个类:

(1)net.sf.jasperreports.engine.design.JasperDesign

    那个类能够在Jasper(Jasper)Report类库内置的XML解析器对XML report
design进行分析处理未来获得\[2\]。其对应与报表模板文件在内存中的格局,即*.jrxml文件。

(2)net.sf.jasperreports.engine.JasperReport

    那些类的实例包涵了一个通过编译的report
design对象。生成它的空子是对报表编译之后,但未曾对其填入数据的时候。编译进程中,贾斯帕(Jasper)Report须求生成一个暂时的类公事,用以保存report
表明式,如变量表明式、文本、图像表明式、组表明式等等。这些临时的Java
Source
File是被动态编译的,编译器使用的是JDK中用来实施应用程序的编译器类(compiler
class)。假使tools.jar不在classpath中,编译进度将运用javac.exe来进展后台编译。编译后所得的字节码保存在JasperReport类中,用来在执行期填充数据和给表达式赋值。对应二进制报表文件在内存中的格局,也就是相应的*.jasper文件。

(3)net.sf.jasper.engine.JasperPrint

   
当一个表格已经装填好数据之后,那么些文档就以贾斯帕(Jasper)(Jasper)Print类的实例出现。那几个类可以直接用JasperReport内置的viewer进行查看,也得以连串化到硬盘以备后用,或者发送到网上去。那个类的实例是报表装填进程后的产物,它能够被贾斯帕(Jasper)Report类库中的导出方法导出成各个流行的格式如PDF,HTML,XML等等。

(4)net.sf.jasperreports.engine.xml.JRLoader

   
装载器用于报表生成的次第显要阶段如编译,填充等。用户和发动机都可以利用这几个类来装载所需的体系化对象如file、URLs、intput
stream等。这几个类最令人感兴趣的函数当属loadOnjectFromLocation(String
location)\[3\]。当用户拔取那些类从指定地方装载对象的时候,该函数将率先将location解释为一个法定的URL,假诺条分缕析战败,函数将认为所提供的location是硬盘上的一个文件名,并将准备读取它。假若在指定地址没找到文件,它将通过classpath定位一个应和于该location的资源,所有努力战败将来,将抛出尤其。

(5)net.sf.jasperreports.engine.JasperCompileManager

   
这是一个与编译有关的类,利用它提供的一些编译方法,允许大家将一个表格设计文档(*.jrxml文件)编译成一个二进制文件(*.jasper文件)。其它,它也足以一直将net.sf.jasperreports.engine.design.贾斯帕(Jasper)Design(*.jrxml文件在内存中的方式)对象编译成net.sf.jasperreports.engine.贾斯帕(Jasper)(Jasper)Report对象。

(6)Class net.sf.jasper.engine.JasperFillManager 

   
那些类用来贯彻报表的数额填充。报表填写就是为报表的多少查询提供数据库连接,给报表的参数设置值等。填充此前是*.jasper文件,经过填充后就改成了*.jrprint文件–那是一个可兆示或者可导出成报表的公文。这些类提供了广大措施来接受各系列型的report
design,可以是一个对象、文件、或输入流。它的出口结果也是鳞次栉比的:file、Object、output
Stream。

(7)net.sf.jasperreports.engine.JasperPrintManager

   
用于将一个*.jrprint文件达成打印。在JapserReports中,大家可以透过那些类来打印表格,它富含了富有的打印效用。它提供了打印整个文档或者局地文档、显不出示打印对话框的法门。使用这些类可以将贾斯帕(Jasper)Reports文档的一页作为一个java.awt.Image对象来呈现。

(8)net.sf.jasperreports.engine.JasperExportManager

澳门金沙国际,   
那么些管理类对两样来源和不一样去处(文件、输入输出流等)的数目提供不一样的点子。用于将可显示的表格导出成种种格式的报表文件,例如PDF、HTML、XML和此外的格式。

(9)net.sf.jasperreports.engine.export.JRXxxExporter

   
那是一比比皆是的文书导出器,它们用于将*.jrprint文件导出成对应格式的表格文件。例如XSL、PDF、HTML、XML、CSV、RTF、TXT和其余的格式。JRXlsExporter、JRPdfExporter、JRXmlExporter、JRCsvExporter、JRHtmlExporter、JRTextExporter、JRRtfExporter。

(10)net.sf.jasperreports.engine.JasperRunManager

   
那个类可以直接将*.jasper文件导出成种种格式的表格文件,有时候在报表填写进度中我们不指望生成中间的net.sf.jasperreports.engine.贾斯帕(Jasper)Print对象,而直白扭转大家所急需的文档格式,例如:PDF或HTML。

    2.   
贾斯帕(Jasper)ExportManager:导出管理,主要措施如下:

参考文献

[1]
JasperReport在线教程.

[2] 贾斯帕(Jasper)Reports
报表的支付流程.http://topmanopensource.iteye.com/blog/1866879

[3] JasperReport API.

5. 表格数据源

   
Jasper报表引擎得到来自数据源的多寡,能够从数据库,XML文件,对象数组和聚合中的对象来取得。前面大家介绍了使用JasperFillManager来已毕报表的数目填充,具体是由fillReportXXX()方法得到数据源实行填写。

(1)JDBC数据源

   
JRResultSetDataSource类关联入一个java.sql.ResultSet对象。那是当报表数量从关周详据库中提取最常用的数据源完毕。倘若接纳java.sql.Connection传递给引擎,它首先实施相关的查询,并将该重返java.sql.ResultSet中的对象在一个JRResultSetDataSource实例。

(2)JavaBean数据源

   
JRBeanArrayDataSource类和JRBeanCollectionDataSource类达成了足以分级包装的JavaBean对象的数组或集合。数组或集合中的每个对象都将被视为对那系列型的数据源中的一个笔录。一个一定的JavaBean属性和对应的表格字段之间的照射是因而命名约定举行。报表字段的名号必须是一模一样的所指定的JavaBeans的正统JavaBean属性的称号。

(3)基于Map数据源

   
父级应用程序已经储存在内存中的java.util.Map对象提供填充数据的兑现类JRMapArrayDataSource和JRMapCollectionDataSource相当实惠。被卷入的数组或集合中的每个映射对象被认为是数据源中的一个虚构的记录,每个报表字段的值从映射中行使报表字段名作为键提取。

(4)TableModel的数据源

   
许多客户端应用程序的多少以表格方式显得。在重重施用中常见的急需是允许用户打印该表格方式的告诉。达成类JRTableModelDataSource使生成的报表格式的Swing应用程序报告的天职。那几个类包装了一个javax.swing.table.TableModel对象。列在卷入的TableModel对象能够透过他们的名字或他们的依照0索引来访问。

(5)XML数据源

   
类JRXmlDataSource是依照DOM,它选用XPath表明式来摘取XML文档数据的数据源的落到实处。
XML数据源中的记录是通过XPath表明式选拔的节点元素表示。字段值是由种种记录使用由字段描述(JRXML<fieldDescription>元素)所提供的XPath表明式检索。

(6)CSV数据来源

    JRCsvDataSource
代表了从结构化文本文件中找寻其数据的数据源的完成,日常为CSV。字段值是正值利用他们的列索引检索。

(7)XLS数据来源

    JRXlsDataSource
代表其搜索的Excel文件的数量的数据源的已毕。报表字段映射为这么些数据源的兑现也是根据字段列索引。

(8)空数据来源

   
类JREmptyDataSource,模拟与中间虚拟空的记录给定数据的数据源。它是由用户界面的工具来提供基本的表格预览功用,或在格外规报告模板,或用来测试和调试目标。

   

到此为止,贾斯帕(Jasper)Report报表开发的全方位工艺流程和贯彻原理已经介绍完了,在摸底了那些之后,前面推行起来心里就要精晓部分。

       
 exportReportToPdfFile:导出PDF文件,多态函数,提供三种艺术:从源文件导出到对象文件、从Jasper(Jasper)Print导出到目的文件、从源文件流导出目的文件,倘诺枚举的话有9种方法,无重临值。

参考文献

[1]
Jasper(Jasper)Report在线教程.

[2] 贾斯帕(Jasper)Reports
报表的支付流程.

[3] JasperReport API.

  1. 贾斯帕(Jasper)(Jasper)Report介绍 贾斯帕(Jasper)Report
    是一个开源的Java报表引擎,它不像此外的表格工具,例如Crys…

       
exportReportToHtmlFile:导出HTML文件,同上

       
exportReportToXmlFile:导出XML文件,同上

     3.   
贾斯帕(Jasper)PrintManager:打印管理,主要形式如下:

        
printReportToPdfFile:把报表导出成PDF文件,然后自己打印;

        
printReport:直接打印表格,多态函数,提供文件名、文件流或Jasper(Jasper)Report直接开行打印,重返值true/false;

        
printPages:同printReport,但参数增加了页数选取。

      4.   
JasperCompileManager:编译管理,把.jrxml文件编译成.jasper文件,主要运用的办法只有一
个,compileReportToFile:多态函数,参数.jrxml文件名或者Jasper(Jasper)Design、InputStream和输
出.jasper文件名

5.   
JRRewindableDataSource:定义一个方可往回查看记录的不二法门的接口,主要措施是moveFirst移动到第一行,是JavaBean和TableModel等数据源的祖宗。

      6.   
JRResultSetDataSource:数据源结果集,已毕JRDataSource的类,此外它还扩充了二个属性resultSet结果集和
columnIndexMap列索引Map;主要的措施有getColumnIndex:获取列索引,参数名称filedName,再次回到索引值

      7.   
JRAbstractExporter:导出的抽象类,那里将引出导出的其他格式协理包罗常用的Excel、CSV等,详细达成请看:net.sf.jasperreports.engine.export命名空间。

      8.  贾斯帕(Jasper)Report:定义JasperReport对象,紧要格局有getCompileData获取编译音讯。

     9.  JasperPrint:定义JasperPrint对象,主要措施有getPages获取打印页数。

     10. 
贾斯帕(Jasper)Manager:通用管理器,主要措施如下:

        
printReport:打印表格,多态方法,同JasperPrintManager

        
fillReport:填充报表,多态方法,同Jasper(Jasper)FillManager

        
loadReport:装载报表,多态方法,参数为报表名称或InputStream,再次回到值为JasperReport,loadPrint同此方法

        
runReportToPdf:运行报表,多态方法,参数为jasperReport、parameters、jrDataSource,再次来到报表字节流byte[]。

     11. 
JRHibernateAbstractDataSource:Hibernate抽象数据源类,定义系统援救Hibernate数据源格式。

     12. 
JRCsvDataSource:CSV数据源

     13. 
JRAbstractTextDataSource:抽象文本数据源

     14. 
JRXmlDataSource:Xml数据源。继承自JRAbstractTextDataSource

     15. 
JRAbstractBeanDataSource:JavaBean抽象数据源

     16. 
JRBeanCollectionDataSource:Bean集合数据源,继承自JRAbstractBeanDataSource

     17. 
JRBeanArrayDataSource:Bean数组数据源,继承自JRAbstractBeanDataSource

    
18.JRTableModelDataSource:表模型数据源,必要定义表的列和表格的field对应提到。

PDF报表导入到本地 

        try {
            JDBCConnection db = new JDBCConnection();
            //报表jasper文件路径
            String jasperSource="H:/jasperreport/lineUser.jasper";

            Map<String, Object> param=new HashMap<String, Object>();

            param.put("id", 1);// 传递参数(参数类型);
            //param.put("sql", "sql");*/ //亦可把整条sql语句作为参数

            //标准流程:生成中间的print对象,然后再导出成其他格式。
            //装载对象
            JasperReport report = (JasperReport) JRLoader
.loadObjectFromLocation(jasperSource);
            //填充数据
            JasperPrint print = JasperFillManager.fillReport(report,param, db
                    .getConnection());
            //导出成pdf(需要包含iTextAsian.jar包);
            //直接将装填过程生成的文档导出到pdf格式
            JasperExportManager.exportReportToPdfFile(print, "H:/jasperreport/line.pdf");
        } catch (JRException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }

相关文章