SSM框架Java增删查改应用之导出报表(多数据源)

上一篇博客写的是增删查改
本篇介绍,将html的表格数据以报表的方式导出(以PDF格式为例)
一个主要数据源,两个次要数据源
报表工具:Jasperreport工具

  1. 导入相关的jar包
    	<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>
    <!-- JFreeChart -->
    	<dependency>
    		<groupId>org.jfree</groupId>
    		<artifactId>jfreechart</artifactId>
    		<version>1.0.19</version>
    	</dependency>
    	<dependency>
            <groupId>com.itextpdf</groupId>
        	<artifactId>itext-pdfa</artifactId>
        	<version>5.5.0</version>
        </dependency>
    	<dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf.tool</groupId>
            <artifactId>xmlworker</artifactId>
            <version>5.5.9</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>
    

一个数据源建立一个类,使用javaBean做另外两个数据源,并构造方法
将两个次数据源,也用List集合保存。

 		List<JavaBeanColor> javaBeanColors=new ArrayList<JavaBeanColor>();
        javaBeanColors.add(new JavaBeanColor("数据名",字段));
        javaBeanColors.add(new JavaBeanColor("数据名",字段));
        javaBeanColors.add(new JavaBeanColor("数据名",字段));
        javaBeanColors.add(new JavaBeanColor("数据名",字段));

        List<JavaBeanFruit> javaBeanFruits=new ArrayList<JavaBeanFruit>();
        javaBeanFruits.add(new JavaBeanFruit("数据名",字段));
        javaBeanFruits.add(new JavaBeanFruit("数据名",字段));
        javaBeanFruits.add(new JavaBeanFruit("数据名",字段));

将数据链接到报表
先构建一个方法类,将数据源封装

package com.byd.cloud.rail.afc.lc.model;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRAbstractBeanDataSourceProvider;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

import java.util.List;

/**
 * iReport数据源封装
 * @author yy
 * @Create 2015-1-15 15:42:52
 */
public class IReportDataSourceProvider extends JRAbstractBeanDataSourceProvider {
	private List<?> dataList;

	public IReportDataSourceProvider(Class<?> beanClass) {
		super(beanClass);
	}
	
	public IReportDataSourceProvider(Class<?> beanClass, List<?> dataSourceList) {
		super(beanClass);
		this.dataList = dataSourceList;
	}

	public JRDataSource create(JasperReport report) throws JRException {
		return new JRBeanCollectionDataSource(this.dataList);
	}

	public void dispose(JRDataSource dataSource) throws JRException {
		this.dataList = null;
	}
}

再将数据源和报表链接

// 报表数据源
        JRDataSource jrDataSourceMain_Person = null;
        JRDataSource jrDataSourceSub_Color = null;
        JRDataSource jrDataSourceSub_Fruit = null;
        try {
            IReportDataSourceProvider dataSourcePerson = new IReportDataSourceProvider(LcHistoryPassengerFlowCount.class, lcHistoryPassengerFlowCountList1);
            jrDataSourceMain_Person = dataSourcePerson.create(null);

            IReportDataSourceProvider dataSourceColor = new IReportDataSourceProvider(JavaBeanColor.class, javaBeanColors);
            jrDataSourceSub_Color = dataSourceColor.create(null);

            IReportDataSourceProvider dataSourceFruit = new IReportDataSourceProvider(JavaBeanFruit.class, javaBeanFruits);
            jrDataSourceSub_Fruit = dataSourceFruit.create(null);
        } catch (JRException e) {
            e.printStackTrace();
        }
  1. 报表模板的制作
    模板如上
    先做主要数据源,注意Field字段要和代码里面的实体类一致
    主数据源的Fields
    然后添加子数据源
    右键创建新的Parameters
    然后命名为jrColorDataSource
    接下来需要设置该报表参数的两个属性:
      ◆ Parameter Class(参数类):net.sf.jasperreports.engine.data.JRBeanCollectionDataSource
      ◆ Use as a prompt(是否弹出窗口以输入报表参数):去掉勾勾,即不弹出窗口
      至此,报表参数jrColorDataSource创建完成。另一个参数jrFruitDataSource的创建过程亦与此相同。
      为报表创建两个空的DataSet,分别重命名为subColorDataSet和subFruitDataSet。
      给DataSet创建字段,字段名分别对应Java实体模型JavaBeanColor.java、JavaBeanFruit.java中的字段,注意字段数据类型的一致性。
      子数据源的Fields
    设计报表模板的Band
    Band
    然后使用不同的组件,staticField,textField,Chart图表放在Summary
    然后将数据关联进去:
    1、主数据源关联
    字段一致
    在这里插入图片描述
    蓝色区域的V代表
    在这里插入图片描述
    利用主数据源的字段进行有关的运算(加减乘除)。
    2、子数据源关联
    相关的配置如图
    要把参数资源关联进去
    如上图
    回顾下报表模板的设计过程:
      ■ 创建了两个报表“Parameters(参数)”:jrColorDataSource和jrFruitDataSource,并且指定它们的“Parameter Class”为net.sf.jasperreports.engine.data.JRBeanCollectionDataSource。
      ■ 创建了两个空的“DataSet(数据集)”:subColorDataSet和subFruitDataSet,其中,
       subColorDataSet对应Java实体模型JavaBeanColor.java,两者字段保持一致;
       subFruitDataSet对应Java实体模型JavaBeanFruit.java,两者字段保持一致。
      ■ 创建了一个柱状图图表,指定使用的DataSet为“subColorDataSet”。
      ■ 创建了一个饼图图表,指定使用的DataSet为“subFruitDataSet”。

