图示ireport中使用javabean作数据源开发基于jasperreports报表过程
来源:互联网 发布:1元云购源码下载 编辑:程序博客网 时间:2024/05/21 14:49
图示ireport 中使用javabean 作数据源开发 基于 jasperreports 报表 过程
——学习笔记系列之ireport起步
xmlin
本文不讲原理,因为网上的资源很多,本文以一个简单的日销售报表为例,记录在ireport中使用javabean 作数据源开发 基于 jasperreports 报表 过程 .
一. 准备工作
1.正确安装jdk
2.到http://ireport.sourceforge.net/ 去下载ireport,本文使用1.3.1版本,解压iReport在任意目录,解压后的文件里面有一个iReport.bat,通过双击运行。
3.到http://jasperreports.sourceforge.net/index.html 下载jasperreport,本文使用的是1.3.1版本,解压到任意目录,开发中需要使用其中的jasperreports-1.3.1.jar , commons-logging-1.0.2.jar , commons-collections-2.1.jar.
1.正确安装jdk
2.到http://ireport.sourceforge.net/ 去下载ireport,本文使用1.3.1版本,解压iReport在任意目录,解压后的文件里面有一个iReport.bat,通过双击运行。
3.到http://jasperreports.sourceforge.net/index.html 下载jasperreport,本文使用的是1.3.1版本,解压到任意目录,开发中需要使用其中的jasperreports-1.3.1.jar , commons-logging-1.0.2.jar , commons-collections-2.1.jar.
二.创建javabean
1.创建DailySales.java,一个简单VO bean。
import java.io.Serializable;
import java.io.Serializable;
public class DailySales implements Serializable
{
private static final long serialVersionUID = 1L;
private String productNo ;
private String productName ;
private int number ;
private int money ;
private int id ;
public DailySales(String productNo, String productName, int number, int money)
{
this . productNo = productNo;
this . productName = productName;
this . number = number;
this . money = money;
}
public String getProductNo()
{
return productNo ;
}
public void setProductNo(String productNo)
{
this . productNo = productNo;
}
public String getProductName()
{
return productName ;
}
public void setProductName(String productName)
{
this . productName = productName;
}
public int getNumber()
{
return number ;
}
public void setNumber( int number)
{
this . number = number;
}
public int getMoney()
{
return money ;
}
public void setMoney( int money)
{
this . money = money;
}
public int getId()
{
return id ;
}
public void setId( int id)
{
this . id = id;
}
}
2. 创建 DailySalesDataSource.java, 这是报表的数据源。这个类实现了 jasperreports 中提供的数据源接口 JRDataSource, 实现其中的两个方法 :next() 和 getFieldValue(JRField field) 。
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;
public class DailySalesDataSource implements JRDataSource
{
/**
* 测试数据,实际项目中是动态获取,也不一定是数组,可以是其它的数据类型 .
*/
private Object[][] data =
{
{ " 货号 1" , " 物品1 " , 1,1000},
{ " 货号 2" , " 物品 2" , 2,2000},
{ " 货号 3" , " 物品 3" , 3,3000},
{ " 货号 4" , " 物品 4" , 4,4000},
{ " 货号 5" , " 物品 5" , 5,5000},
{ " 货号 6" , " 物品 6" , 6,6000},
{ " 货号 7" , " 物品 7" , 7,7000},
{ " 货号 8" , " 物品 8" , 8,8000},
{ " 货号 9" , " 物品 9" , 9,9000},
{ " 货号 10" , " 物品 10" , 10,10000}
};
private int index = -1;
public DailySalesDataSource()
{
}
/**
* 实现了 JRDataSource 中的方法.判断是否还有下一个.
*/
public boolean next() throws JRException
{
index ++;
return ( index < data . length );
}
/**
* 实现了 JRDataSource 中的方法.
* @param field 是对应报表中的要填充的字段的名称.
*/
public Object getFieldValue(JRField field ) throws JRException
{
Object value = null ;
String fieldName = field .getName();
if ( "id" .equals(fieldName))
{
value = index+1 ;
}
else if ( "productNo" .equals(fieldName))
{
value = data [ index ][0];
}
else if ( "productName" .equals(fieldName))
{
value = data [ index ][1];
}
else if ( "number" .equals(fieldName))
{
value = data [ index ][2];
}
else if ( "money" .equals(fieldName))
{
value = data [ index ][3];
}
return value;
}
}
3 .在 ireport 中使用,取得测试数据源 , 如果不使用 ireport 工具,则只需要上面的两个类。
import java.util.Arrays;
import java.util.Collection;
/**
* 简单工厂类,取得测试数据
* @author xmlin
*
*/
public class DailySalesFactory
{
private static DailySales[] data =
{
new DailySales( " 货号 1" , " 物品1 " , 1,1000),
new DailySales( " 货号 2" , " 物品 2" , 2,2000),
new DailySales( " 货号 3" , " 物品 3" , 3,3000),
new DailySales( " 货号 4" , " 物品 4" , 4,4000),
new DailySales( " 货号 5" , " 物品 5" , 5,5000),
new DailySales( " 货号 6" , " 物品 6" , 6,6000),
new DailySales( " 货号 7" , " 物品 7" , 7,7000),
new DailySales( " 货号 8" , " 物品 8" , 8,8000),
new DailySales( " 货号 9" , " 物品 9" , 9,9000),
new DailySales( " 货号 10" , " 物品 10" , 10,10000)
};
public static Object[] getBeanArray()
{
return data ;
}
public static Collection getBeanCollection()
{
return Arrays.asList ( data );
}
}
三.使用ireport开发报表样式
1.新建一个项目。
2.设置类路径,在菜单“options”中选择Classpath,点击在弹出框中的add folder,填写javabean编译成的.class文件存放的路径. 点save Classpath完成。如图
3.设置数据源.在菜单"Data"中选择”Connection/Data sources”, 点击在弹出框中的new按钮增加一个数据源.如图
其中Name随便取一个名字,Type of Connection/Data 选择 JavaBeans set data source,如果使用其它的数据源则选择其它的选项.Factory class 为我们刚才创建的Factory类,里面包含取得测试数据的静态方法getBeanCollection().用Test测试是否成功,点Save保存.(如果不成功的话,则应该看看那Factory这个类是不是在包内,这个类不能放在包内。应该将其放到classpath下面)
4. 设置活动连接.在菜单"Data"中选择”Set Active Connection”.
5.Report Query , 在菜单"Data"中选择” Report Query”,填写javabean,即我们创建的VO bean.如图
6.设计报表.
设计日期字段如图
设计日期字段如图
设计填充字段,如图
设计页数字段如图
设计好的报表样式如图
点菜单"build"中的"compile"进行编译,然后再”execute with connection datasource”就可以看到报表的结果了.
报表设计完成,在ireport的执行路径下会生成一个DailySales.jasper的文件.
四.编写测试类.
生成的DailySales.jasper可以在web服务端生成报表,也可以在肥客户端如swing生成,这里写一个在肥客户端和简单运用.
报表设计完成,在ireport的执行路径下会生成一个DailySales.jasper的文件.
四.编写测试类.
生成的DailySales.jasper可以在web服务端生成报表,也可以在肥客户端如swing生成,这里写一个在肥客户端和简单运用.
import java.awt.Dimension;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;
public class TestReport
{
public static void main(String[] args)
{
TestReport.showReport ();
}
private static void showReport()
{
String reportPath = "D://dailySales.jasper" ;
Map parameters = new HashMap();
// 如果报表中有用到变量,在这里给它赋值.
//parameters.put("ReportTitle", " 报表标题 ");
try
{
JasperReport jasperReport = (JasperReport) JRLoader.loadObject (reportPath);
JasperPrint jasperPrint = JasperFillManager.fillReport (jasperReport, parameters, new DailySalesDataSource());
JasperViewer jrview = new JasperViewer(jasperPrint);
jrview.setPreferredSize( new Dimension(200,100));
jrview.setVisible( true );
}
catch (JRException e)
{
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
转自:http://eneasy.javaeye.com/blog/123348
- 图示ireport中使用javabean作数据源开发基于jasperreports报表过程
- ireport 中使用javabean 作数据源开发
- ireport+jasperreport开源报表中使用javabean作为数据源的详细实现过程
- iReport 使用JavaBean作为数据源开发报表(SSM)
- Ireport使用子报表(使用JavaBean集合作为数据源)
- iReport+JasperReports报表开发入门篇
- ireport+jasperreports报表开发总结一(Struts2)
- iReport + jasperreports + struts 2 集成开发报表
- ireport 导入javabean数据源生成报表!
- ireport制作报报表 数据源设置JavaBean
- ireport子报表《javabean数据源,springmvc实现》
- ireport 使用JRMapCollectionDataSource作数据源
- iReport使用javabean做数据源
- iReport+JasperReports Server开发过程的Troubleshooting
- iRport+jasperreports 制作 Excel 报表开发过程中问题解决办法
- iReport 笔记(六) 使用子报表(使用JavaBean集合作为数据源)
- iReport 笔记(六) 使用子报表(使用JavaBean集合作为数据源)
- iReport 笔记(六) 使用子报表(使用JavaBean集合作为数据源) 【转】
- 智能人机交互
- VB.net使用多线程与委托解决时间延迟的问题
- 社交圈
- ado,odbc,ole等数据库连接技术小析
- C++中DDB与DIB位图 与 BMP文件格式
- 图示ireport中使用javabean作数据源开发基于jasperreports报表过程
- Android模拟器上网问题
- 从 Windows的 粘滞键 看国内外软件行业的社会责任感
- Qt4.5.0内存映射文件示例
- 关于Load Balance出现ViewState异常的解决方案
- 智能人机交互参考文献
- 一读一写无锁队列c++实现
- 安装时出现蓝屏,代码:stop:0X000007B
- 渗透某知名公司内部网络