jasper文件与jrxml文件的关系。

jasper文件与jrxml文件的关系。,第1张

JasperReports是一个非常流行的开源报表工具 制作报表三个步骤:1)定制报表格式。 有二种方式,一种就是写jrxml文件,其实就是xml文件,只不过是后缀名不一样罢了。 JasperReports的模板文件是一个后缀名为jrxml的xml文件, 它包含这样几个主要元素: <jasperReport>根元素 <title>标题 <pageHeader>页头 <detail>具体内容 <pageFooter>页尾 <band>作为以上元素的子元素, 用来定义报表区域 除了jasperReport之外, 其他元棚型饥素都不是必须的 另一种方式更直接,就是生成一个JasperDesign类的实例,在japsperDesign中自己定义模板。jrxml文件也是通过一个JRXmlLoad加载过链返来,转成JasperDesign类的实例。也就是说写jrxml文件还需要进行解析,加租贺载。现实中我们使用的报表一般格式比较固定,因而可以通过先使用iReport工具生成模板,再加载解析的方式。这种方式简单,而且可见性强。

开发环境准备

以下两种方式任选其一:

1. 在已有的SpringMVC项目明侍携环境中进行配置(要求项目可正常运行、调试);

2. 在eclipse中安装Spring的STS工具,然后新建一个Spring MVC Project(要求已配置好Maven环境);

项目依赖包

添加必须的jasperreports包依赖:

[html] view plain copy

<!-- iReport JasperReports -->

<dependency>

<groupId>net.sf.jasperreports</groupId>

<artifactId>jasperreports</artifactId>

<version>5.6.0</version>

</dependency>

<dependency>

<groupId>org.codehaus.groovy</groupId>

<artifactId>groovy-all</artifactId>

<version>2.2.2</version>

</dependency>

SpringMvc JasperReport整合

1、继承JasperReportsMultiFormatView类,并重写fillReport()方法,在该方法中增加setUrl()实现,这样就可以在controller中指定要使用的报表模板文件了。这样做的好处是,只需要一个jasperReport配置文件,可以在controller中动态的设定报表模板url。

[java] view plain copy

package com.pes_soft.example

import java.util.Map

import net.sf.jasperreports.engine.JasperPrint

import net.sf.jasperreports.engine.JasperReport

import org.springframework.web.servlet.view.jasperreports.JasperReportsMultiFormatView

/**

* SpringMVC + IReport整合 视图处理扩展

* @Author 许亮

* @Create 2015-11-7 21:38:18

*/

public class ApplicationIReportView extends JasperReportsMultiFormatView {

private JasperReport jasperReport

public ApplicationIReportView() {

super()

}

protected JasperPrint fillReport(Map<String, Object>model) throws Exception {

if (model.containsKey("url")) {

setUrl(String.valueOf(model.get("url")))

this.jasperReport = loadReport()

}

return super.fillReport(model)

}

protected JasperReport getReport() {

return this.jasperReport

}

}

2、在/WEB-INF/jasper/目录下创建报表视图配置文件jasper-defs.xml,并指定解析器类为自定义的视图解析器类:

[html] view plain copy

<?xml version="1.0" encoding="谈竖UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"激伏

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

<bean id="iReportView" class="com.pes_soft.example.ApplicationIReportView">

<!-- <property name="url" value="/WEB-INF/jasper/report2.jasper"/>-->

<property name="reportDataKey" value="jrMainDataSource"/>

</bean>

</beans>

3、Jasper报表的渲染需要用到XmlViewResolver视图解析器,这样你的项目中就会存在多个视图解析器。需要注意的是,项目中如果使用了多个视图解析器,则需要设置order的值来区分解析器的使用顺序,order值越小则越靠前。增加XmlViewResolver视图解析器的同时,并指定其要解析的配置文件路径。

那么,需要在/WEB-INF/spring/appServlet/servlet-context.xml中增加下述配置:

[html] view plain copy

<!-- 注册XmlViewResolver,用于iReport &JasperReports报表生成 -->

<beans:bean id="jasperReportResolver" class="org.springframework.web.servlet.view.XmlViewResolver">

<beans:property name="order">

<beans:value>0</beans:value>

</beans:property>

<beans:property name="location">

<beans:value>WEB-INF/jasper/jasper-defs.xml</beans:value>

</beans:property>

</beans:bean>

测试准备

1、创建JavaBeanPerson实体类:

[java] view plain copy

package com.pes_soft.example.model

import java.util.ArrayList

import java.util.List

/**

* iReport测试bean: Person实体类

* @author 许亮

* @Create 2015-1-15 20:32:27

*/

public class JavaBeanPerson {

private String name // 姓名

private String sex // 性别

private int age // 年龄

private String hometown// 籍贯

private String phone // 电话号码

public JavaBeanPerson() {}

public JavaBeanPerson(String name, String sex, int age, String hometown, String phone) {

this.name = name

this.sex = sex

this.age = age

this.hometown = hometown

this.phone = phone

}

// 此处省略字段的getter和setter

public static List<JavaBeanPerson>getList() {

List<JavaBeanPerson>list = new ArrayList<JavaBeanPerson>()

list.add(new JavaBeanPerson("Lily", "female", 22, "Hubei", "10086"))

list.add(new JavaBeanPerson("Macro", "male", 33, "Beijing", "13800000000"))

list.add(new JavaBeanPerson("Andy", "male", 44, "HongKong", "13812345678"))

list.add(new JavaBeanPerson("Linder", "female", 28, "Guangxi", "18677778888"))

list.add(new JavaBeanPerson("Jessie", "female", 26, "Gansu", "18219177720"))

return list

}

}

2、使用iReport设计报表模板,并编成.jasper二进制文件,并拷贝至\WEB-INF\jasper目录下:

3、编写Controller方法

[java] view plain copy

/**

* 返回iReport报表视图

* @param model

* @return

*/

@RequestMapping(value = "/report", method = RequestMethod.GET)

public String report(Model model) {

// 报表数据源

JRDataSource jrDataSource = new JRBeanCollectionDataSource(JavaBeanPerson.getList())

// 动态指定报表模板url

model.addAttribute("url", "/WEB-INF/jasper/MvcIReportExample.jasper")

model.addAttribute("format", "pdf")// 报表格式

model.addAttribute("jrMainDataSource", jrDataSource)

return "iReportView"// 对应jasper-defs.xml中的bean id

}

运行结果

这一系列的文章大概这样安排:前面两篇先对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了。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/8161506.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存