至此,报表模板的设计似乎已经完成,非也!如果此时编译报表模板,将得到的.jasper文件放入/WEB-INF/jasper/目录中,并不能得到想要的报表,原因是:创建了两个空的“DataSet(数据集)”。

我们一开始就创建了两个报表“Parameters(参数)”,那么接下来要做的就是:把报表“Parameters(参数)”赋值给两个空的“DataSet(数据集)”。

选中一个图表对象,右键菜单中点击“Chart Data”。
关键操作步骤为:
  ◆ 选择“Sub dataSet”为:subColorDataSet;
  ◆ 选择“Connection / DataSet Expression”为:Use datasource expression;
  ◆ 选择或设置上述表达式的值为:$P{jrColorDataSource},即其中一个报表“Parameters(参数)”。
  这样就完成了报表“Parameters(参数)”到报表“DataSet(数据集)”的数据关联转换。饼图同样要如此设置。
  编译报表模板,将得到的.jasper文件放入/WEB-INF/jasper/目录中,通过浏览器访问地址。
  难点升级,实现模板的单元格合并。
  在这里插入图片描述
  以station字段为例,先取消勾,去掉重复
  在这里插入图片描述
  只保留右边Borders的上边线,然后画左边线即可。html的单元格合并上一篇博客。
  最终效果图如下:
  在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
总结: 改压缩包 完全是自己整理 直接放入tomcat 或者另外服务器 就能使用, 数据库的链接只需要改动 WEN-INF下面的 reportConfig.xml 文件就行, 利用设计器 设计好后 把RAQ 文件直接放入 reportFiles 文件夹中就能看到效果。 以下是快逸报表的详细说明: 快逸报表是面向软件开发人员的、高性价比、易学易用的JAVA报表工具软件。快逸报表提供了高效的报表设计方案、强大的报表展现能力、灵活的部署机制,并且具备强有力的填报功能,为中小规模用户的数据统计分析、展现提供了理想的报表解决方案。快逸报表设计器是一个类似Excel使用环境的WEB报表设计与开发平台, 它自带报表运算引擎,连接数据库后即可展示报表效果,从最初的数据组织到前段的报表格式调整等工作都在这一环境中完成,设计完的报表模板将以RAQ的格式保存,设计器可以独立工作。 设计器运行基础(安装包中已集成): •Swing图形类包 •jdk1.4.1及以上版本 但凡有过项目经验的程序员都知道,项目中最烦人的就是报表,如果想自己轻松点,最好的办法就是选用某个报表工具,既可以灵活定制报表,解决很多编程的烦恼,又减轻了后续维护的工作量,可以把很多工作放给实施人员去做。 但是报表工具仅仅只能处理项目中的报表而已,只是项目中的一部分,因此报表工具的集成性就显得非常重要了。 目前市面上的报表工具有很多,国外的如:Crystal, Brio, Style Report等,国内的如:博易智软、和勤报表等,无一例外地都提供了一个独立的报表服务器,提供了一套完整的用户角色管理机制,导致了程序员集成的时候烦恼多多,具体分析如下: •独立的报表服务器,直接限制了报表的性能瓶颈 •无法共享web服务器的集群能力 •无法共享web服务器的连接池管理能力 •无法统一部署,实施人员既要部署自己的web应用,还需要部署报表服务器 •用户角色管理永不够用,具体的应用、具体的行业总会有自己独特的用户角色管理需求,作为通用产品的用户角色管理永远都满足不了五花八门的需要。 作为专业的报表解决方案提供商,润乾软件在这方面有自己独到的见解,润乾报表以jar包的形式提供给程序员集成,没有独立的报表服务器,没有应用架构,也没有独立的用户角色管理机制,极大的方便了程序员的集成,其优势分析如下: •没有独立的报表服务器,报表的性能瓶颈直接取决于webserver。 •可以共享web服务器的集群能力 •可以共享web服务器的连接池管理能力 •可以和程序员的web应用打成统一的war包去部署,减轻了实施人员的工作量 •直接使用web应用已有的用户角色管理机制,不存在两套管理机制无法兼容的问题,提供统一的登录界面,最终用户不需要登录两次。 总结:润乾采取的集成方案新颖独到,其报表工具完全解决了程序员的集成烦恼,非常适用于应用的集成,在易用性和集成能力上均有着优秀的表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值