`

jaspereport学习资料

阅读更多
1)定制报表格式。
  有二种方式,一种就是写jrxml文件,其实就是xml文件,只不过是后缀名不一样罢了。另一种方式更直接,就是生成一个JasperDesign类的实例,在japsperDesign中自己定义模板。jrxml文件也是通过一个JRXmlLoad加载过来,转成JasperDesign类的实例。也就是说写jrxml文件还需要进行解析,加载。现实中我们使用的报表一般格式比较固定,因而可以通过先使用iReport工具生成模板,再加载解析的方式。这种方式简单,而且可见性强。
2)填充数据。
  在最新版(2007.4.30发布)的jasperReports1.3.3中,支持了很多的格式,包括了对于Hibernate的支持。填充数据对于我们经常使用的来说,一般是二种方式,一种方式是通过JDBC连接提供数据源,一种就是通过javaBean的集合提供数据源。当然还有web Service的xml文件提供的。我的建议是,如果你的程序中的统计直接使用Jdbc就可以完成,那么就使用jdbc数据源的方法,反之,使用 javaBean的集合是不错的选择,因为这样不会在意你的数据的来源,你也可以任意处理,比如说,要通过权限检查的数据才在报表中生成的话,就可以过滤到不符合权限的数据。
3)显示或打印。
  显示,即将JasperReport生成的文件直接显示出来,打印所使用的方式其实就是生成文件,然后调用打印来对文件进行打印。
看起来是不是很简单,对,确实很简单。
笔者主要从事基于B/S模式的开发,相信大部分人的使用也是基于web进行使用。故笔者对于基于web的开发进行详细讲述。

1、工程环境配置。
将以下包加入WEB-INF/lib中。
commons-beanutils-1.7.jar;commons-collections-2.1.jar;commons-digester-1.7.jar;commons-logging-1.0.2.jar;commons-logging-api-1.0.2.jar;itext-1.3.1.jar;jasperreports-1.3.3.jar;jdt-compiler-3.1.1.jar;jxl-2.6.jar;png-encoder-1.5.jar;poi-2.0-final-20040126.jar
   以上包是jasperReport必须。
2、iReport的安装
   这个很简单,直接下一步就可以了。
3、使用iReport生成 .jasper文件
.jasper是经过编译的japserReport模板,即.jrxml编译后的。
对于iReport的使用网络上已经有了详细的中文的文档,具体可以下载附件查看。使用.jasper文件可以避免在系统中再进行编译,增加系统的压力。
4、数据填充
数据填充是相对于比较重要的一步,数据填充的目的是为了将数据填充进去,生成一个JapserPrint对象。笔者在之前已经阐述过,现在主要是基于关系型数据库(比较简单的,没有权限控制的),以及基于JavaBean Collection进行数据填充。进行数据填充的基本就是一定要实现JRDataSource,JRDataSource定义了二个方法,一个是指针移动的方法next(),另一个是取值的getFieldValue()方法,用来取值填充。
对于关系型数据库,即直接利用数据库的表来生成报表的,只需要传入一个Java Connection即可。JasperReport已经有了个默认的实现的JRDataSource的接口了。对于Java Conncetion的获得,笔者建议使用工厂方法或者使用Spring方式来获得。可以参照笔者写的如下:



源自:http://www.iteye.com/topic/78678





         1. /**   
         2.  * @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd.   
         3.  * @author Jimmy.Shine 2007-5-11   
         4.  */    
         5. package cn.com.reachway.framework.report;     
         6.     
         7. import java.sql.Connection;     
         8. import java.sql.DriverManager;     
         9.     
        10. import cn.com.reachway.framework.exception.JasperReportException;     
        11.     
        12. /**   
        13.  * Used for get a JDBC connection for Jasper Report   
        14.  */    
        15. public class JDBCConnection {     
        16.  /**   
        17.   * Which Jdbc driver were used. Like: "net.sourceforge.jtds.jdbc.Driver"   
        18.   */    
        19.  private String jdbcDriver;     
        20.  /**   
        21.   * The jdbc url,define which database server,which db. Like:   
        22.   * "jdbc:jtds:sqlserver://192.168.1.50:1433;DatabaseName=JAVA5;SelectMethod=Cursor"   
        23.   */    
        24.  private String jdbcUrl;     
        25.     
        26.  private String dbUser;     
        27.     
        28.  private String dbPassword;     
        29.     
        30.  public String getDbPassword() {     
        31.   return dbPassword;     
        32.  }     
        33.     
        34.  public void setDbPassword(String dbPassword) {     
        35.   this.dbPassword = dbPassword;     
        36.  }     
        37.     
        38.  public String getDbUser() {     
        39.   return dbUser;     
        40.  }     
        41.     
        42.  public void setDbUser(String dbUser) {     
        43.   this.dbUser = dbUser;     
        44.  }     
        45.     
        46.  public String getJdbcDriver() {     
        47.   return jdbcDriver;     
        48.  }     
        49.     
        50.  public void setJdbcDriver(String jdbcDriver) {     
        51.   this.jdbcDriver = jdbcDriver;     
        52.  }     
        53.     
        54.  public String getJdbcUrl() {     
        55.   return jdbcUrl;     
        56.  }     
        57.     
        58.  public void setJdbcUrl(String jdbcUrl) {     
        59.   this.jdbcUrl = jdbcUrl;     
        60.  }     
        61.     
        62.  public JDBCConnection() {     
        63.   super();     
        64.  }     
        65.  /**   
        66.   * Get the Connection    
        67.   * @return connection   
        68.   * @throws JasperReportException   
        69.   */    
        70.  public Connection getConnection() throws JasperReportException {     
        71.   Connection con;     
        72.   try {     
        73.    check();     
        74.    Class.forName(this.jdbcDriver);     
        75.    con = DriverManager.getConnection(this.jdbcUrl, this.dbUser, this.dbPassword);     
        76.    return con;     
        77.   } catch (Exception e) {     
        78.    e.printStackTrace();     
        79.    throw new JasperReportException("Get JDBC Connection Error");     
        80.   }     
        81.  }     
        82.       
        83.  /**   
        84.   * Check the Configure   
        85.   * @throws JasperReportException   
        86.   */    
        87.  private void check() throws JasperReportException {     
        88.   if (this.jdbcDriver == null || this.jdbcDriver.equals("") || this.jdbcUrl == null || this.jdbcUrl.equals("")     
        89.     || this.dbUser == null || this.dbUser.equals("") || this.dbPassword == null) {     
        90.    throw new JasperReportException("Jdbc Configure error!");     
        91.   }     
        92.  }     
        93.     
        94. }     
        95.     

      /**  
       * @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd.  
       * @author Jimmy.Shine 2007-5-11  
       */  
      package cn.com.reachway.framework.report;   
        
      import java.sql.Connection;   
      import java.sql.DriverManager;   
        
      import cn.com.reachway.framework.exception.JasperReportException;   
        
      /**  
       * Used for get a JDBC connection for Jasper Report  
       */  
      public class JDBCConnection {   
       /**  
        * Which Jdbc driver were used. Like: "net.sourceforge.jtds.jdbc.Driver"  
        */  
       private String jdbcDriver;   
       /**  
        * The jdbc url,define which database server,which db. Like:  
        * "jdbc:jtds:sqlserver://192.168.1.50:1433;DatabaseName=JAVA5;SelectMethod=Cursor"  
        */  
       private String jdbcUrl;   
        
       private String dbUser;   
        
       private String dbPassword;   
        
       public String getDbPassword() {   
        return dbPassword;   
       }   
        
       public void setDbPassword(String dbPassword) {   
        this.dbPassword = dbPassword;   
       }   
        
       public String getDbUser() {   
        return dbUser;   
       }   
        
       public void setDbUser(String dbUser) {   
        this.dbUser = dbUser;   
       }   
        
       public String getJdbcDriver() {   
        return jdbcDriver;   
       }   
        
       public void setJdbcDriver(String jdbcDriver) {   
        this.jdbcDriver = jdbcDriver;   
       }   
        
       public String getJdbcUrl() {   
        return jdbcUrl;   
       }   
        
       public void setJdbcUrl(String jdbcUrl) {   
        this.jdbcUrl = jdbcUrl;   
       }   
        
       public JDBCConnection() {   
        super();   
       }   
       /**  
        * Get the Connection   
        * @return connection  
        * @throws JasperReportException  
        */  
       public Connection getConnection() throws JasperReportException {   
        Connection con;   
        try {   
         check();   
         Class.forName(this.jdbcDriver);   
         con = DriverManager.getConnection(this.jdbcUrl, this.dbUser, this.dbPassword);   
         return con;   
        } catch (Exception e) {   
         e.printStackTrace();   
         throw new JasperReportException("Get JDBC Connection Error");   
        }   
       }   
          
       /**  
        * Check the Configure  
        * @throws JasperReportException  
        */  
       private void check() throws JasperReportException {   
        if (this.jdbcDriver == null || this.jdbcDriver.equals("") || this.jdbcUrl == null || this.jdbcUrl.equals("")   
          || this.dbUser == null || this.dbUser.equals("") || this.dbPassword == null) {   
         throw new JasperReportException("Jdbc Configure error!");   
        }   
       }   


      }    







   1. /**   
   2.  * @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd.   
   3.  * @author Jimmy.Shine 2007-5-14   
   4.  */    
   5. package cn.com.reachway.framework.report.dataSource;     
   6.     
   7. import net.sf.jasperreports.engine.JRDataSource;     
   8. import net.sf.jasperreports.engine.JRException;     
   9. import net.sf.jasperreports.engine.JRField;     
  10.     
  11. /**   
  12.  * 报表的dataSource的基类,所有利用DataSource产生报表的继承此类   
  13.  */    
  14. public abstract class ReportDataSource implements JRDataSource {     
  15.     
  16.  /**   
  17.   * 取值   
  18.   */    
  19.  public abstract Object getFieldValue(JRField jrField) throws JRException;     
  20.     
  21.  /**   
  22.   * 指针移动   
  23.   */    
  24.  public abstract boolean next() throws JRException;     
  25.     
  26. }     
  27.     

/**  
* @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd.  
* @author Jimmy.Shine 2007-5-14  
*/  
package cn.com.reachway.framework.report.dataSource;   
  
import net.sf.jasperreports.engine.JRDataSource;   
import net.sf.jasperreports.engine.JRException;   
import net.sf.jasperreports.engine.JRField;   
  
/**  
* 报表的dataSource的基类,所有利用DataSource产生报表的继承此类  
*/  
public abstract class ReportDataSource implements JRDataSource {   
  
/**  
  * 取值  
  */  
public abstract Object getFieldValue(JRField jrField) throws JRException;   
  
/**  
  * 指针移动  
  */  
public abstract boolean next() throws JRException;   
  
}   
  



  这样可以共用配置文件中的jdbc连接的相关参数。
对于其它的数据源,JavaBean Collection,笔者采用了一个抽象类,使用抽象类的目的,是为了使开发者尽可能不用直接接触jasperReport(此为笔者自己的方式,笔者是PM,为了考虑底下的人的开发)。以下为抽象类以及笔者提供的一个sample:







         1. /**   
         2.  * @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd.   
         3.  * @author Jimmy.Shine 2007-5-14   
         4.  */    
         5. package cn.com.reachway.framework.report.dataSource;     
         6.     
         7. import java.util.ArrayList;     
         8. import java.util.List;     
         9.     
        10. import net.sf.jasperreports.engine.JRException;     
        11. import net.sf.jasperreports.engine.JRField;     
        12.     
        13. /**   
        14.  * 利用JavaBean Collection生成ReportDataSource的例子   
        15.  */    
        16. public class ReportDataSourceSample extends ReportDataSource {     
        17.     
        18.  private List docs = new ArrayList();     
        19.     
        20.  private int index = -1;     
        21.     
        22.  public ReportDataSourceSample() {     
        23.   for (int i = 0; i < 10; i++) {     
        24.    Document doc = new Document("ViewTimes is:" + i, i);     
        25.    this.docs.add(doc);     
        26.   }     
        27.  }     
        28.     
        29.  // 内部类,作为demo时使用     
        30.  private class Document {     
        31.   private String name;     
        32.     
        33.   private int viewTimes;     
        34.     
        35.   public String getName() {     
        36.    return name;     
        37.   }     
        38.     
        39.   public void setName(String name) {     
        40.    this.name = name;     
        41.   }     
        42.     
        43.   public int getViewTimes() {     
        44.    return viewTimes;     
        45.   }     
        46.     
        47.   public void setViewTimes(int viewTimes) {     
        48.    this.viewTimes = viewTimes;     
        49.   }     
        50.     
        51.   public Document() {     
        52.   }     
        53.     
        54.   public Document(String name, int viewTimes) {     
        55.    this.name = name;     
        56.    this.viewTimes = viewTimes;     
        57.   }     
        58.  }     
        59.     
        60.  public List getDocs() {     
        61.   return docs;     
        62.  }     
        63.     
        64.  public void setDocs(List docs) {     
        65.   this.docs = docs;     
        66.  }     
        67.     
        68.  @Override    
        69.  public Object getFieldValue(JRField jrField) throws JRException {     
        70.     
        71.   String fieldName = jrField.getName();     
        72.   Document doc = this.docs.get(index);     
        73.   if ("name".equals(fieldName)) {     
        74.    return doc.getName();     
        75.   }     
        76.   if ("viewTimes".equals(fieldName)) {     
        77.    return doc.getViewTimes();     
        78.   }     
        79.   return null;     
        80.  }     
        81.     
        82.  @Override    
        83.  public boolean next() throws JRException {     
        84.   index++;     
        85.   return (index < this.docs.size());     
        86.  }     
        87. }     
        88.     

      /**  
       * @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd.  
       * @author Jimmy.Shine 2007-5-14  
       */  
      package cn.com.reachway.framework.report.dataSource;   
        
      import java.util.ArrayList;   
      import java.util.List;   
        
      import net.sf.jasperreports.engine.JRException;   
      import net.sf.jasperreports.engine.JRField;   
        
      /**  
       * 利用JavaBean Collection生成ReportDataSource的例子  
       */  
      public class ReportDataSourceSample extends ReportDataSource {   
        
       private List docs = new ArrayList();   
        
       private int index = -1;   
        
       public ReportDataSourceSample() {   
        for (int i = 0; i < 10; i++) {   
         Document doc = new Document("ViewTimes is:" + i, i);   
         this.docs.add(doc);   
        }   
       }   
        
       // 内部类,作为demo时使用   
       private class Document {   
        private String name;   
        
        private int viewTimes;   
        
        public String getName() {   
         return name;   
        }   
        
        public void setName(String name) {   
         this.name = name;   
        }   
        
        public int getViewTimes() {   
         return viewTimes;   
        }   
        
        public void setViewTimes(int viewTimes) {   
         this.viewTimes = viewTimes;   
        }   
        
        public Document() {   
        }   
        
        public Document(String name, int viewTimes) {   
         this.name = name;   
         this.viewTimes = viewTimes;   
        }   
       }   
        
       public List getDocs() {   
        return docs;   
       }   
        
       public void setDocs(List docs) {   
        this.docs = docs;   
       }   
        
       @Override  
       public Object getFieldValue(JRField jrField) throws JRException {   
        
        String fieldName = jrField.getName();   
        Document doc = this.docs.get(index);   
        if ("name".equals(fieldName)) {   
         return doc.getName();   
        }   
        if ("viewTimes".equals(fieldName)) {   
         return doc.getViewTimes();   
        }   
        return null;   
       }   
        
       @Override  
       public boolean next() throws JRException {   
        index++;   
        return (index < this.docs.size());   
       }   
      }   
        

      以上的例子应当很清楚的写明了如何生成数据源。
      对于数据源的填充,笔者使用了二个类,分别用来对应使用Connction及JavaBean Collection进行填充。





         1. /**   
         2.  * @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd.   
         3.  * @author Jimmy.Shine 2007-5-12   
         4.  */    
         5. package cn.com.reachway.framework.report.jasperPrint;     
         6.     
         7. import java.io.File;     
         8. import java.sql.Connection;     
         9. import java.util.Map;     
        10.     
        11. import net.sf.jasperreports.engine.JRException;     
        12. import net.sf.jasperreports.engine.JasperFillManager;     
        13. import net.sf.jasperreports.engine.JasperPrint;     
        14. import net.sf.jasperreports.engine.JasperReport;     
        15. import net.sf.jasperreports.engine.util.JRLoader;     
        16. import cn.com.reachway.framework.exception.JasperReportException;     
        17.     
        18. /**   
        19.  * 使用报表模板及数据等来生成JapserPrint   
        20.  */    
        21. public class JasperPrintWithConnection {     
        22.  /** 传入的参数 */    
        23.  private Map params;     
        24.  /** 模板文件的地址 */    
        25.  private String reportFilePath;     
        26.  /** JDBC connection */    
        27.  private Connection con;     
        28.     
        29.  public Connection getCon() {     
        30.   return con;     
        31.  }     
        32.     
        33.  public void setCon(Connection con) {     
        34.   this.con = con;     
        35.  }     
        36.     
        37.  public Map getParams() {     
        38.   return params;     
        39.  }     
        40.     
        41.  public void setParams(Map params) {     
        42.   this.params = params;     
        43.  }     
        44.     
        45.  public String getReportFilePath() {     
        46.   return reportFilePath;     
        47.  }     
        48.     
        49.  public void setReportFilePath(String reportFilePath) throws JasperReportException {     
        50.   if (reportFilePath == null || !reportFilePath.endsWith(".jasper"))     
        51.    throw new JasperReportException("您传入的模板文件格式不对,请传入以.jasper为后缀的文件!");     
        52.   this.reportFilePath = reportFilePath;     
        53.  }     
        54.     
        55.  public JasperPrintWithConnection() {     
        56.   super();     
        57.  }     
        58.     
        59.  public JasperPrintWithConnection(String reportFilePath, Map params, Connection con) throws JasperReportException {     
        60.   if (reportFilePath == null || !reportFilePath.endsWith(".jasper"))     
        61.    throw new JasperReportException("模板文件格式不对,请传入以.jasper为后缀的文件!");     
        62.   if (con == null)     
        63.    throw new JasperReportException("Conncetion不应当为null!");     
        64.   this.setReportFilePath(reportFilePath);     
        65.   this.setParams(params);     
        66.   this.setCon(con);     
        67.  }     
        68.       
        69.  /**   
        70.   * 取得JasperPrint   
        71.   * @return   
        72.   * @throws JasperReportException   
        73.   */    
        74.  public JasperPrint getJasperPrint() throws JasperReportException {     
        75.   File reportFile = new File(this.reportFilePath);     
        76.   if (!reportFile.exists())     
        77.    throw new JasperReportException("传入的模板文件不存在!");     
        78.     
        79.   try {     
        80.    // Load编译好的模板     
        81.    JasperReport jasperReport = (JasperReport) JRLoader.loadObject(reportFile.getPath());     
        82.    // 进行数据填充     
        83.    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, this.params, this.con);     
        84.    return jasperPrint;     
        85.     
        86.   } catch (JRException jre) {     
        87.    jre.printStackTrace();     
        88.    throw new JasperReportException("在进行数据填充时发生了错误中,请检查是否是数据库连接错误或者是用来填充的参数map有误!");     
        89.   }     
        90.     
        91.  }     
        92. }     
        93.     

      /**  
       * @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd.  
       * @author Jimmy.Shine 2007-5-12  
       */  
      package cn.com.reachway.framework.report.jasperPrint;   
        
      import java.io.File;   
      import java.sql.Connection;   
      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 cn.com.reachway.framework.exception.JasperReportException;   
        
      /**  
       * 使用报表模板及数据等来生成JapserPrint  
       */  
      public class JasperPrintWithConnection {   
       /** 传入的参数 */  
       private Map params;   
       /** 模板文件的地址 */  
       private String reportFilePath;   
       /** JDBC connection */  
       private Connection con;   
        
       public Connection getCon() {   
        return con;   
       }   
        
       public void setCon(Connection con) {   
        this.con = con;   
       }   
        
       public Map getParams() {   
        return params;   
       }   
        
       public void setParams(Map params) {   
        this.params = params;   
       }   
        
       public String getReportFilePath() {   
        return reportFilePath;   
       }   
        
       public void setReportFilePath(String reportFilePath) throws JasperReportException {   
        if (reportFilePath == null || !reportFilePath.endsWith(".jasper"))   
         throw new JasperReportException("您传入的模板文件格式不对,请传入以.jasper为后缀的文件!");   
        this.reportFilePath = reportFilePath;   
       }   
        
       public JasperPrintWithConnection() {   
        super();   
       }   
        
       public JasperPrintWithConnection(String reportFilePath, Map params, Connection con) throws JasperReportException {   
        if (reportFilePath == null || !reportFilePath.endsWith(".jasper"))   
         throw new JasperReportException("模板文件格式不对,请传入以.jasper为后缀的文件!");   
        if (con == null)   
         throw new JasperReportException("Conncetion不应当为null!");   
        this.setReportFilePath(reportFilePath);   
        this.setParams(params);   
        this.setCon(con);   
       }   
          
       /**  
        * 取得JasperPrint  
        * @return  
        * @throws JasperReportException  
        */  
       public JasperPrint getJasperPrint() throws JasperReportException {   
        File reportFile = new File(this.reportFilePath);   
        if (!reportFile.exists())   
         throw new JasperReportException("传入的模板文件不存在!");   
        
        try {   
         // Load编译好的模板   
         JasperReport jasperReport = (JasperReport) JRLoader.loadObject(reportFile.getPath());   
         // 进行数据填充   
         JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, this.params, this.con);   
         return jasperPrint;   
        
        } catch (JRException jre) {   
         jre.printStackTrace();   
         throw new JasperReportException("在进行数据填充时发生了错误中,请检查是否是数据库连接错误或者是用来填充的参数map有误!");   
        }   
        
       }   
      }            



               1. /**   
               2.  * @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd.   
               3.  * @author Jimmy.Shine 2007-5-14   
               4.  */    
               5. package cn.com.reachway.framework.report.jasperPrint;     
               6.     
               7. import java.io.File;     
               8. import java.util.Map;     
               9.     
              10. import net.sf.jasperreports.engine.JRDataSource;     
              11. import net.sf.jasperreports.engine.JRException;     
              12. import net.sf.jasperreports.engine.JasperFillManager;     
              13. import net.sf.jasperreports.engine.JasperPrint;     
              14. import net.sf.jasperreports.engine.JasperReport;     
              15. import net.sf.jasperreports.engine.util.JRLoader;     
              16. import cn.com.reachway.framework.exception.JasperReportException;     
              17.     
              18. /**   
              19.  *    
              20.  */    
              21. public class JasperPrintWithDataSource {     
              22.  /** 传入的参数 */    
              23.  private Map params;     
              24.  /** 模板文件的地址 */    
              25.  private String reportFilePath;     
              26.  /** dataSrouce */    
              27.  private JRDataSource dataSource;     
              28.     
              29.  public JRDataSource getDataSource() {     
              30.   return dataSource;     
              31.  }     
              32.     
              33.  public void setDataSource(JRDataSource dataSource) {     
              34.   this.dataSource = dataSource;     
              35.  }     
              36.     
              37.  public Map getParams() {     
              38.   return params;     
              39.  }     
              40.     
              41.  public void setParams(Map params) {     
              42.   this.params = params;     
              43.  }     
              44.     
              45.  public String getReportFilePath() {     
              46.   return reportFilePath;     
              47.  }     
              48.     
              49.  public void setReportFilePath(String reportFilePath) throws JasperReportException {     
              50.   if (reportFilePath == null || !reportFilePath.endsWith(".jasper"))     
              51.    throw new JasperReportException("您传入的模板文件格式不对,请传入以.jasper为后缀的文件!");     
              52.   this.reportFilePath = reportFilePath;     
              53.  }     
              54.     
              55.  public JasperPrintWithDataSource() {     
              56.   super();     
              57.  }     
              58.     
              59.  public JasperPrintWithDataSource(String reportFilePath, Map params, JRDataSource dataSource)     
              60.    throws JasperReportException {     
              61.   if (reportFilePath == null || !reportFilePath.endsWith(".jasper"))     
              62.    throw new JasperReportException("模板文件格式不对,请传入以.jasper为后缀的文件!");     
              63.   if (dataSource == null)     
              64.    throw new JasperReportException("DataSource不应当为null!");     
              65.   this.setReportFilePath(reportFilePath);     
              66.   this.setParams(params);     
              67.   this.setDataSource(dataSource);     
              68.  }     
              69.  /**   
              70.   * 取得JasperPrint   
              71.   * @return   
              72.   * @throws JasperReportException   
              73.   */    
              74.  public JasperPrint getJasperPrint() throws JasperReportException {     
              75.   File reportFile = new File(this.reportFilePath);     
              76.   if (!reportFile.exists())     
              77.    throw new JasperReportException("传入的模板文件不存在!");     
              78.     
              79.   try {     
              80.    // Load编译好的模板     
              81.    JasperReport jasperReport = (JasperReport) JRLoader.loadObject(reportFile.getPath());     
              82.    // 进行数据填充     
              83.    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, this.params, this.dataSource);     
              84.    return jasperPrint;     
              85.     
              86.   } catch (JRException jre) {     
              87.    jre.printStackTrace();     
              88.    throw new JasperReportException("在进行数据填充时发生了错误中,请检查是否是数据库连接错误或者是用来填充的参数map有误!");     
              89.   }     
              90.     
              91.  }     

              92. }





HTML格式的:



   1. /**  
   2.  * @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd.  
   3.  * @author Jimmy.Shine 2007-5-12  
   4.  */    
   5. package cn.com.reachway.framework.report.export;    
   6.     
   7. import java.io.IOException;    
   8. import java.io.PrintWriter;    
   9. import java.sql.Connection;    
  10. import java.util.Map;    
  11.     
  12. import javax.servlet.http.HttpServletRequest;    
  13. import javax.servlet.http.HttpServletResponse;    
  14.     
  15. import net.sf.jasperreports.engine.JRDataSource;    
  16. import net.sf.jasperreports.engine.JRExporterParameter;    
  17. import net.sf.jasperreports.engine.JasperPrint;    
  18. import net.sf.jasperreports.engine.export.JRHtmlExporter;    
  19. import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;    
  20. import net.sf.jasperreports.j2ee.servlets.ImageServlet;    
  21. import cn.com.reachway.framework.exception.JasperReportException;    
  22. import cn.com.reachway.framework.report.jasperPrint.JasperPrintWithConnection;    
  23. import cn.com.reachway.framework.report.jasperPrint.JasperPrintWithDataSource;    
  24.     
  25. /**  
  26.  * 利用报表生成HTML格式报表  
  27.  */    
  28. public class HTMLExport {    
  29.     
  30.     /**  
  31.      * 导出报表  
  32.      *   
  33.      * @param request  
  34.      * @param response  
  35.      * @param reportFilePath  
  36.      * @param params  
  37.      * @param con  
  38.      * @throws JasperReportException  
  39.      */    
  40.     public void export(HttpServletRequest request, HttpServletResponse response, String reportFilePath, Map params,    
  41.             Connection con) throws JasperReportException {    
  42.         try {    
  43.             PrintWriter out = response.getWriter();    
  44.             try {    
  45.                 response.setContentType("text/html;charset=UTF-8");    
  46.                 JasperPrint jasperPrint = new JasperPrintWithConnection(reportFilePath, params, con).getJasperPrint();    
  47.                 // 使用JRHtmlExproter导出Html格式    
  48.                 JRHtmlExporter exporter = new JRHtmlExporter();    
  49.                 request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);    
  50.                 exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);    
  51.                 exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);    
  52.                 exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "./servlets/image?image=");    
  53.                 exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8");    
  54.                 // 导出    
  55.                 exporter.exportReport();    
  56.             } catch (Exception e) {    
  57.                 e.printStackTrace();    
  58.                 throw new JasperReportException("在导出Html格式报表时发生错误!");    
  59.             } finally {    
  60.                 if (out != null) {    
  61.                     try {    
  62.                         out.close();    
  63.                     } catch (Exception e) {    
  64.                     }    
  65.                 }    
  66.             }    
  67.         } catch (IOException ioe) {    
  68.             ioe.printStackTrace();    
  69.             throw new JasperReportException("从Response中取得PrintWriter时发生错误!");    
  70.         }    
  71.     }    
  72.     
  73.     /**  
  74.      * 导出报表  
  75.      *   
  76.      * @param request  
  77.      * @param response  
  78.      * @param reportFilePath  
  79.      * @param params  
  80.      * @param dataSource  
  81.      * @throws JasperReportException  
  82.      */    
  83.     public void export(HttpServletRequest request, HttpServletResponse response, String reportFilePath, Map params,    
  84.             JRDataSource dataSource) throws JasperReportException {    
  85.         try {    
  86.             PrintWriter out = response.getWriter();    
  87.             try {    
  88.                 response.setContentType("text/html;charset=UTF-8");    
  89.                 JasperPrint jasperPrint = new JasperPrintWithDataSource(reportFilePath, params, dataSource)    
  90.                         .getJasperPrint();    
  91.                 // 使用JRHtmlExproter导出Html格式    
  92.                 JRHtmlExporter exporter = new JRHtmlExporter();    
  93.                 request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);    
  94.                 exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);    
  95.                 exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);    
  96.                 exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "./servlets/image?image=");    
  97.                 exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8");    
  98.                 // 导出    
  99.                 exporter.exportReport();    
100.             } catch (Exception e) {    
101.                 e.printStackTrace();    
102.                 throw new JasperReportException("在导出Html格式报表时发生错误!");    
103.             } finally {    
104.                 if (out != null) {    
105.                     try {    
106.                         out.close();    
107.                     } catch (Exception e) {    
108.                     }    
109.                 }    
110.             }    
111.         } catch (IOException ioe) {    
112.             ioe.printStackTrace();    
113.             throw new JasperReportException("从Response中取得PrintWriter时发生错误!");    
114.         }    
115.     }    
116.     
117. }    

/** 
* @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd. 
* @author Jimmy.Shine 2007-5-12 
*/  
package cn.com.reachway.framework.report.export;  
  
import java.io.IOException;  
import java.io.PrintWriter;  
import java.sql.Connection;  
import java.util.Map;  
  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
import net.sf.jasperreports.engine.JRDataSource;  
import net.sf.jasperreports.engine.JRExporterParameter;  
import net.sf.jasperreports.engine.JasperPrint;  
import net.sf.jasperreports.engine.export.JRHtmlExporter;  
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;  
import net.sf.jasperreports.j2ee.servlets.ImageServlet;  
import cn.com.reachway.framework.exception.JasperReportException;  
import cn.com.reachway.framework.report.jasperPrint.JasperPrintWithConnection;  
import cn.com.reachway.framework.report.jasperPrint.JasperPrintWithDataSource;  
  
/** 
* 利用报表生成HTML格式报表 
*/  
public class HTMLExport {  
  
    /** 
     * 导出报表 
     *  
     * @param request 
     * @param response 
     * @param reportFilePath 
     * @param params 
     * @param con 
     * @throws JasperReportException 
     */  
    public void export(HttpServletRequest request, HttpServletResponse response, String reportFilePath, Map params,  
            Connection con) throws JasperReportException {  
        try {  
            PrintWriter out = response.getWriter();  
            try {  
                response.setContentType("text/html;charset=UTF-8");  
                JasperPrint jasperPrint = new JasperPrintWithConnection(reportFilePath, params, con).getJasperPrint();  
                // 使用JRHtmlExproter导出Html格式  
                JRHtmlExporter exporter = new JRHtmlExporter();  
                request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);  
                exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);  
                exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);  
                exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "./servlets/image?image=");  
                exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8");  
                // 导出  
                exporter.exportReport();  
            } catch (Exception e) {  
                e.printStackTrace();  
                throw new JasperReportException("在导出Html格式报表时发生错误!");  
            } finally {  
                if (out != null) {  
                    try {  
                        out.close();  
                    } catch (Exception e) {  
                    }  
                }  
            }  
        } catch (IOException ioe) {  
            ioe.printStackTrace();  
            throw new JasperReportException("从Response中取得PrintWriter时发生错误!");  
        }  
    }  
  
    /** 
     * 导出报表 
     *  
     * @param request 
     * @param response 
     * @param reportFilePath 
     * @param params 
     * @param dataSource 
     * @throws JasperReportException 
     */  
    public void export(HttpServletRequest request, HttpServletResponse response, String reportFilePath, Map params,  
            JRDataSource dataSource) throws JasperReportException {  
        try {  
            PrintWriter out = response.getWriter();  
            try {  
                response.setContentType("text/html;charset=UTF-8");  
                JasperPrint jasperPrint = new JasperPrintWithDataSource(reportFilePath, params, dataSource)  
                        .getJasperPrint();  
                // 使用JRHtmlExproter导出Html格式  
                JRHtmlExporter exporter = new JRHtmlExporter();  
                request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);  
                exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);  
                exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);  
                exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "./servlets/image?image=");  
                exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8");  
                // 导出  
                exporter.exportReport();  
            } catch (Exception e) {  
                e.printStackTrace();  
                throw new JasperReportException("在导出Html格式报表时发生错误!");  
            } finally {  
                if (out != null) {  
                    try {  
                        out.close();  
                    } catch (Exception e) {  
                    }  
                }  
            }  
        } catch (IOException ioe) {  
            ioe.printStackTrace();  
            throw new JasperReportException("从Response中取得PrintWriter时发生错误!");  
        }  
    }  
  
}  

Excel格式的:

   1. /**  
   2.  * @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd.  
   3.  * @author Jimmy.Shine 2007-5-13  
   4.  */    
   5. package cn.com.reachway.framework.report.export;    
   6.     
   7. import java.io.IOException;    
   8. import java.io.OutputStream;    
   9. import java.net.URLEncoder;    
  10. import java.sql.Connection;    
  11. import java.util.List;    
  12. import java.util.Map;    
  13.     
  14. import javax.servlet.http.HttpServletRequest;    
  15. import javax.servlet.http.HttpServletResponse;    
  16.     
  17. import net.sf.jasperreports.engine.JRDataSource;    
  18. import net.sf.jasperreports.engine.JRException;    
  19. import net.sf.jasperreports.engine.JRExporterParameter;    
  20. import net.sf.jasperreports.engine.JasperPrint;    
  21. import net.sf.jasperreports.engine.export.JRXlsAbstractExporter;    
  22. import net.sf.jasperreports.engine.export.JRXlsAbstractExporterParameter;    
  23. import net.sf.jasperreports.j2ee.servlets.BaseHttpServlet;    
  24. import cn.com.reachway.framework.exception.JasperReportException;    
  25. import cn.com.reachway.framework.report.jasperPrint.JasperPrintWithConnection;    
  26. import cn.com.reachway.framework.report.jasperPrint.JasperPrintWithDataSource;    
  27.     
  28. /**  
  29.  * 利用报表生成Xls的基类  
  30.  */    
  31. public abstract class BaseExcelExport {    
  32.     /**  
  33.      * 导出报表  
  34.      *   
  35.      * @param request  
  36.      * @param response  
  37.      * @param reportFilePath  
  38.      * @param params  
  39.      * @param con  
  40.      * @param fileName  
  41.      * @throws JasperReportException  
  42.      */    
  43.     public void export(HttpServletRequest request, HttpServletResponse response, String reportFilePath, Map params,    
  44.             Connection con, String fileName) throws JasperReportException {    
  45.         JasperPrint jasperPrint = new JasperPrintWithConnection(reportFilePath, params, con).getJasperPrint();    
  46.         // 将填充完的japserPrint放入session中。    
  47.         request.getSession().setAttribute(BaseHttpServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);    
  48.         // 拿到japserPrintList    
  49.         List jasperPrintList = BaseHttpServlet.getJasperPrintList(request);    
  50.         // 若没有JasperPrintList,则抛出异常    
  51.         if (jasperPrintList == null) {    
  52.             throw new JasperReportException("在Http Session中没有找到JasperPrint List");    
  53.         }    
  54.         try {    
  55.             OutputStream ouputStream = response.getOutputStream();    
  56.             try {    
  57.     
  58.                 response.setContentType("application/xls");    
  59.                 response.setCharacterEncoding("UTF-8");    
  60.                 if (fileName == null || fileName.equals(""))    
  61.                     response.setHeader("Content-Disposition", "inline; filename=\"noTitle.xls\"");    
  62.                 else {    
  63.                     response.setHeader("Content-Disposition", "inline; filename=\""    
  64.                             + URLEncoder.encode(fileName, "UTF-8") + ".xls\"");    
  65.     
  66.                 }    
  67.                 // Xls格式的导出器 JRXlsAbstractExport    
  68.                 JRXlsAbstractExporter exporter = getXlsExporter();    
  69.     
  70.                 // 在导出器中放入要导出的japserPrintList    
  71.                 exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jasperPrintList);    
  72.     
  73.                 exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);    
  74.                 // 设置Xls的属性    
  75.                 exporter.setParameter(JRXlsAbstractExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);    
  76.                 exporter.setParameter(JRXlsAbstractExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);    
  77.                 // 导出    
  78.                 exporter.exportReport();    
  79.             } catch (JRException e) {    
  80.                 e.printStackTrace();    
  81.                 throw new JasperReportException("在生成XLS报表时发生错误!");    
  82.             }    
  83.     
  84.             finally {    
  85.                 if (ouputStream != null) {    
  86.                     try {    
  87.                         ouputStream.close();    
  88.                     } catch (IOException ex) {    
  89.                     }    
  90.                 }    
  91.             }    
  92.         } catch (IOException ioe) {    
  93.             ioe.printStackTrace();    
  94.             throw new JasperReportException("从Response中取得OutputStream时发生错误!");    
  95.         }    
  96.     
  97.     }    
  98.     
  99.     /**  
100.      * 导出报表  
101.      *   
102.      * @param request  
103.      * @param response  
104.      * @param reportFilePath  
105.      * @param params  
106.      * @param dataSource  
107.      * @param fileName  
108.      * @throws JasperReportException  
109.      */    
110.     public void export(HttpServletRequest request, HttpServletResponse response, String reportFilePath, Map params,    
111.             JRDataSource dataSource, String fileName) throws JasperReportException {    
112.         JasperPrint jasperPrint = new JasperPrintWithDataSource(reportFilePath, params, dataSource).getJasperPrint();    
113.         // 将填充完的japserPrint放入session中。    
114.         request.getSession().setAttribute(BaseHttpServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);    
115.         // 拿到japserPrintList    
116.         List jasperPrintList = BaseHttpServlet.getJasperPrintList(request);    
117.         // 若没有JasperPrintList,则抛出异常    
118.         if (jasperPrintList == null) {    
119.             throw new JasperReportException("在Http Session中没有找到JasperPrint List");    
120.         }    
121.         try {    
122.             OutputStream ouputStream = response.getOutputStream();    
123.             try {    
124.     
125.                 response.setContentType("application/xls");    
126.                 response.setCharacterEncoding("UTF-8");    
127.                 if (fileName == null || fileName.equals(""))    
128.                     response.setHeader("Content-Disposition", "inline; filename=\"noTitle.xls\"");    
129.                 else {    
130.                     response.setHeader("Content-Disposition", "inline; filename=\""    
131.                             + URLEncoder.encode(fileName, "UTF-8") + ".xls\"");    
132.     
133.                 }    
134.                 // Xls格式的导出器 JRXlsAbstractExport    
135.                 JRXlsAbstractExporter exporter = getXlsExporter();    
136.     
137.                 // 在导出器中放入要导出的japserPrintList    
138.                 exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jasperPrintList);    
139.     
140.                 exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);    
141.                 // 设置Xls的属性    
142.                 exporter.setParameter(JRXlsAbstractExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);    
143.                 exporter.setParameter(JRXlsAbstractExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);    
144.                 // 导出    
145.                 exporter.exportReport();    
146.             } catch (JRException e) {    
147.                 e.printStackTrace();    
148.                 throw new JasperReportException("在生成XLS报表时发生错误!");    
149.             }    
150.     
151.             finally {    
152.                 if (ouputStream != null) {    
153.                     try {    
154.                         ouputStream.close();    
155.                     } catch (IOException ex) {    
156.                     }    
157.                 }    
158.             }    
159.         } catch (IOException ioe) {    
160.             ioe.printStackTrace();    
161.             throw new JasperReportException("从Response中取得OutputStream时发生错误!");    
162.         }    
163.     
164.     }    
165.     
166.     protected abstract JRXlsAbstractExporter getXlsExporter();    
167.     
168. }    

/** 
* @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd. 
* @author Jimmy.Shine 2007-5-13 
*/  
package cn.com.reachway.framework.report.export;  
  
import java.io.IOException;  
import java.io.OutputStream;  
import java.net.URLEncoder;  
import java.sql.Connection;  
import java.util.List;  
import java.util.Map;  
  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
import net.sf.jasperreports.engine.JRDataSource;  
import net.sf.jasperreports.engine.JRException;  
import net.sf.jasperreports.engine.JRExporterParameter;  
import net.sf.jasperreports.engine.JasperPrint;  
import net.sf.jasperreports.engine.export.JRXlsAbstractExporter;  
import net.sf.jasperreports.engine.export.JRXlsAbstractExporterParameter;  
import net.sf.jasperreports.j2ee.servlets.BaseHttpServlet;  
import cn.com.reachway.framework.exception.JasperReportException;  
import cn.com.reachway.framework.report.jasperPrint.JasperPrintWithConnection;  
import cn.com.reachway.framework.report.jasperPrint.JasperPrintWithDataSource;  
  
/** 
* 利用报表生成Xls的基类 
*/  
public abstract class BaseExcelExport {  
    /** 
     * 导出报表 
     *  
     * @param request 
     * @param response 
     * @param reportFilePath 
     * @param params 
     * @param con 
     * @param fileName 
     * @throws JasperReportException 
     */  
    public void export(HttpServletRequest request, HttpServletResponse response, String reportFilePath, Map params,  
            Connection con, String fileName) throws JasperReportException {  
        JasperPrint jasperPrint = new JasperPrintWithConnection(reportFilePath, params, con).getJasperPrint();  
        // 将填充完的japserPrint放入session中。  
        request.getSession().setAttribute(BaseHttpServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);  
        // 拿到japserPrintList  
        List jasperPrintList = BaseHttpServlet.getJasperPrintList(request);  
        // 若没有JasperPrintList,则抛出异常  
        if (jasperPrintList == null) {  
            throw new JasperReportException("在Http Session中没有找到JasperPrint List");  
        }  
        try {  
            OutputStream ouputStream = response.getOutputStream();  
            try {  
  
                response.setContentType("application/xls");  
                response.setCharacterEncoding("UTF-8");  
                if (fileName == null || fileName.equals(""))  
                    response.setHeader("Content-Disposition", "inline; filename=\"noTitle.xls\"");  
                else {  
                    response.setHeader("Content-Disposition", "inline; filename=\""  
                            + URLEncoder.encode(fileName, "UTF-8") + ".xls\"");  
  
                }  
                // Xls格式的导出器 JRXlsAbstractExport  
                JRXlsAbstractExporter exporter = getXlsExporter();  
  
                // 在导出器中放入要导出的japserPrintList  
                exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jasperPrintList);  
  
                exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);  
                // 设置Xls的属性  
                exporter.setParameter(JRXlsAbstractExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);  
                exporter.setParameter(JRXlsAbstractExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);  
                // 导出  
                exporter.exportReport();  
            } catch (JRException e) {  
                e.printStackTrace();  
                throw new JasperReportException("在生成XLS报表时发生错误!");  
            }  
  
            finally {  
                if (ouputStream != null) {  
                    try {  
                        ouputStream.close();  
                    } catch (IOException ex) {  
                    }  
                }  
            }  
        } catch (IOException ioe) {  
            ioe.printStackTrace();  
            throw new JasperReportException("从Response中取得OutputStream时发生错误!");  
        }  
  
    }  
  
    /** 
     * 导出报表 
     *  
     * @param request 
     * @param response 
     * @param reportFilePath 
     * @param params 
     * @param dataSource 
     * @param fileName 
     * @throws JasperReportException 
     */  
    public void export(HttpServletRequest request, HttpServletResponse response, String reportFilePath, Map params,  
            JRDataSource dataSource, String fileName) throws JasperReportException {  
        JasperPrint jasperPrint = new JasperPrintWithDataSource(reportFilePath, params, dataSource).getJasperPrint();  
        // 将填充完的japserPrint放入session中。  
        request.getSession().setAttribute(BaseHttpServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);  
        // 拿到japserPrintList  
        List jasperPrintList = BaseHttpServlet.getJasperPrintList(request);  
        // 若没有JasperPrintList,则抛出异常  
        if (jasperPrintList == null) {  
            throw new JasperReportException("在Http Session中没有找到JasperPrint List");  
        }  
        try {  
            OutputStream ouputStream = response.getOutputStream();  
            try {  
  
                response.setContentType("application/xls");  
                response.setCharacterEncoding("UTF-8");  
                if (fileName == null || fileName.equals(""))  
                    response.setHeader("Content-Disposition", "inline; filename=\"noTitle.xls\"");  
                else {  
                    response.setHeader("Content-Disposition", "inline; filename=\""  
                            + URLEncoder.encode(fileName, "UTF-8") + ".xls\"");  
  
                }  
                // Xls格式的导出器 JRXlsAbstractExport  
                JRXlsAbstractExporter exporter = getXlsExporter();  
  
                // 在导出器中放入要导出的japserPrintList  
                exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jasperPrintList);  
  
                exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);  
                // 设置Xls的属性  
                exporter.setParameter(JRXlsAbstractExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);  
                exporter.setParameter(JRXlsAbstractExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);  
                // 导出  
                exporter.exportReport();  
            } catch (JRException e) {  
                e.printStackTrace();  
                throw new JasperReportException("在生成XLS报表时发生错误!");  
            }  
  
            finally {  
                if (ouputStream != null) {  
                    try {  
                        ouputStream.close();  
                    } catch (IOException ex) {  
                    }  
                }  
            }  
        } catch (IOException ioe) {  
            ioe.printStackTrace();  
            throw new JasperReportException("从Response中取得OutputStream时发生错误!");  
        }  
  
    }  
  
    protected abstract JRXlsAbstractExporter getXlsExporter();  
  
}  

 

   1. /**  
   2.  * @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd.  
   3.  * @author Jimmy.Shine 2007-5-13  
   4.  */    
   5. package cn.com.reachway.framework.report.export;    
   6.     
   7. import net.sf.jasperreports.engine.export.JRXlsAbstractExporter;    
   8. import net.sf.jasperreports.engine.export.JRXlsExporter;    
   9.     
  10. /**  
  11.  * 利用报表使用POI生成XLS报表  
  12.  */    
  13. public class XlsPOIExport extends BaseExcelExport {    
  14.     
  15.     protected JRXlsAbstractExporter getXlsExporter() {    
  16.         return new JRXlsExporter();    
  17.     }    
  18.     
  19. }    
  20.       

/** 
* @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd. 
* @author Jimmy.Shine 2007-5-13 
*/  
package cn.com.reachway.framework.report.export;  
  
import net.sf.jasperreports.engine.export.JRXlsAbstractExporter;  
import net.sf.jasperreports.engine.export.JRXlsExporter;  
  
/** 
* 利用报表使用POI生成XLS报表 
*/  
public class XlsPOIExport extends BaseExcelExport {  
  
    protected JRXlsAbstractExporter getXlsExporter() {  
        return new JRXlsExporter();  
    }  
  
}





   1. /**  
   2.  * @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd.  
   3.  * @author Jimmy.Shine 2007-5-13  
   4.  */    
   5. package cn.com.reachway.framework.report.export;    
   6.     
   7. import net.sf.jasperreports.engine.export.JExcelApiExporter;    
   8. import net.sf.jasperreports.engine.export.JRXlsAbstractExporter;    
   9.     
  10. /**  
  11.  * 利用报表使用JExcel生成xls报表  
  12.  */    
  13. public class XlsJExcelExport extends BaseExcelExport {    
  14.     
  15.     protected JRXlsAbstractExporter getXlsExporter() {    
  16.         return new JExcelApiExporter();    
  17.     }    
  18. }





PDF格式的:



   1. /**  
   2.  * @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd.  
   3.  * @author Jimmy.Shine 2007-5-12  
   4.  */    
   5. package cn.com.reachway.framework.report.export;    
   6.     
   7. import java.io.IOException;    
   8. import java.io.OutputStream;    
   9. import java.net.URLEncoder;    
  10. import java.sql.Connection;    
  11. import java.util.List;    
  12. import java.util.Map;    
  13.     
  14. import javax.servlet.http.HttpServletRequest;    
  15. import javax.servlet.http.HttpServletResponse;    
  16.     
  17. import net.sf.jasperreports.engine.JRDataSource;    
  18. import net.sf.jasperreports.engine.JRException;    
  19. import net.sf.jasperreports.engine.JRExporterParameter;    
  20. import net.sf.jasperreports.engine.JasperPrint;    
  21. import net.sf.jasperreports.engine.export.JRPdfExporter;    
  22. import net.sf.jasperreports.j2ee.servlets.BaseHttpServlet;    
  23. import cn.com.reachway.framework.exception.JasperReportException;    
  24. import cn.com.reachway.framework.report.jasperPrint.JasperPrintWithConnection;    
  25. import cn.com.reachway.framework.report.jasperPrint.JasperPrintWithDataSource;    
  26.     
  27. /**  
  28.  *   
  29.  */    
  30. public class PDFExport {    
  31.     
  32.     /**  
  33.      * 导出报表  
  34.      *   
  35.      * @param request  
  36.      * @param response  
  37.      * @param reportFilePath  
  38.      * @param params  
  39.      * @param con  
  40.      * @param fileName  
  41.      * @throws JasperReportException  
  42.      */    
  43.     public void export(HttpServletRequest request, HttpServletResponse response, String reportFilePath, Map params,    
  44.             Connection con, String fileName) throws JasperReportException {    
  45.     
  46.         JasperPrint jasperPrint = new JasperPrintWithConnection(reportFilePath, params, con).getJasperPrint();    
  47.         // 将填充完的japserPrint放入session中。    
  48.         request.getSession().setAttribute(BaseHttpServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);    
  49.         // 拿到japserPrintList    
  50.         List jasperPrintList = BaseHttpServlet.getJasperPrintList(request);    
  51.         // 若没有JasperPrintList,则抛出异常    
  52.         if (jasperPrintList == null) {    
  53.             throw new JasperReportException("在Http Session中没有找到JasperPrint List");    
  54.         }    
  55.         try {    
  56.             OutputStream ouputStream = response.getOutputStream();    
  57.             try {    
  58.                 response.setContentType("application/pdf");    
  59.                 response.setCharacterEncoding("UTF-8");    
  60.                 if (fileName == null || fileName.equals(""))    
  61.                     response.setHeader("Content-Disposition", "inline; filename=\"noTitle.pdf\"");    
  62.                 else    
  63.                     response.setHeader("Content-Disposition", "inline; filename=\""    
  64.                             + URLEncoder.encode(fileName, "UTF-8") + ".pdf\"");    
  65.                 // 使用JRPdfExproter导出器导出pdf    
  66.                 JRPdfExporter exporter = new JRPdfExporter();    
  67.                 // 设置JasperPrintList    
  68.                 exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jasperPrintList);    
  69.     
  70.                 exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);    
  71.                 exporter.exportRepo
分享到:
评论

相关推荐

    jasperreports报表资料

    **jasperreports报表资料概述** JasperReports是一款开源的Java报表工具,用于生成静态和交互式的报表。...jasperreports的核心优势在于它的灵活性和...通过深入学习和实践,开发者可以创建出满足各种需求的高质量报表。

    java常用网址,可能已经过期了

    31. **Spring3 相关资料** - 未提供具体链接,但可以推测这部分可能包含关于Spring框架的知识点,例如: - Spring框架的基本概念和架构 - Spring IoC容器的使用方法 - Spring MVC的实现原理 - Spring AOP的应用...

    电力电子领域中基于Simulink的BUCK电路PI闭环控制仿真研究

    内容概要:本文详细介绍了如何利用Simulink对BUCK电路进行PI闭环控制仿真。首先解释了BUCK电路的基本原理及其数学表达式,接着逐步指导如何在Simulink中构建仿真模型,包括选择合适的元件如电源、开关、电感、电容等,并设置了具体的参数。然后重点讲解了PI控制器的设计方法,展示了如何通过MATLAB代码实现PI控制算法,并讨论了不同参数对控制系统的影响。最后,通过观察和分析仿真结果的关键波形,探讨了如何优化PI控制器参数以获得更好的输出效果。 适合人群:从事电力电子设计的研究人员和技术爱好者,尤其是那些希望深入了解BUCK电路及其控制机制的人群。 使用场景及目标:适用于需要掌握BUCK电路工作原理以及PI闭环控制方法的学习者;旨在提高对电力电子系统的理解和优化能力。 其他说明:文中提供了详细的步骤和实例,有助于读者更好地理解和应用所学知识。此外,还提到了一些常见的挑战和解决方案,例如如何避免电压过冲、优化负载响应时间和减少输出电压纹波等问题。

    MFC-Windows应用程序设计-第2章-Windows应用程序的类封装.pptx

    MFC-Windows应用程序设计-第2章-Windows应用程序的类封装.pptx

    MCS51单片机指令系统数据传送类指令.pptx

    MCS51单片机指令系统数据传送类指令.pptx

    PLC电源模块维修重点技术实例.doc

    PLC电源模块维修重点技术实例.doc

    基于PLC S7-1200的恒温水箱控制系统设计与实现

    内容概要:本文详细介绍了如何利用西门子S7-1200 PLC构建一个高精度的恒温水箱控制系统。首先讨论了硬件选择与配置,包括PT100温度传感器、模拟量模块的选择以及滤波时间的优化。接着深入探讨了PID控制算法的应用,包括参数整定技巧、移动平均滤波的应用以及PWM输出控制方法。此外,还涉及了人机界面的设计,强调了报警机制的优化和现场调试的经验分享。文中提供了多个实用的SCL代码片段,帮助读者更好地理解和实施具体的技术细节。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC编程和温度控制感兴趣的初学者。 使用场景及目标:适用于需要精确温度控制的工业应用场景,如食品加工、生物制药等行业。目标是将温度波动控制在±0.5℃以内,确保生产过程的稳定性。 其他说明:文中不仅提供了详细的理论讲解,还结合了大量的实际案例和调试经验,有助于读者快速掌握相关技术和应对常见问题。

    太赫兹波段石墨烯超表面吸波器的COMSOL仿真与优化设计

    内容概要:本文详细介绍了利用COMSOL进行太赫兹波段石墨烯超表面吸波器的设计与仿真的全过程。首先,通过几何建模创建了基于矩形堆叠的石墨烯单元结构,并设置了合适的材料参数,特别是石墨烯的表面电导率采用Kubo公式表示。接着,针对边界条件进行了细致设定,如使用完美匹配层(PML)和Floquet周期边界条件,确保计算效率和准确性。然后,通过参数扫描和优化,研究了不同费米能级对吸收峰的影响,实现了吸收频段的动态调控。最后,通过后处理和动画制作,展示了吸收峰随费米能级变化的动态效果,并提供了具体的MATLAB和COMSOL代码示例。 适合人群:从事太赫兹器件设计、电磁仿真以及石墨烯材料应用的研究人员和技术人员。 使用场景及目标:适用于希望深入了解太赫兹波段吸波器设计原理及其动态调控特性的科研工作者。目标是通过实际操作和理论分析相结合,掌握石墨烯超表面吸波器的设计方法和优化技巧。 其他说明:文中提供的具体步骤和代码示例有助于快速上手COMSOL仿真工具,同时强调了常见问题的解决方法,如收敛问题和网格划分策略。

    两轮平衡车及扭扭车的硬件设计与软件控制方案详解

    内容概要:本文详细介绍了两轮平衡车和扭扭车的完整设计方案,涵盖硬件和软件两个方面。硬件部分包括主控芯片(如STM32F103)、传感器(如MPU6050)的选择与布局,以及PCB设计要点,强调了电机驱动模块的布线规则和电磁干扰防护措施。软件部分则聚焦于核心算法,如PID控制和卡尔曼滤波,用于处理传感器数据并实现车辆的平衡和运动控制。此外,文章还讨论了烧写程序、调试文件和BOM清单等量产相关的内容,分享了许多实用经验和技巧。 适合人群:对两轮平衡车和扭扭车设计感兴趣的电子工程师、硬件开发者和嵌入式程序员。 使用场景及目标:帮助读者掌握从原理图设计到量产的全流程,包括硬件选型、PCB布局、程序编写、调试方法和批量生产的注意事项。目标是让读者能够独立完成一套完整的两轮平衡车或扭扭车项目。 其他说明:文中提供了大量实战经验和技术细节,如PID参数调优、PCB布局技巧、电机驱动优化等,有助于提高产品的稳定性和可靠性。

    【汽车电子领域】A/B分区方案在车载软件架构中的应用:实现无感更新与提高系统可靠性

    内容概要:文章详细介绍了汽车电子软件A/B分区方案,这是一种用于汽车电子系统软件管理的最佳实践。A/B分区通过将存储空间划分为两个独立分区,分别保存完整的软件镜像,实现软件的无感更新、提高系统可靠性和支持远程更新(OTA)。具体工作流程包括从当前分区启动、下载更新包、分区验证、切换准备、重启运行以及回滚与故障处理。其核心优势在于减少停机时间、增强可靠性和安全性、助力OTA更新及提升用户体验。然而,该方案也面临存储空间需求大、更新管理复杂和功耗性能优化等挑战。文章最后提出了优化存储空间、简化更新管理和优化功耗的具体措施。 适合人群:汽车电子工程师、汽车制造商技术人员、对汽车电子系统感兴趣的工程师和技术爱好者。 使用场景及目标:①理解A/B分区的工作机制及其在汽车电子系统中的应用;②掌握A/B分区在软件更新过程中的具体操作流程;③了解A/B分区带来的优势及其面临的挑战,为实际项目提供参考。 其他说明:A/B分区方案已在新能源汽车和新势力造车中广泛应用,未来将在智能汽车和自动驾驶技术中发挥更大作用。文章强调了长期主义的重要性,鼓励读者在技术发展中保持耐心和持续学习的态度。

    基于粒子群优化算法的光伏电池阴影条件MPPT实现及应用

    内容概要:本文详细介绍了利用粒子群优化(Particle Swarm Optimization, PSO)算法,在光伏电池受到局部阴影遮挡的情况下实现最大功率点跟踪(Maximum Power Point Tracking, MPPT)的方法。文中首先解释了阴影条件下光伏电池输出特性的变化,即P-V曲线由单一峰值变为多峰形态,使得传统的扰动观测法难以找到全局最大功率点。接着阐述了PSO算法的基本原理及其在MPPT中的具体实现方式,包括粒子初始化、速度和位置更新规则以及如何处理电压突变引起的系统震荡等问题。此外还讨论了粒子数量的选择、参数动态调整策略、适应度函数改进等方面的内容,并通过实验验证了该方法的有效性和优越性。 适合人群:从事光伏发电系统研究与开发的技术人员,尤其是关注提高光伏系统在非理想环境下工作效率的研究者。 使用场景及目标:适用于存在局部阴影遮挡情况下的光伏电站或分布式光伏发电系统的优化设计,旨在提高此类条件下光伏系统的能量转化效率。 其他说明:文中不仅提供了详细的理论推导和技术细节,还有具体的代码片段用于辅助理解和实施。同时指出,在实际应用中可以根据不同的应用场景灵活调整相关参数配置,如粒子数目、惯性权重等,从而达到更好的性能表现。

    office办公软件培训.pptx

    office办公软件培训.pptx

    学生选课系统 2025免费JAVA微信小程序毕设

    2025免费微信小程序毕业设计成品,包括源码+数据库+往届论文资料,附带启动教程和安装包。 启动教程:https://www.bilibili.com/video/BV1BfB2YYEnS 讲解视频:https://www.bilibili.com/video/BV1BVKMeZEYr 技术栈:Uniapp+Vue.js+SpringBoot+MySQL。 开发工具:Idea+VSCode+微信开发者工具。

    自动驾驶领域中平行与垂直泊车的Matlab仿真及路径规划实现

    内容概要:本文详细介绍了如何使用Matlab进行平行泊车和垂直泊车的路径规划与仿真。首先解释了平行泊车的基本原理,即基于车辆运动学模型,通过控制转向角和速度来规划从初始位置到目标车位的平滑路径。接着展示了具体的Matlab代码实现,包括初始化参数设置、路径规划的循环迭代以及最终的路径绘图。对于垂直泊车,则强调了其独特的路径规划逻辑,分为接近车位和转向进入两个阶段,并给出了相应的代码示例。此外,还讨论了一些高级话题,如使用双圆弧+直线组合方案、五次多项式轨迹生成、PID控制器实现轨迹跟踪等方法来优化路径规划。同时提到了碰撞检测模块的实现方式及其重要性。 适合人群:对自动驾驶技术感兴趣的初学者或有一定编程基础的研发人员。 使用场景及目标:适用于希望深入了解自动驾驶泊车原理和技术细节的人群,特别是那些想要动手实践并掌握Matlab编程技巧的学习者。通过学习本文提供的代码示例,读者能够更好地理解平行泊车和垂直泊车的具体实现过程,从而为进一步研究提供坚实的基础。 其他说明:文中提到的所有代码均为简化版本,旨在帮助读者快速入门。实际应用中可能需要考虑更多因素,例如车辆的实际尺寸、环境感知模块的集成等。此外,作者还分享了许多实用的经验和技巧,如如何避免常见的错误、如何优化代码性能等。

    基于CWT-CNN-SVM的滚动轴承故障诊断Matlab实现及优化技巧

    内容概要:本文详细介绍了如何使用连续小波变换(CWT)、卷积神经网络(CNN)和支持向量机(SVM)进行滚动轴承故障诊断的方法。首先,通过对东南大学提供的轴承数据集进行预处理,将一维振动信号转换为时频图。然后,构建了一个CNN-SVM混合模型,其中CNN用于提取时频图的特征,SVM用于分类。文中还讨论了如何选择合适的小波基、尺度范围以及如何防止过拟合等问题。此外,作者提供了T-SNE可视化工具来评估模型性能,并分享了一些实用的避坑指南。 适合人群:从事机械设备故障诊断的研究人员和技术人员,尤其是那些对振动信号处理有一定了解的人。 使用场景及目标:适用于工业环境中对旋转机械设备的故障检测和预测。主要目标是提高故障诊断的准确性,减少误判率,确保设备的安全稳定运行。 其他说明:文中提到的所有代码均已在Matlab环境下验证通过,并附有详细的注释和解释。对于初学者来说,建议逐步跟随代码实现,理解每一步骤背后的原理。

    三菱F5U系列PLC恒压测试设备开发:ST语言与梯形图结合的应用实例

    内容概要:本文详细介绍了基于三菱F5U系列PLC的恒压测试设备开发过程,涵盖了ST语言编程和梯形图逻辑控制的综合应用。主要内容包括设备的整体功能概述,如递增调压和恒压保持两大功能;ST语言在数据处理方面的优势,如从触摸屏读取设置数据、处理压力传感器数据等;梯形图在逻辑控制方面的作用,如实现递增和恒压模式的切换;触摸屏程序设计,确保良好的人机交互体验;以及监控曲线和历史记录的实现方法。文中还特别强调了ST语言和梯形图混合编程的优势和注意事项。 适合人群:具备一定PLC编程基础的电气工程师和技术人员。 使用场景及目标:适用于工业自动化领域的恒压测试设备开发,旨在提高系统的灵活性和可靠性,帮助工程师更好地理解和应用ST语言和梯形图编程。 其他说明:文章提供了多个具体的代码示例和实用技巧,如数据类型转换、环形缓冲区设计、急停逻辑等,有助于读者在实际项目中借鉴和应用。

    汽车电子基于CAPL语言的CANoe调试功能详解:车载诊断工具开发与应用

    内容概要:本文由一位汽车电子工程师撰写,主要介绍了CAPL语言及其在CANoe中的调试功能。CAPL是一种专用于CANoe的类C编程语言,支持节点仿真、报文收发、自动化测试等功能。CAPL文件分为.can和.cin两种类型,程序结构包含头文件、全局变量、事件函数和自定义函数。CAPL基于事件驱动,常见事件包括系统事件、报文事件、时间事件等。CAPL支持多种数据类型和复杂数据结构。CANoe的CAPL Debug功能允许用户在仿真或测试过程中对CAPL代码进行调试,通过设置断点、单步执行等方式检查代码逻辑和变量值,确保代码满足需求。; 适合人群:具有汽车电子开发背景,尤其是从事汽车总线网络开发、测试和分析的工程师。; 使用场景及目标:①掌握CAPL语言的基本语法和特性,熟悉CAPL文件结构和编程规范;②学会使用CANoe中的CAPL Debug功能,能够设置断点、单步调试并查看变量变化,确保代码正确性和可靠性;③提升对汽车总线网络开发和测试的理解和实践能力。; 阅读建议:本文详细介绍了CAPL语言及其调试功能,建议读者在学习过程中结合实际项目进行实践,逐步掌握CAPL编程技巧和调试方法。同时,注意理解CAPL的事件驱动机制和数据类型,这对编写高效、可靠的CAPL代码至关重要。

    基于SSM框架的ERP生产管理系统源码解析与实战应用

    内容概要:本文详细介绍了基于SSM(Spring + SpringMVC + MyBatis)框架的ERP生产管理系统的源码实现及其关键特性。首先探讨了系统的权限控制设计,采用Shiro实现按钮级别的权限管理,确保不同角色拥有不同的操作权限。接着分析了设备管理模块,展示了MyBatis动态SQL的应用以及设备状态更新的灵活性。工艺监控模块利用EasyUI DataGrid实现实时数据刷新,结合后端分页查询提高性能。质量监控模块则通过Spring事务注解实现异常数据处理的原子性。此外,系统采用了Shiro进行用户密码加密,增强了安全性。最后讨论了系统的布局设计和数据可视化的实现。 适合人群:具备一定Java开发经验的研发人员,特别是对SSM框架有初步了解并希望深入了解其实战应用的技术人员。 使用场景及目标:适用于需要构建或改进企业内部生产管理系统的开发团队。主要目标是通过研究现有系统的实现细节,掌握SSM框架的最佳实践,提升系统的稳定性和功能性。 其他说明:文中提到的许多技术细节如权限控制、事务管理和数据可视化等,不仅有助于理解SSM框架的工作原理,还能为实际项目提供宝贵的参考。

    汽车电子AUTOSAR-BSW层关键技术解析:诊断、硬件I/O抽象与操作系统功能详解及应用

    内容概要:本文继续深入介绍 AUTOSAR BSW 层的关键模块,主要包括诊断模块、硬件I/O抽象模块和操作系统OS。诊断模块包含诊断通信管理器(DCM)、诊断事件管理器(DEM)和功能禁止管理器(FIM),它们分别负责通信协议实现、事件管理和功能控制,确保ECU在不同情况下的正确响应。硬件I/O抽象模块通过将硬件接口抽象化,使上层软件无需关心底层硬件细节,提高了系统的可移植性和维护性。操作系统OS分为SC1到SC4四个等级,从基本任务调度到高级别的内存和时间保护,适应不同功能安全级别的需求,保障了多任务环境下的数据一致性和实时性能。 适合人群:对汽车电子控制系统有一定了解的研发人员,尤其是从事AUTOSAR相关工作的工程师和技术人员。 使用场景及目标:①理解AUTOSAR架构下BSW层各模块的具体功能和相互关系;②掌握诊断模块在汽车ECU中的应用及其重要性;③学习硬件I/O抽象模块的设计思路和实现方法;④了解AUTOSAR OS的不同分类及其在不同安全等级产品中的应用。 阅读建议:由于涉及到较多的专业术语和技术细节,建议读者先熟悉AUTOSAR的基础概念,再逐步深入理解各模块的工作原理和应用场景。同时,结合实际项目经验进行对比学习,有助于更好地掌握本文内容。

    多语言笔记系列:操作数据库-C#程序

    多语言笔记系列:操作数据库-C#程序

Global site tag (gtag.js) - Google Analytics