`
eneasy
  • 浏览: 126345 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

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

阅读更多
图示ireport 中使用javabean 作数据源开发 基于 jasperreports 报表 过程
——学习笔记系列之ireport起步
xmlin



本文不讲原理,因为网上的资源很多,本文以一个简单的日销售报表为例,记录在 ireport 中使用 javabe an 作数据源开发 基于 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 ,使用 bean 做为数据源还需要 commons-beanutils-1.7.jar, 如果需要生成 pdf 文件 , 还需要 itext-1.3.1.jar iTextAsian.jar, 如果使用动态编译 jrxml 文件,还需要 commons-digester-1.7.jar


二.创建 javabean


1.
创建 DailySales.java, 一个简单 VO bean

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 .生成数据源


import java.util.Arrays;

import java.util.Collection;

/**

* 简单工厂类,取得数据

* @author xmlin

*

*/

public class DailySalesFactory

{

// 为了在 ireport 中能够测试,必须使用 static 方法

public static Collection<DailySales> getBeanCollection()

{

// 数据源的生成,通常调用 dao 操作

List<DailySales> data = new ArrayList<DailySales>();

for ( int i = 0; i < 100; i++)

{

data.add( new DailySales( " 货号 " + i, " 产品 " + i, i, i * 100));

}

return data;

}

}


三.使用 ireport 开发报表样式

1.新建一个项目。

2.设置类路径,在菜单“ options” 中选择 Classpath, 点击在弹出框中的 add folder ,填写 javabean 编译成的 .class 文件存放的路径 . save Classpath 完成。如图


3.设置数据源.在菜单" Data "中选择” Connection/Data sources”, 点击在弹出框中的 new 按钮增加一个数据源.如图

其中 Name 随便取一个名字,T ype of Connection/Data 选择 JavaBeans set data source, 如果使用其它的数据源则选择其它的选项.F actory class 为我们刚才创建的 Factory 类,里面包含取得测试数据的静态方法 getBeanCollection() .用 Test 测试是否成功,点 Save 保存.

4. 设置活动连接.在菜单" Data "中选择” Set Active Connection”.

5. Report Query , 在菜单" Data "中选择” Report Query”, 填写 javabean, 即我们创建的 VO bean. 如图

. 设计报表.
设计日期字段如图

设计填充字段 , 如图

设计页数字段如图


设计好的报表样式如图

点菜单" build "中的" compile "进行编译,然后再” execute with connection datasource” 就可以看到报表的结果了.
报表设计完成,在 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 JRBeanCollectionDataSource(getBeanCollection() ) );

JasperViewer jrview = new JasperViewer(jasperPrint);

jrview.setPreferredSize( new Dimension(200,100));

jrview.setVisible( true );

}

catch (JRException e)

{

e.printStackTrace();

}

catch (Exception e)

{

e.printStackTrace();

}

}

}


运行生成的结果如图


生成各种格式的报表文件 :


public static void main(String[] args)

{

try

{

// 编译报表,并 jrxml 所在的目录中生成 jasper 文件

JasperCompileManager. compileReportToFile ( "d:\\test.jrxml" );

Map param = new HashMap ();

JasperPrint jasperPrint = JasperFillManager. fillReport ( "d:\\test.jasper" , param,

new JRBeanCollectionDataSource(DailySalesFactory. getBeanCollection ()));

// 生成 html pdf 也可以使用 JRExporter 来生成

JasperExportManager. exportReportToHtmlFile (jasperPrint, "d:\\test.html" );

JasperExportManager. exportReportToPdfFile (jasperPrint, "d:\\test.pdf" );


// 使用 JRExporter 来生成 XLS, 很多参数可以查 api ireport 的属性窗口

JRExporter xlsExporter = new JRXlsExporter();

ByteArrayOutputStream xlsOut = new ByteArrayOutputStream();

xlsExporter.setParameter(JRExporterParameter. JASPER_PRINT , jasperPrint);

xlsExporter.setParameter(JRExporterParameter. OUTPUT_STREAM , xlsOut);

xlsExporter.setParameter(JRXlsExporterParameter. IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS , Boolean. TRUE ); // 删除记录最下面的空行

xlsExporter.setParameter(JRXlsExporterParameter. IS_ONE_PAGE_PER_SHEET , Boolean. FALSE ); // 删除多余的 ColumnHeader

xlsExporter.setParameter(JRXlsExporterParameter. IS_WHITE_PAGE_BACKGROUND , Boolean. FALSE ); // 显示边框

xlsExporter.exportReport();


FileOutputStream out = new FileOutputStream( new File( "d:\\test.xls" ));

out.write(xlsOut.toByteArray());


// 使用 JRExporter 来生成 html , 很多参数可以查 api ireport 的属性窗口

JRExporter htmlExporter = new JRHtmlExporter();

ByteArrayOutputStream htmlOut = new ByteArrayOutputStream();

htmlExporter.setParameter(JRHtmlExporterParameter. JASPER_PRINT , jasperPrint);

htmlExporter.setParameter(JRHtmlExporterParameter. OUTPUT_STREAM , htmlOut);

htmlExporter.setParameter(JRHtmlExporterParameter. CHARACTER_ENCODING , "utf-8" );

htmlExporter.setParameter(JRHtmlExporterParameter. IS_USING_IMAGES_TO_ALIGN , Boolean. FALSE );

htmlExporter.exportReport();


FileOutputStream out2 = new FileOutputStream( new File( "d:\\test1.html" ));

out2.write(htmlOut.toByteArray());


}

catch (Exception e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}


}

分享到:
评论
7 楼 sokoo108 2010-11-10  
  ireport除了table组件 ,label或者 text组件就不能加边框嘛?

我要手动画个表还要手动画line,太bt了
6 楼 yupengfeiwangcui 2010-04-11  
多谢!看了你这个比什么都重要,解决了我的问题,被ireport搞惨了,差点对它失去希望了
5 楼 xia9527 2010-02-22  
能具体点么
4 楼 xia9527 2010-02-22  
classpath的那个路径  怎么配置啊
3 楼 xuyan2680 2009-08-13  
没有图片显示
2 楼 xuyan2680 2009-08-13  
很好,  
1 楼 xuyan2680 2009-08-13  
很好、很好、很好

相关推荐

Global site tag (gtag.js) - Google Analytics