Jasperreport+studio设计报表教程(一)

标签: Jasperreport+studio

最近想要进行报表开发,网上一搜基本上都是运用Jasperreport进行报表开发,不仅因为Jasperreport功能强大运用java开发,还因为该项目是使用LGPL协议开源的,故可以自由运用在私有项目上只要你不修改它的源码。现在网上搜到Jasperreport的基本都是配合ireport进行开发的,而且版本基本都是6.0以前的。
进入Jasperreport项目的官网发现有一个软件叫Jaspersoft studio的,它的版本也是6.3.1跟Jar包版本一致,百度一下才知道IReport已经不再进行版本更新了,现在改用Jaspersoft studio进行开发了,该软件是基于Eclipse开发的,当然也是开源免费的。
我将自己运用Jasperreport+studio进行开发的一些经验进行整理,希望对大家有用。

准备工作

到Jasperreport开发公司官网Jaspersoft community下载Jar包,最好是下载Project包,还有模板开发软件Jaspersoft studio。下载链接
这里写图片描述
点击Libray和studio进行下载,点击之后会弹出让你注册或者登录的界面,可以点击右下角的NoThanks跳过直接来到下载界面,稍等片刻便会弹出下载对话框。
这里写图片描述

下载Jasperreposrt6.3.1的Project包后解压,里面的结构如下。
这里写图片描述

重点文件夹我都做了标识,demo是一些案例。首先来了看第一个文件夹dist,点进去之后里面放着Jasperreport6.3.1的Jar包,还有其它两个相关的包。
这里写图片描述
第一个文件夹doc里面放着Jar包的Api说明,还有Jasperreport的用户指南,如果你英文好的话可以详细读读。
这里写图片描述
接下来的文件build.xml是一个非常值得注意的点,由于JasperReport可以用ant工具进行构建,所以这个Project包里的案例都是默认用ant才能运行的,不了解ant的同学可以百度一下ant的教程。
强烈建议安装一个ant构建工具,反正也不大,因为后面会用的到,而ant都是基于build.xml进行构建项目的,所以这里有个build.xml文件。当安装好ant之后,用cmd进入当前项目,可以直接在当前目录的地址栏里输入cmd,然后直接打ant命令,就会开始构建项目了。
那这个ivy.xml又是什么呢,点开看看。

<ivy-module version="2.0">
    <info organisation="net.sf.jasperreports" module="jasperreports">
        <license name="GNU Lesser General Public License" url="http://jasperreports.sourceforge.net/license.html" />
        <description homepage="http://jasperreports.sourceforge.net">JasperReports Library</description>
    </info>
    <configurations defaultconf="compile" defaultconfmapping="compile->*">
        <conf name="compile" description="dependencies for compile"/>
        <conf name="docs" description="dependencies for docs" extends="compile"/>
        <conf name="javaflow" description="dependencies for javaflow" extends="compile"/>
        <conf name="test" description="dependencies for test" extends="compile"/>
    </configurations>
    <dependencies>
        <dependency org="antlr" name="antlr" rev="2.7.5"/>
        <dependency org="com.adobe.xmp" name="xmpcore" rev="5.1.1"/>
        <dependency org="com.fasterxml.jackson.core" name="jackson-annotations" rev="2.1.4"/>
        <dependency org="com.fasterxml.jackson.core" name="jackson-core" rev="2.1.4"/>
        <dependency org="com.fasterxml.jackson.core" name="jackson-databind" rev="2.1.4"/>
        <dependency org="com.google.zxing" name="core" rev="3.2.1"/>
        <dependency org="com.lowagie" name="itext" rev="2.1.7.js5"/>
        <dependency org="commons-beanutils" name="commons-beanutils" rev="1.9.0"/>
        <dependency org="commons-collections" name="commons-collections" rev="3.2.2"/>
        <dependency org="commons-digester" name="commons-digester" rev="2.1"/>
        <dependency org="commons-lang" name="commons-lang" rev="2.6"/>
        <dependency org="commons-logging" name="commons-logging" rev="1.1.1"/>
        <dependency org="com.ibm.icu" name="icu4j" rev="57.1"/>
        <dependency org="javax.persistence" name="persistence-api" rev="1.0"/>
        <dependency org="javax.servlet" name="servlet-api" rev="2.4"/>
        <dependency org="jaxen" name="jaxen" rev="1.1.1"/>
        <dependency org="mondrian" name="mondrian" rev="3.1.1.12687"/>
        <dependency org="net.sf.barcode4j" name="barcode4j" rev="2.1"/>
        <dependency org="net.sourceforge.barbecue" name="barbecue" rev="1.5-beta1"/>
        <dependency org="net.sourceforge.jexcelapi" name="jxl" rev="2.6.10"/>
        <dependency org="org.apache.ant" name="ant" rev="1.7.1"/>
        <dependency org="org.apache.commons" name="commons-javaflow" rev="20160505"/>
        <dependency org="org.apache.httpcomponents" name="httpclient" rev="4.3.4"/>
        <dependency org="org.apache.httpcomponents" name="httpcore" rev="4.3.2"/>
        <dependency org="org.apache.lucene" name="lucene-analyzers-common" rev="4.5.1"/>
        <dependency org="org.apache.lucene" name="lucene-core" rev="4.5.1"/>
        <dependency org="org.apache.lucene" name="lucene-queryparser" rev="4.5.1"/>
        <dependency org="org.apache.poi" name="poi-ooxml" rev="3.10.1"/>
        <dependency org="org.apache.poi" name="poi" rev="3.10.1"/>
        <dependency org="org.apache.velocity" name="velocity" rev="1.7"/>
        <dependency org="org.apache.xmlgraphics" name="batik-anim" rev="1.8"/>
        <dependency org="org.apache.xmlgraphics" name="batik-awt-util" rev="1.8"/>
        <dependency org="org.apache.xmlgraphics" name="batik-bridge" rev="1.8"/>
        <dependency org="org.apache.xmlgraphics" name="batik-css" rev="1.8"/>
        <dependency org="org.apache.xmlgraphics" name="batik-dom" rev="1.8"/>
        <dependency org="org.apache.xmlgraphics" name="batik-gvt" rev="1.8"/>
        <dependency org="org.apache.xmlgraphics" name="batik-svg-dom" rev="1.8"/>
        <dependency org="org.apache.xmlgraphics" name="batik-svggen" rev="1.8"/>
        <dependency org="org.apache.xmlgraphics" name="batik-util" rev="1.8"/>
        <dependency org="org.beanshell" name="bsh" rev="2.0b4"/>
        <dependency org="org.codehaus.castor" name="castor-core" rev="1.3.3"/>
        <dependency org="org.codehaus.castor" name="castor-xml" rev="1.3.3"/>
        <dependency org="org.codehaus.groovy" name="groovy-all" rev="2.4.5"/>
        <dependency org="org.eclipse.jdt.core.compiler" name="ecj" rev="4.3.1"/>
        <dependency org="org.hibernate" name="hibernate-core" rev="3.3.2.GA"/>
        <dependency org="org.jfree" name="jcommon" rev="1.0.23"/>
        <dependency org="org.jfree" name="jfreechart" rev="1.0.19"/>
        <dependency org="org.mozilla" name="rhino" rev="1.7.6"/>
        <dependency org="org.olap4j" name="olap4j" rev="0.9.7.309-JS-3"/>
        <dependency org="org.ow2.asm" name="asm-all" rev="4.0" conf="javaflow->*"/>
        <dependency org="org.springframework" name="spring-beans" rev="2.5"/>
        <dependency org="org.springframework" name="spring-core" rev="2.5"/>
        <dependency org="xalan" name="xalan" rev="2.7.2"/>
        <dependency org="xml-apis" name="xml-apis-ext" rev="1.3.04"/>

        <dependency org="xalan" name="serializer" rev="2.7.2" conf="docs->*"/>

        <!--
        <dependency org="com.keypoint" name="png-encoder" rev="1.5"/>
        <dependency org="javax.xml.soap" name="saaj-api" rev="1.3"/>
        <dependency org="org.apache.xmlgraphics" name="batik-script" rev="1.7"/>
        <dependency org="org.testng" name="testng" rev="6.8.1"/>
        <dependency org="log4j" name="log4j" rev="1.2.17"/>
        <dependency org="net.sf.jasperreports" name="jasperreports-fonts" rev="4.0.0"/>
        -->
    </dependencies>
