使用jasperreposts生成报表方法二,三

来源:互联网 发布:人工智能学术会议 编辑:程序博客网 时间:2024/05/16 06:05
第二种方法:在后台工具类中将我们要需要的报表类型转成byte数组,然后再jsp页面重组得到报表补充一下我这里的是直接让报表在浏览器中在线打开的(三种方法都是)
工具类:
package com.unite.util_jasperreports;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXlsExporterParameter;

public class JrtsUtil {

       
        public static byte[] generatePDF(String reportTitle, String reportFilePath,List<Object> list) throws FileNotFoundException  {
              // TODO Auto-generated method stub
              //begCustNo,endCustNo分别为查询传入的开始编号,结束编号.
              //jdbcCustomerDao = new JdbcCustomerDao();
             
              Map parameters = new HashMap();//参数设定
              parameters.put("lie", "select * from User");//报表标题
             
              //List list = jdbcCustomerDao.getAllCustomer(begCustNo, endCustNo);
               try {
                   JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
                  
                   JasperPrint jasperPrint = JasperFillManager.fillReport(reportFilePath, parameters, ds);
                  
                  
                  
                   return JasperExportManager.exportReportToPdf(jasperPrint);
              return null;
               } catch (JRException e) {
                   e.printStackTrace();
                   return null;
              }
         }
       
        public static void main(String[] args) {
            try {
                generatePDF("dsf","/iReport/report1.jasper",new ArrayList());
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
       
        public static  byte[] generateHtml(String reportTitle, String reportFilePath,List<Object> list)  {
            // jdbcCustomerDao = new JdbcCustomerDao();
         
            Map parameters = new HashMap();//参数设定
             parameters.put("lie", "select * from User");
         
          //List list = jdbcCustomerDao.getAllCustomer(begCustNo, endCustNo);//获取数据
         
          JRHtmlExporter exporter = new JRHtmlExporter();
         
          ByteArrayOutputStream oStream = new ByteArrayOutputStream();
         
          try {
           JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
          
           JasperPrint jasperPrint = JasperFillManager.fillReport(reportFilePath, parameters, ds);
          
          exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN,Boolean.FALSE);
          
           exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
          
           exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "GBK");
          
           exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, oStream);
          
           exporter.exportReport();
          
           byte[] bytes = oStream.toByteArray();
          
           return bytes;
          } catch (JRException e) {
            e.printStackTrace();
            return null;
          }
         }
       
       
        public static byte[] generateExcel(String reportTitle, String reportFilePath,List<Object> list) {
          //jdbcCustomerDao = new JdbcCustomerDao();
           
          Map parameters = new HashMap();//参数设定
          parameters.put("lie", "select * from User");
         
          //List list = jdbcCustomerDao.getAllCustomer(begCustNo, endCustNo);
         
          JRXlsExporter exporter = new JRXlsExporter(); // Excel
         
          ByteArrayOutputStream oStream = new ByteArrayOutputStream();
         
          try {
           JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
          
           JasperPrint jasperPrint = JasperFillManager.fillReport(reportFilePath, parameters, ds);
          
           exporter.setParameter(JRExporterParameter.JASPER_PRINT,
                   jasperPrint);
           exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,
                   oStream);
          exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,
             Boolean.TRUE);
           exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,
             Boolean.FALSE);
           exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,
             Boolean.FALSE);
          
           exporter.exportReport();
          
           byte[] bytes = oStream.toByteArray();
          
           return bytes;

          } catch (JRException e) {
           e.printStackTrace();
           return null;
          }
         }
}
jsp页面
exclede :
<%
      //String filePath=getServletContext().getRealPath("/")+"report1.jasper";
      String filePath = "/iReport/report1.jasper";//模板的路径
      
      byte[] bytes=null;
      //String begNo=request.getParameter("beginCustNo");
      //String endNo=request.getParameter("endCustNo");
      String type="html";
   
        List list = new ArrayList();//数据数组

      if(type.equals("Pdf")){
          bytes= JrtsUtil.generatePDF("客户资料明细表",filePath,list);
      }else if(type.equals("Excel")){
             bytes=JrtsUtil.generateExcel("客户资料明细表",filePath,list);
      }else{
          bytes=JrtsUtil.generateHtml("客户资料明细表",filePath,list);
      }
   
    try{
         if(bytes!=null){
              if(type.equals("Pdf")){
                 // response.setContentType("application/pdf");
                 response.encodeRedirectUrl("report1.pdf");
                 //response.encodeUrl()
              }else if(type.equals("Excel")){
                 response.setContentType("application/vnd.ms-excel");
              }else if(type.equals("html")){
                   response.setContentType("text/html");
                response.setContentLength(bytes.length);
                ServletOutputStream ouputStream = response.getOutputStream();
                ouputStream.write(bytes,0,bytes.length);
                ouputStream.flush();
                ouputStream.close();
              }
         }else{
              out.println("error");
         }
     }catch(Exception e){
         out.print("错误信息:"+e.getMessage());
     }finally{
         out.clear();//在tomcat5下jsp中出现此错误一般都是在jsp中使用了输出流(如输出图片验证码,文件下载等),
                        //没有妥善处理好的原因。
        out = pageContext.pushBody();
     }
  %>

