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的构造函数,也可以打印的单独写成一个方法(我当时写了一个打印一页,和打印多页的两个方法,后来项目没有用到,所以删掉了)。
分享到:
相关推荐
iReport使用JavaBean做数据源
ireport利用javabean做数据源.docx
IREPORT使用JAVABEAN作为报表数据源IREPORT使用JAVABEAN作为报表数据源IREPORT使用JAVABEAN作为报表数据源
iReport使用JavaBean作为数据源——最简单的示例。 包含: 1、Java源文件(JavaBean)。 2、iReport的报表源文件(jrxml)。 3、详细的说明。
ireport用JRDataSource作为数据源案例源码,详细介绍请移步我主页查阅博客文章。初识ireport的同学可以参考本例子动手试试。 压缩包包含内容: 1.JRDataSource实现java源文件 2.jrxml报表文件
在一个报表中使用多个数据源的方法,现在分享出来以便后来者少走弯路!网上很多资料说多数据源只能使用子报表方式
这篇文档主要介绍了如何使用各种各样的数据源(主要是针对于IREPORT的)
图示ireport中使用javabean作数据源开发基于jasperreports报表过程
简单明了利用javabean做数据源,实现ireport报表功能
ireport中使用javabean作数据源开发jasperreports报表的详细过程 附有图片
下载包含程序源码,lib包,ireport创建模板操作文档,说明。程序可以在java myeclipse环境下直接运行。jasperreport版本6.3.1,ireport为5.6.0
NULL 博文链接:https://shouzhang1-2.iteye.com/blog/1973767
一看就会的实例。能够很快上手ireport
IREPORT中多行某列数据实现合并效果,模板中相关属性的配置方法见附件。文档中展示的是PDF文件的演示效果。
几经探索,终于寻找到在一个报表中使用多个数据源的方法,现在分享出来以便后来者少走弯路!网上很多资料说多数据源只能使用子报表方式,呵呵!
這是兩個用java作數據源的例子: 其中 javaBean 為用javaBean作數據源的例子 test 為用自定義數據源的例子 兩個例子都通過測試 想要的朋友可以下載看看! 祝大家玩得開心!