图示ireport 中使用javabean 作数据源开发 基于 jasperreports 报表 过程 ——学习笔记系列之ireport起步 xmlin 本文不讲原理,因为网上的资源很多,本文以一个简单的日销售报表为例,记录在 ireport 中使用 javabe an 作数据源开发 基于 jasperreports 报表 过程 . 一.准备工作
二.创建 javabean
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 完成。如图
4. 设置活动连接.在菜单" Data "中选择” Set Active Connection”. 5. Report Query , 在菜单" Data "中选择” Report Query”, 填写 javabean, 即我们创建的 VO bean. 如图 6 . 设计报表. 设计填充字段 , 如图 设计页数字段如图 设计好的报表样式如图 点菜单" build "中的" compile "进行编译,然后再” execute with connection datasource” 就可以看到报表的结果了. 四.生成报表
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, newJRBeanCollectionDataSource(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(); } } |
|