谁用过ireport+jasperreport做报表,我不知道如何下手

解决方案 »

  1.   

    http://download.csdn.net/source/245590
      

  2.   


    报表编译
    fileName xml文件位置
    JasperCompileManager.compileReportToFile(fileName);
    产生文件classic.jasper填充数据
    fileName xml文件位置
    parameters hashMap 设置参数(报表中查询语句的参数值)
    Connect 数据连接
    JasperFillManager.fillReportToFile(fileName, parameters,Connect);导出数据
    JasperExportManager.exportReportToHtmlFile(fileName);使用的jar
    jasperreport-0.5.0.jar;
    commons-digester.jar;
    commons-logging.jar;
    commons-collections.jar;
    commons-beanutils.jar;示例程序
    import dori.jasper.engine.*;
    import dori.jasper.engine.data.*;
    import dori.jasper.engine.export.*;
    import dori.jasper.engine.util.*;
    import dori.jasper.view.*;
    import java.sql.*;
    import java.util.*;
    import java.io.*;public class QueryReport
    {private static final String TASK_COMPILE = "compile";
    private static final String TASK_FILL = "fill";
    private static final String TASK_PRINT = "print";
    private static final String TASK_PDF = "pdf";
    private static final String TASK_XML = "xml";
    private static final String TASK_XML_EMBED = "xmlEmbed";
    private static final String TASK_HTML = "html";
    private static final String TASK_XLS = "xls";
    private static final String TASK_CSV = "csv";
    private static final String TASK_RUN = "run";/**
    *
    */
    public static void main(String[] args)
    {
    String fileName = null;
    String taskName = null;if(args.length == 0)
    {
    usage();
    return;
    }int k = 0;while ( args.length > k )
    {
    if ( args[k].startsWith("-T") )
    taskName = args[k].substring(2);
    if ( args[k].startsWith("-F") )
    fileName = args[k].substring(2);k++;
    }try
    {
    long start = System.currentTimeMillis();
    if (TASK_COMPILE.equals(taskName))
    {
    JasperCompileManager.compileReportToFile(fileName);
    System.err.println("Compile time : " + (System.currentTimeMillis() - start));
    System.exit(0);
    }
    else if (TASK_FILL.equals(taskName))
    {
    //Preparing parameters
    Map parameters = new HashMap();
    parameters.put("ReportTitle", "Address Report");
    parameters.put("FilterClause", "'Boston', 'Chicago', 'Oslo'");
    parameters.put("OrderClause", "City");JasperFillManager.fillReportToFile(fileName, parameters, getConnection());
    System.err.println("Filling time : " + (System.currentTimeMillis() - start));
    System.exit(0);
    }
    else if (TASK_PRINT.equals(taskName))
    {
    JasperPrintManager.printReport(fileName, true);
    System.err.println("Printing time : " + (System.currentTimeMillis() - start));
    System.exit(0);
    }
    else if (TASK_PDF.equals(taskName))
    {
    JasperExportManager.exportReportToPdfFile(fileName);
    System.err.println("PDF creation time : " + (System.currentTimeMillis() - start));
    System.exit(0);
    }
    else if (TASK_XML.equals(taskName))
    {
    JasperExportManager.exportReportToXmlFile(fileName, false);
    System.err.println("XML creation time : " + (System.currentTimeMillis() - start));
    System.exit(0);
    }
    else if (TASK_XML_EMBED.equals(taskName))
    {
    JasperExportManager.exportReportToXmlFile(fileName, true);
    System.err.println("XML creation time : " + (System.currentTimeMillis() - start));
    System.exit(0);
    }
    else if (TASK_HTML.equals(taskName))
    {
    JasperExportManager.exportReportToHtmlFile(fileName);
    System.err.println("HTML creation time : " + (System.currentTimeMillis() - start));
    System.exit(0);
    }
    else if (TASK_XLS.equals(taskName))
    {
    File sourceFile = new File(fileName);JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile);File destFile = new File(sourceFile.getParent(), jasperPrint.getName() + ".xls");JRXlsExporter exporter = new JRXlsExporter();exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
    exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, destFile.toString());
    exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);exporter.exportReport();System.err.println("XLS creation time : " + (System.currentTimeMillis() - start));
    System.exit(0);
    }
    else if (TASK_CSV.equals(taskName))
    {
    File sourceFile = new File(fileName);JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile);File destFile = new File(sourceFile.getParent(), jasperPrint.getName() + ".csv");JRCsvExporter exporter = new JRCsvExporter();exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
    exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, destFile.toString());exporter.exportReport();System.err.println("CSV creation time : " + (System.currentTimeMillis() - start));
    System.exit(0);
    }
    else if (TASK_RUN.equals(taskName))
    {
    //Preparing parameters
    Map parameters = new HashMap();
    parameters.put("ReportTitle", "Address Report");
    parameters.put("FilterClause", "'Boston', 'Chicago'");
    parameters.put("OrderClause", "City,");JasperRunManager.runReportToPdfFile(fileName, parameters, getConnection());
    System.err.println("PDF running time : " + (System.currentTimeMillis() - start));
    System.exit(0);
    }
    else
    {
    usage();
    System.exit(0);
    }
    }
    catch (JRException e)
    {
    e.printStackTrace();
    System.exit(1);
    }
    catch (Exception e)
    {
    e.printStackTrace();
    System.exit(1);
    }
    }private static void usage()
    {
    System.out.println( "QueryApp usage:" );
    System.out.println( "\tjava QueryApp -Ttask -Ffile" );
    System.out.println( "\tTasks : compile | fill1 | fill2 | fill3 | fill4 | print | pdf | xml | xmlEmbed | html | xls | csv | run" );
    }private static Connection getConnection() throws ClassNotFoundException, SQLException
    {
    //Change these settings according to your local configuration
    String driver = "org.gjt.mm.mysql.Driver";
    String connectString = "jdbc:mysql://sstfriend/esmart?useUnicode=true&characterEncoding=GBK";
    String user = "esmart";
    String password = "esmart";Class.forName(driver);
    Connection conn = DriverManager.getConnection(connectString, user, password);
    return conn;
    }
    }
      

  3.   

     JasperReports快速使用流程
    1. 主要类
    运行JasperReports 时使用的主要类
    dori.jasper.engine.JasperCompileManager
    dori.jasper.engine.JasperFillManager
    dori.jasper.engine.JasperPrintManager
    dori.jasper.engine.JasperExportManager
    这些类表现JasperReports引擎的正面(façade), 他们有各种静态方法简化API功能的访问并用来编译一个XML报表设计、填充报表、打印它或输出到PDF, HTML和 XML文件。
    dori.jasper.view.JasperViewer
    这个可用来观察产生的报表。
    dori.jasper.view.JasperDesignViewer
    这个可用来观察报表设计。
    2. 编译报表设计
    报表设计由一个具有在jasperreport.dtd 文件中定义的结构的XML文件来表现。为了根据这样的报表设计来产生报表,需要编译它。
    编译可通过使用由dori.jasper.engine.JasperCompileManager 类暴露的compileReportXXX()方法来完成。
    当编译一个报表设计时,引擎会创建一个包括所有报表表示式的Java类文件,这个类是使用Java编译器编译并在结果.jasper文件中存储字节码。
    默认情况下,JasperReports使用目前JVM类路径来编译报表文件(java.class.path系统属性)并以目前工作目录作为产生文件的临时存放位置。
    为了定制报表编译过程,JasperReports充许通过提供一个值给系统属性jasper.reports.compile.class.path来覆盖默认行为,这将被用报表类编译的类路径,赋一个值给系统属性jasper.reports.compile.temp,这个将被用作临时目录
    XML验证默认是打开的,可通过设定系统属性jasper.reports.compilation.xml.validation 为false来关闭。
    如果你想使用一个不同的Java编译器,如jikes,你可以使用jasper.reports.compiler系统属性来提供编译器程序的名字。在你使用jikes情况下,请确信你将rt.jar文件加入到类路径中,可通过上面提及的系统属性 jasper.reports.compile.class.path。
    You can see some of those in action in the supplied "webapp" samples. Check the jsp/compile.jsp and WEB-INF/classes/servlets/CompileServlet.java files.3. 观察报表设计
    报表设计可通过使用dori.jasper.view.JasperDesignViewer应用程序来察看。在其main()方法中,它接收那些包括报表设计的文件的名字来观看。这可以是XML文件或编译过的报表设计。
    4. 填充报表
    一个编译过的报表设计可通过调用dori.jasper.engine.JasperFillManager 类的fillReportXXX()方法来产生报表。
    5. 观看报表
    产生的报表可通使用dori.jasper.view.JasperViewer应用来观看。在其main()方法中它接受包括报表的文件的名字来观看。
    6. 打印报表
    产生的报表可使用doriJasper.engine.JasperPrintManager 类暴露的静态方法printReport(), printPage()或printPages()来打印。
    7.导出到PDF, HTML 或XML格式
    在已经填充一个报表后,我们也可以通过使用dori.jasper.engine.JasperExportManager类的exportReportXXX()方法来以 PDF, HTML或XML格式导出它。三.技术指南简述
    1.报表设计
    一个报表设计描述一个被JasperReports引擎用来分发动态内容到打印机,到屏幕或到WEB的模板。存储在数据库中的数据根据报表设计被组织达到准备到打印,页面导向文档。
    报表设计是在XML文件中定义并且必有一个特别的结构。此结构是在一个由JasperReports 引擎一起提供的DTD文件中声明的(XML类型定义文件jasperreport.dtd)。然后编译XML文件,为了在后面的报表填充操作中使用他们。
    为了创建一个简单的报表设计,我们不得不编辑一个有以下结构的XML文件:
    <?xml version="1.0"?>
    <!DOCTYPE jasperReport PUBLIC "-//JasperReports//DTD Report Design//EN"
    "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
    <jasperReport name="name_of_the_report" ... >
    ...
    </jasperReport>
    2.参数
    参数是传入到报表填充操作的对象引用
    参数可的构造SQL查询
    3.数据源
    JasperReports使用一个叫JRDataSource的接口来支持各种类型的数据源
    4.字段
    报表字段代表从数据源映射数据到报表产生程序的唯一途径
    5.表达式
    表达式是JasperReports的强大特点,它们可被声明的报表变量使用来执行各种计算。
    6.变量
    报表变量是才一个表达式开始时建立的特殊的对象。
    变量可以在相应的表达式中执行内置类型的计算,如:count,sum,average,lowest,highest等
    7.报表区
    当我们建立一个报表设计时,我们需要定义报表区的内容和布局。报表设计的整个结构基于以下报表区<title>, <pageHeader>, <columnHeader>, <groupHeader>, <detail>, <groupFooter>, <columnFoter>, <pageFooter>, <summary>.
    8.组
    组代表了在报表上组织数据的一个灵活的方式,当我们填充一个报表时,JasperReports引擎可字段检测组表达式<groupFooter> 和 <groupHeader>等是否完整。
    9.字体和Unicode支持
    你可以用任何语言来创建你的报表。
    10. Scriptlets
    Scriptlets是java代码序列,在每次报表事件发生时被执行。通过 scriptlets,用户可以影响被报表变量存储的值。
    当我们创建一个JasperReports scriptlet类时,开发者要实现或重载几个方法,象:beforeReportInit(), afterReportInit(), beforePageInit(), afterPageInit(), beforeGroupInit(), afterGroupInit()等,这些方法当填充报表时在适当的时候被报表引擎调用。