`

ireport中Custom JRDataSourceFactory的数据源配置及使用

阅读更多

new 一个数据源:




factory name:com.jaspersoft.ireport.examples.SampleJRDataSourceFactory(必填)


name:你的JRDataSource的路径,比如我的是:edu.pku.stu.status.bkxj.util.JDataSourceUtil(填写此项时应先在classpath中增加尼你的项目路径,但此项并不是必填的,在项目中用的时候设置成相应的JRdataSource就行了,但是factory name是必须的,否则会报错)。

优点 :Database JDBC Connection 会在整个填充过程一直占用数据库连接,而且在处理一些复杂问题时,用sql和一些简单的Java语句并不能很好的解决问题。JRdataSource只会在取数据时取得数据库连接,而非填充过程。而且后台的代码也比较容易控制

        javaBean:每个报表都要配置一个相应的JavaBean,太繁琐,且不易维护。JRdataSource也没有这方面的烦恼。
我的代码:

package edu.pku.stu.status.bkxj.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;

/**
 * 此类自动将参数中值为null的数据转为“”
 * 
 * @author lijf
 * @see
 */
public class JDataSourceUtil implements JRDataSource {
	private HashMap[] datasHm = null;

	private List<HashMap> datasList = null;

	private HashMap temp = null;

	private int loop = -1;

	// 打印多条数据
	public JDataSourceUtil(HashMap[] datasHm) {
		this.datasHm = datasHm;
	}

	// 打印多条数据
	public JDataSourceUtil(List<HashMap> datasList) {
		this.datasList = datasList;
	}

	/**
	 * 打印一页,一条数据时,用此构造参数
	 * 
	 * @param hm
	 */
	public JDataSourceUtil(HashMap hm) {
		this.datasList = new ArrayList<HashMap>();
		datasList.add(hm);
	}

	public Object getFieldValue(JRField jRfield) throws JRException {
		if (datasHm != null) {
			temp = datasHm[loop];
		} else {
			temp = datasList.get(loop);
		}
		return temp.get(jRfield.getName()) == null ? "" : temp.get(jRfield
				.getName());//过滤null值
	}

	public boolean next() throws JRException {
		loop++;
		if (datasHm != null) {
			if (loop >= datasHm.length) {
				return false;
			} else {
				return true;
			}
		} else {
			if (loop >= datasList.size()) {
				return false;
			} else {
				return true;
			}

		}
	}
}
 




print.jsp中的使用:

 

<%
……………………………………
//list,reportFile 已声明
JDataSourceUtil jd = new JDataSourceUtil(list);
			//windows

			//  PDF报表
			byte bytes[] = JasperRunManager.runReportToPdf(reportFile
			.getPath(), null, jd); //没有需要向报表传递的参数,所以此处第//二个参数是null
			response.setContentType("application/pdf");
			OutputStream output = response.getOutputStream();
			output.write(bytes, 0, bytes.length);
			output.flush();
			output.close();

%>
 



有兴趣的朋友可以把声明一些JavaBean 的Jrdatasource的构造函数,也可以打印的单独写成一个方法(我当时写了一个打印一页,和打印多页的两个方法,后来项目没有用到,所以删掉了)。

 

1
1
分享到:
评论

相关推荐

    iReport使用JavaBean做数据源

    本文将详细讲解如何在iReport中使用JavaBean作为数据源。 首先,JavaBean是一种符合JavaBeans规范的类,通常用于封装业务逻辑和数据,便于数据的传递和处理。在iReport中使用JavaBean作为数据源,可以解决因多条...

    ireport用list作为数据源.zip

    ireport用JRDataSource作为数据源案例源码,详细介绍请移步我主页查阅博客文章。初识ireport的同学可以参考本例子动手试试。 压缩包包含内容: 1.JRDataSource实现java源文件 2.jrxml报表文件

    ireport利用javabean做数据源.docx

    在Java开发中,ireport是一个强大的报表工具,它允许开发者设计复杂的报表,并且能够与各种数据源进行交互。在这个场景中,我们将讨论如何利用javabean作为ireport的数据源来生成报表。首先,我们需要理解javabean和...

    ireport中table使用javaBean数据源

    本知识点主要探讨的是如何在iReport中使用JavaBean作为数据源来填充表格(Table)组件。我们将深入理解这个过程,并结合提供的资源进行详细阐述。 1. **JavaBean数据源的原理** JavaBean是一种符合特定规范的Java...

    ireport利用javabean做数据源实例

    【标题解析】:“ireport利用javabean做数据源实例”这一标题表明我们将探讨如何使用iReport工具,一个用于设计JasperReports报表的开源工具,通过JavaBean对象作为数据源来创建和展示报表。JavaBean是一种符合特定...

    图示ireport中使用javabean作数据源开发基于jasperreports报表过程

    在ireport中使用javabean作为数据源,我们需要以下几个步骤: 1. **设计报表模板**: - 打开iReport,创建一个新的报表项目。 - 在设计视图中,添加所需的文本框、表格和其他元素,这些将用于展示数据。 - 定义...

    iReport使用JavaBean作为数据源——最简单的示例

    4. **连接数据源**:在iReport中,你需要设置数据源以便访问JavaBean。这可以通过“Design”模式下的“Dataset and Query”选项完成。选择“JavaBean Collection”类型的数据源,然后配置Java类的全限定名以及用于...

    jasperreport+ireport创建javaBean多数据源报表

    2. **配置数据源**: 在ireport中,可以设置JavaBean数据源,指定JavaBean类名和属性映射。 3. **生成.jasper文件**: 保存并编译.jrxml文件,生成.jasper二进制模板。 4. **Java代码集成**: 在Java项目中,加载....

    ireport+ javaBean 做数据源实例

    本实例将深入探讨如何使用ireport结合javaBean作为数据源来生成报表,帮助初学者快速掌握ireport的使用方法。 【描述】:“一看就会的实例。能够很快上手ireport” ireport因其直观的图形用户界面和强大的报表设计...

    ireport(使用子报表(使用JavaBean集合作为数据源))

    本篇文章将专注于如何在IReport中使用子报表,并结合JavaBean集合作为数据源来生成报告。 首先,理解`子报表`的概念。子报表是报表中的一个区域,它可以独立设计并重复显示主报表中的数据。这样可以将复杂报表拆分...

    ireport多数据源

    在一个报表中使用多个数据源的方法,现在分享出来以便后来者少走弯路!网上很多资料说多数据源只能使用子报表方式

    IReport使用Javabean做为数据源导PDF

    本教程不仅包括了基本的报表设计与数据源配置,还包含了子报表的嵌入流程及完整的源代码示例。 #### 使用 JavaBean 集合作为数据源的优势 使用 JDBC 作为数据源时,数据通常通过 SQL 查询获取,这种方式可能不够...

    JasperReport中使用多个数据源的方法

    ### JasperReport中使用多个数据源的方法详解 #### 场景背景 在报表开发过程中,有时我们需要在一个报表中展示不同来源的数据。例如,在同一份报告中同时呈现交叉表和饼状图,而这两部分数据可能源自不同的数据库表...

Global site tag (gtag.js) - Google Analytics