第三种方法:直接在jsp页面上使用

<%
        // 加载.jasper文件
       File jasperRile = new File(ServletActionContext.getServletContext().getRealPath("/iReport/report1.jasper"));
         // 构造JasperReport 文件
       JasperReport jasperReport = (JasperReport)JRLoader.loadObject(jasperRile.getPath());
      
       //参数处理
        Map parameters = new HashMap();
        parameters.put("lie", "select * from User");
      
       // 用数据填充JasperReport文件
       JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters,SSS.testReport1());
      
        // 声明导出对像
       JRXlsExporter exporter = new JRXlsExporter();
       // 设置导出哪个模板
       exporter.setParameter(JRXlsExporterParameter.JASPER_PRINT, jasperPrint);
     
       // 设置导出流
       exporter.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, response.getOutputStream());
      
       // 设置Xls的属性  
       exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);  
       exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE); 
       // 告诉浏览器是导出操EXCEL文件操作
       response.setHeader("Content-Disposition", "attachment; filename=cyjgcyb.xls");
       response.setContentType("application/vnd.ms-excel");
      
       exporter.exportReport();
     
      
       out.clear();//在tomcat5下jsp中出现此错误一般都是在jsp中使用了输出流(如输出图片验证码,文件下载等),
                        //没有妥善处理好的原因。
       out = pageContext.pushBody();
   %>

html格式的:
<%
        // 加载.jasper文件
      File jasperRile = new File("/iReport/report1.jasper");
         // 构造JasperReport 文件
       JasperReport jasperReport = (JasperReport)JRLoader.loadObject(jasperRile.getPath());
      
       //参数处理
        Map parameters = new HashMap();
        parameters.put("lie", "select * from User");
      
       // 用数据填充JasperReport文件
       JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters,SSS.testReport1());
      
       // 声明HTML类型的导出类
       JRHtmlExporter exporter = new JRHtmlExporter();
       // 设置导出JASPER_PRINT
       exporter.setParameter(JRHtmlExporterParameter.JASPER_PRINT, jasperPrint);
     
       // 设置导出流
       exporter.setParameter(JRHtmlExporterParameter.OUTPUT_WRITER, response.getWriter());
       // 设置IS_USING_IMAGES_TO_ALIGN为false,不显示图片
       exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);
       // 导出编码
       exporter.setParameter(JRHtmlExporterParameter.CHARACTER_ENCODING, "gb2312");
       // 导出
       exporter.exportReport();
      
       out.clear();//在tomcat5下jsp中出现此错误一般都是在jsp中使用了输出流(如输出图片验证码,文件下载等),
                        //没有妥善处理好的原因。
       out = pageContext.pushBody();
  %>

pdf格式的:
<%
        // 加载.jasper文件
       File jasperRile = new File(ServletActionContext.getServletContext().getRealPath("/iReport/report1.jasper"));
       
     
      try{
           // 构造JasperReport 文件
           JasperReport jasperReport = (JasperReport)JRLoader.loadObject(jasperRile.getPath());
           //参数处理
            Map parameters = new HashMap();
            parameters.put("lie", "select * from User");
           // 用数据填充JasperReport文件
           JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, SSS.testReport1());
       
           // pdf导出设置
            response.setContentType("application/pdf");
            response.setCharacterEncoding("UTF-8");
 
            // 使用JRPdfExproter导出器导出pdf  
            JRPdfExporter exporter = new JRPdfExporter();  
            // 设置JasperPrintList  
            exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT, jasperPrint);  
            // 设置导出流
            exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, response.getOutputStream());
            // 开始导出
            exporter.exportReport();
           
            out.clear();//在tomcat5下jsp中出现此错误一般都是在jsp中使用了输出流(如输出图片验证码,文件下载等),
                        //没有妥善处理好的原因。
               out = pageContext.pushBody();
           
         }catch(Exception e){
               e.printStackTrace();
          }
%>

到此三种方法列举完毕,置于他们之间运用时的差别改天在写
0 0
原创粉丝点击