</ivy-module>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80

有没感到头晕,有没看到许多的dependency,没错这个就是依赖库的构建,当你运行ant命令后,就会从远程仓库下载所有这些Jar包。
注意:这一步是非常重要的,如果你要用最新版的6.3.1进行开发,并且要用上jasperreport的所有功能,那么你可能得要有上面xml里面的所有包,而且版本一定要对应。否则当你导入JaserperReport Jar包到项目后,你会发现一调用方法填充模板生成PDF或者HTML就会出现各种ClassNotFount异常,像下面这个Jar类库
<dependency org="org.apache.xmlgraphics" name="batik-bridge" rev="1.8"/>
它是apache基金会开发的一个图像处理类,如果你用的1.7版本或者以下的版本,那么你就会一直报下面这个错误,当初为了解决这个问题,我真是踩了很多坑,最后才发现这个类只有在1.8版本才增加进去的。

java.lang.ClassNotFoundException: org.apache.batik.bridge.FontFamilyResolver
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1358)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
  • 1
  • 2
  • 3
  • 4

ant安装时需要注意的是要在其安装目录下的lib文件夹导入ivy.jar这个包,需要自行下载,下载jar包传送门。如果没有这个ivy.jar,在运行ant命令后,会报下面的错误。
这里写图片描述
当运行ant命令后,如果出现下面的画面,那么恭喜你已经开始了漫长的下载jar的过程,这个时间可能很久很久。
这里写图片描述
ant构建的jar包默认放在C盘的用户文件夹下面,有个.ivy的cache文件夹,里面放的就是下载的缓存jar包了,这时可以慢慢地收集jar包了。
这里写图片描述

当初我创建一个java web项目时,想生成图表,报一个错导一个包,导了很多包后才发现我要导的包都写在这个ivy.xml文件里。当然如果用ant构建的话有可能会遇到网络问题,下载不了有些jar包,毕竟是外国的网站,能下多少就下多少吧,没有的再去其它地方下。我的Jar包有一些是IReport软件里的lib目录拉过来的。
jaspersoft studio就这点不好,不知道要去哪里找到所有的工程需要用到的jar包。在软件安装目录里jaspersoftstudio\plugins,也可以找到一些类,但不是很全。要做一个报表所依赖的包相当的多,当然最后我也会把我可以运行的项目Demo提供出来供大家参考。



原文链接:加载失败,请重新获取