PDF报表技术文档.docx
- 文档编号:25046456
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:43
- 大小:579.71KB
PDF报表技术文档.docx
《PDF报表技术文档.docx》由会员分享,可在线阅读,更多相关《PDF报表技术文档.docx(43页珍藏版)》请在冰豆网上搜索。
PDF报表技术文档
内部技术文档
业务层应用技术-----PDF报表技术
PDF报表技术
●介绍JasperReports包结构,路径等。
●介绍iReport
●总的开发流程
●1.1iReport使用说明
●1.2简单的报表制作
●1.3动态报表制作
1.3.1给报表传递参数
1.3.2带查询的报表制作
1.3.3动态设置查询条件的查询报表制作
●1.4如何插入图片
1.4.1显示本地磁盘上的图片
1.4.2显示数据库中的图片
●1.5JasperReports和struts2的结合
1.5.1安装JasperReports插件
1.5.2配置生成JasperReports报表的struts.xml配置文件
1.5.3生成JasperReports报表
●附注
1.iReport中的分页控制:
2.iReport中变量的介绍
3.工作区介绍
4.分栏的设置
在企业级的web应用中,必须面临大量的报表问题,即将数据库中的数据形成报表并进行打印,在传统的开发中我们一般只能使用HTML页面生成报表。
这样不仅开发人员花大量时间来设计HTML报表,而且不支持导出别的格式的报表。
由于这种局限的存在,不能满足用户的需要,而JasperReports项目的出现解决了企业开发的这种困境。
JasperReports是一个强大的,灵活的报表生成工具,能够生成PDF,HTML,XML格式的报表。
这个工具是开源的,我们可以免费的使用她,并且完全使用java写成,可以用在各种java应用程序中,包括javaC/S应用、Web中应用生成报表。
(她的文档是收费的)
当然了我们要生成PDF报表肯定使用JasperReports组件了。
JasperReports的开发是由一份XML格式的报表的文件开始的,设计好这个XML文件后,利用JasperReports的API进行编译,填充数据,导出或者浏览,这样可以生成多种格式的报表的文件。
开发者只需提供一个XML格式的报表设计文件,而其他的细节以及底层的数据处理等对开发者来说是完全透明的。
JasperReports的使用:
首先,我们登录JasperReports的官方网站下载JasperReports的最新版本jasperreports-3.0.0。
JasperReports组件的文件结构:
build:
存放的是JasperReports项目编译后生成的*.class文件。
demo:
存放的是JasperReports项目的演示文件,我们可以参考该路径下的演示来学习JasperReports框架的使用。
dist:
存放的是JasperReports项目的二进制JAR文件,还包括了JasperReports项目的API文档。
docs:
存放的是两份XML文档,没有什么用。
lib:
存放的是JasperReports项目编译和运行所需的JAR文件。
src:
存放的是JasperReports项目的所有源文件。
为了在我们的项目中使用JasperReports项目,我们应该将dist路径下的jasperreports-3.0.0.jar文件复制到应用的CLASSPATH路径下。
如果是web应用,将改文件复制到Web应用的WEB-INF/lib路径下。
不过JasperReports框架生成其他格式的文档还依赖另外一些开源项目,如果生成PDF文档依赖iText项目,将JasperReports的lib下的itext-1.3.1.jar文件复制到系统的CLASSPATH路径下;如果要生成Excel文件,则应将lib下的poi-3.0.1-FINAL-20070705.jar文件复制到系统的CLASSPATH路径下。
光有这些还不够,如果你的CLASSPATH路径下没有apache的commons组件的话,我们还得将commons组件的部分jar包放到我们的CLASSPATH中有:
commons-collections-2.1.jar,commons-logging-1.0.2.jar,commons-digester-1.7.jar,
Commons-beanutils-1.7.jar.这些jar包在我们下载的JasperReports包中的lib路径下。
此外还要一个eclipse提供的编译的jar包,在我们下载的JasperReports包中lib路径下有这个编译的jar包,jdt-compiler-3.1.1.jar。
我在简单说一下apache下的这个commons组件:
commons组件就是一个开源的工具类的组合,集中解决了java的涉及的各个方面。
在某些方面比javase提供的功能都强大。
它的存在目的是创建和维护独立于其他框架和产品的组件。
当然了这些包我们也可以单独使用,就想javaJdk一样作为我们项目的一部分,这样我们可以大大的缩短开发周期。
总之:
我们应该在CLASSPATH中必须要放8个jar包:
commons的四个:
(commons-collections,commons-logging,
commons-beanutils,commons-digester),eclipse编译包(jdt-compiler),JasperReports包(jasperReports),生成pdf的包(iTex),我们肯定会打印中文,则还需要中文支持的包(iTextAsian包)。
在itex的官方站点下载。
至此,所有的配置工作全部完成。
当我们成功的做了上述的工作,那么我们就可以在应用中使用JasperReports框架了。
让我们一块体验她的魅力吧!
不过,在开发报表之前还得先说一下iReport工具:
我们要想开发一个报表必须先定义一个报表设计文件即一个特殊的XML文件,这份XML文件中包含了大量的JasperReports标签,我们没有必要在去了解JasperReports标签的详细含义。
设计XML此文件是相当的繁琐的。
即使设计一个简单的静态报表也要写上好多的代码,而且非常容易出错。
好在有了iReport工具,iReport也是开源组织中的一款免费软件,主要作用就是用可视化的方式设计生成JasperReport所使用的报表格式文件,因为JasperReport本身并未提供很好的可视化报表设计工具,iReport的出现正好弥补了这个缺陷。
因此现在我们就不用在亲自去设计那繁琐的又必须使用的XML文件了,使用iReport工具以所见即所得的方式来生成,这样大大的提高了工作效率。
JasperReports和iReport结合起来使用,你会深深的被她们提供的功能所折服的!
!
我们首先要在www.jasperforge.org下载iReport的最新版本。
(iReport-3.0.0.zip)。
在压缩包解压后有一个iReport.exe文件,双击即可运行iReport。
在详细介绍之前,先总体的说一下开发报表的流程,让大家在整体上有个认识:
1.开发人员开发报表设计文件,也就是定义一个*.jrxml文件(就是最开始的那个XML文件)。
2.使用JasperReports提供API中的JasperCompileManager类编译*.jrxml文件,编译后生成一个*.jasper文件。
3.使用JasperReports提供API中的JasperFillManager类填充编译后的*.jasper文件,填充后生成一个*.jrprint文件。
4.使用导出管理器(JasperExportManager)或者各种格式的文件导出器(JRXxxExporter)将*.jrprit文件导出成各种格式的报表文件。
也可以使用JRViewer工具类来直接浏览报表。
开发流程图:
1.1iReport使用说明
首先我们先开发一个静态的报表为例,介绍如何利用JasperReports+iReport开发JasperReports报表。
iReport的应用:
这是个既简单有复杂的事情,说他简单是因为这里没什么任何技术含量,完全类此word的操作,说起复杂是因为需要这些报表组合的具有一定的美感。
1.1.1双击iReport.exe文件,即可打开iReport主页面:
我们一睹她的模样吧!
1.单击菜单中的’档案’菜单,然后在选择“开启新档”菜单项,将出现下图:
我们可以更改报表的名称,页边距的设置以及选择纸张的大小和类型。
除次之外比较重要的一点就是:
如果报表文件需要使用中文字符,我们应单击i18n选项卡,在该选项卡的“XML编码”输入框中输入GBK。
如图:
2.我们大家都熟悉word了,word中的分栏给我们带来极大的方便,同样在pdf报表中分栏也是必不可少的,我们也可以通过设置对pdf报表进行任意次的分栏。
上两个图的“字段数”选项卡,我们都看见了吧!
单击该选项卡得到下图:
字段数输入框的数就代表了所分的栏数,默认是1,也就是不分栏。
如果要分两栏我们把他改成2即可。
1.1.2主页面的各个工作区介绍:
1.设置文本格式的工具按钮:
2.文本排列工具按钮:
3.资源管理器:
4.控制台:
5.中间空白的一大部分则是报表设计区了。
6.最后介绍我们常用的,也是最重要的一个:
我们经常要用到的就是“T”,“F”这两个按钮了。
“T”添加静态文本。
“F”添加文本字段。
(动态)。
其他按钮我们可以尝试的试试它们的功能。
1.2简单报表制作
(一)、首先我们要做重要一步,打印出中文,这不是必不可少的,那就是为当前报表建一个风格(Style),并设置为当前默认风格。
步骤:
1.单击菜单中的’格式’菜单,然后在选择“Style”菜单项,将出现下图:
2.单击“New”按钮:
出现Add/ModifyStyles对话框:
3.Add/ModifyStyles对话框设置:
3.1设置Styles标签:
在Stylesname中输入一个名字,名字任意,并设置成默认的风格:
设置后如图:
3.2设置TextProperties标签:
拖动滑动块,在下面可以看到TextPropertise标签:
接着点击Font选项后的按钮,将弹出如下对话框:
在这个对话框中,我们将对打印中文问题进行设置,其中主要设置有两项:
PDFFontName设置为:
STSong-Light
PDFEmbedded设置为:
UniGB-UCS2-H(ChineseSimplified)
设置后如图:
然后点击OK即可。
打印中文的PDF报表设置完成。
至此,总结一下,PDF中要想打印中文有三个地方要设置:
第一,CLASSPATH中必须增加中文支持包iTextAsian。
第二,在i18n标签中XML编码必须是GBK(要手动输入)。
第三,要设置PDFFontName和PDFEmbedded。
(二)、通过“T”添加静态文本:
来制作一个简单的报表:
单击“T”按钮,然后在设计区进行拖拽:
插入静态文本后的报表如图:
然后保存,保存后便可得到一个*.jrxml文件。
假设我们保存为test.jrxml放在C盘根目录下。
这个文件相当于我们手工编写的那个XML文件。
这份最原始报表设计文件(类此于java的源文件)可以生成各种格式的报表,包括PDF文档,Excel文档,HTML文档等。
所以使用JasperReports开发报表的核心工作就是编辑一个报表设计文件。
这份报表文件不会自己变成任何报表,我们必须对它进行编译,填充数据,导出等工作。
编译:
有两中编译方法,
第一种是使用JasperReports的API进行编译,
JasperCompileMpileReportToFile(“c:
\\test.jrxml”,”*c:
\\test.jasper”);第一个参数是编译的源文件,用绝对路径即可,第二个参数是要编译生成的文件名称。
第二种是用iReport编译,单击菜单中的’建立’菜单,然后在选择“编译”菜单项,则就对当前的文件进行了编译,生成jasper文件。
因为我们肯定是用iReport开发,所以第一种编译的方式不怎么常用了。
填充:
jasper文件依然不能变成报表,还需要给报表填充数据,填充报表时可以填充报表所需的数据源,参数等内容,而报表就负责显示根据数据源查询的结果和参数等。
这个只能是利用API实现了。
方法:
JasperFillManager.fillReportToFile(“c:
\\.jasper”,null,newJREmptyDataSource());第一个参数是被填充的jasper文件,第二个参数是填充报表的参数,我们这个没设置参数所以为null,第三个参数是连接的数据源,即使没有连接数据源也要创建一个空的数据源。
填充完在C盘根目录下将生成一个test.jrprint文件。
导出:
jsprint文件已经是一个可以显示的报表了,这份报表是格式无关的,也就是说它既可以生成PDF文件也可以生成Excel文件,还可以直接使用JasperReports的报表浏览工具来浏览。
导出成相应的文件时有两种API:
第一种使用文件导出器:
导出PDF文件:
JRPdfExporter,导出EXCEL文档:
JRXlsexporter
导出HTML文档:
JRHtmlexporter等等,导出CSV,RTF,TEXT,XML都有相应的文件导出器。
第二种使用文件导出管理器:
JasperExportManager类,提供了多个静态方法,可以直接导出多种文件格式的报表。
例如导出PDF用exportReportToPdfFile方法,导出HTML报表用exportReportToHtmlFile等等。
利用exportReportToPdfStream方法,导出成一个PDF格式的报表,并将该报表文件输出到一个指定输出流里。
利用第一种方法导出一个PDF报表的源程序:
publicvoidexporter()throwsException{
//使用JRLoader来加载一个*.jrprint文件,生成一个JasperPrint实例
JasperPrintjasperPrint=(JasperPrint)JRLoader.loadObject("c:
\\test.jrprint");
JRPdfExporterexporter=newJRPdfExporter();
//设置要导出的实例
exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
//设置导出的文件名
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,"c:
\\test.pdf");
exporter.exportReport();
System.out.println("导出完成");
}
第二种方法导出一个PDF文件:
源程序
publicvoidexp()throwsException{
//使用文件导出管理器
JasperExportManager.exportReportToPdfFile("c:
\test.jrprint","c:
\\test.pdf");
}
很显然我们一般都用第二种方法来导出报表。
至此,一个简单的静态报表制作完成。
1.3动态报表的制作
单纯的静态报表是没有太大的作用的,报表都需要传入一些动态的内容,例如参数,或者直接从数据库查询的结果等。
只有接受这些动态内容的报表才是完整的报表。
在报表中访问时:
$V{variablesName}:
访问变量。
$P{parameterName}:
访问参数,通过填充报表时使用Map对象传入。
$F{filedsName}:
访问字段,通常对应查询字段或者集合元素的属性值。
(字段即数据库中表的列名)
1.3.1给报表传入参数:
首先我们要在报表中加入参数,然后在填充数据时,给相应的参数赋上值,最后将赋的值显示在报表中。
在报表中加入参数:
单击菜单中的’预览’菜单,然后在选择“报表参数”菜单项,将出现下图:
单击新增则出现下图:
在ParameterName中添加参数的名字,在Type中为参数设置类型。
最后单击OK即可。
可以添加任意多的参数。
比如我们添加了str1,str2,str3三个String参数,则在填充时我们要给他们赋值,代码如下:
publicvoidfillData()throwsException{
Mapparams=newHashMap();
params.put("str1","传参");
params.put("str2","测试");
params.put("str3","test");
params.put("strint",Integer.valueOf(123));
JasperFillManager.fillReportToFile("c:
\\report_200.jasper",params,newJREmptyDataSource());
System.out.println("添加成功");
}
编译,和导出和静态报表的方法相同,在此就不多说了。
当然我们肯定要在报表中显示我们所传递参数值,我们可以使用下面的方法,来访问iReport中的参数:
参数中的数据是动态的,我们要单击工具栏上的“F”按钮,在工作区在进行拖拽,在更改成下图样式:
保存该文件,编译,填充,导出后得到的PDF报表中则把程序中赋的值显示了出来。
1.3.2带查询的报表制作:
更多的时候,系统的报表显示的是来自数据库里的数据,既需要通过查询来获得报表数据。
并且结合前面介绍的带参数的报表,可以在执行查询时动态的传入参数。
要想从数据库中取数据,第一步我们肯定要连接数据库了,我们用iReport制作报表,当然要拿iReport来连接数据库了。
所以我们推断,iReport肯定有连接数据库的接口,下面我们开始连接数据库。
以连接Oracle数据库为例来说。
首先应将Oracle的驱动程序复制到iReport的lib路径下,这样完成在iReport中安装Oracle的驱动。
重启iReport主程序。
然后建立与Oracle数据库的连接:
1.单击iReport主菜单上的“Data”菜单,在出现的菜单中单击“连接/资料来源”菜单项,即可看到下图所示对话框:
该对话框用于维护iReport的数据库连接,包括新建数据库连接和修改数据库连接。
2.单击New按钮,将出现下面对话框:
该对话框用于选择数据库连接类型,包括JDBC数据库的连接,XML文件数据源,Hibernian连接等。
1.我们需要使用JDBC连接数据库,所以我们选择第一项,然后单击“Next”按钮,将出现下图:
该对话框用来设置连接数据库的相关信息:
Name:
设置此连接的名称。
JDBCDriver:
我们选择Oracle的连接driver。
JDBCURL:
根据我们自己的条件设置连接的url。
UserName:
数据库用户名。
Password:
访问数据库密码。
设置完成后,我们单击“Test”按钮来测试。
如果我们输入的信息正确的话,我们将看到下面的提示框:
然后我们单击“Save”按钮,即可保存连接成功。
我们也可以将此连接设置成默认连接。
3.回到iReport主界面,我们单击主菜单上的“Data”菜单,在出现的菜单中单击“报表查询”菜单项,将看到下图:
该对话框用于设置报表的查询语句,该查询语句可以是各种查询语句,SQL,HQL和XPath等。
如果需要使用系统辅助的查询设计器,则可以单击“Querydesigner”按钮,将弹出查询设置器。
总之,不管我们使用何种查询,只能够在输入框中,输入有效的查询语句即可,如果查询成功,iReport会自动为查询语句生成对应的Field如图所示:
单击“OK”按钮,回到iReport的主界面。
至此报表查询设计成功,那么我们该如何显示查询的内容呢?
和访问参数差不多,不过我们用“字段”来显示数据。
比如在上图中我们从SSBMXX表中查询出了四个列名,所以我们要想显示出数据,应在报表中增加四个字段,注意:
字段值一定要和数据库中表的列名相同,这样才能对应的显示出数据。
也就是我们要增加“BMH”,“XM”,“MZM”,“XBM”这四个字段(大小写无关),增加字段的方法如下:
和增加参数方法差不多,在主菜单上单击“预览”菜单,在出现的菜单中单击“报表字段”菜单项,即可看到下图所示对话框:
单击“新增”按钮,出现下图:
我们可以在FieldName中输入字段的名称,在FieldCLASSType中设置字段的类型,单击“OK”即可增加一个字段。
在此我们应增加:
“bmh”,“mzm”,“xbm”,“xm”四个字段。
在报表中我们利用加入的字段(和表中列名要对应)来显示数据库内容。
字段是动态的,我们要单击工具栏上的“F”按钮,在工作区在进行拖拽来显示数据:
如图:
保存报表,对此报表进行,编译,填充,导出。
编译和导出和静态的报表一样。
只是填充的时方法有点不同,填充的源程序如下:
publicclassFillJasper{
publicstaticvoidmain(String[]args)throwsException{
doFill();
}
publicstaticvoiddoFill()throwsException{
JasperFillManager.fillReportToFile("c:
\\report_2002.jasper",null,
getConn());//和数据库的连接
System.out.println("Hello");
getConn().close();
}
publicstaticConnectiongetConn()throwsException{//Oracle数据库的连接
Stringdriver="oracle.jdbc.driver.OracleDriver";
StringconnectionString="jdbc:
oracle:
thin:
@172.16.12.8:
1521:
YJSMIS";
Stringuser="yjs";
Stringpassword="tiger";
Class.forName(driver);
Connectionconn=DriverManager.getConnection(connectionString,user,password);
returnconn;
}
}
在执行此方法时,我们一定要确定Oracle的驱动在我们的CLASSPATH下了。
至此一个动态带查询的报表制作完成。
我们可以浏览它生成的PDF报表了。
我们在打印带查询的报表时,我们进行了两次连接数据库,第一次是在iReport中连接的,第二次是在填充时连接的。
是必须的吗?
经过多次测试,我发现可以不在iRe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PDF 报表 技术 文档