IREPORT报表实现

IREPORT报表实现

一、在JSP中通过传参数实现源代码:(在jasper模板中定义好查询条件及参数)


<% @ page language = " java "   import = " java.util.* "  pageEncoding = " utf-8 " %>
<% @ page  import = " java.io.*,java.sql.*,net.sf.jasperreports.engine.* " %>
<% @ page  import = " com.szywit.dbapi.dbconn.CPool,net.sf.jasperreports.engine.data.JRBeanCollectionDataSource,net.sf.jasperreports.engine.util.JRLoader " %>
< jsp:directive.include file = " /public_jdbc.jspf "   />
<! DOCTYPE HTML PUBLIC  " -//W3C//DTD HTML 4.01//EN "   " http://www.w3.org/TR/html4/strict.dtd " >
< html >
< head >
< title > 报表打印 </ title >
</ head >

< body id = " Body " >
    
<%
        String parentid 
=   "" ,sect_name = "" ,actcode = "" ,run_types = "" ;
        CommonModel CM;
        String reportName 
=  request.getParameter( " reportName " );
        
if  (request.getParameter( " parentid " !=   null )
            parentid 
=  request.getParameter( " parentid " );
        
if  (request.getParameter( " pect_name " !=   null )
            sect_name 
=  request.getParameter( " pect_name " );
        
if  (request.getParameter( " actcode " !=   null )
            actcode 
=  request.getParameter( " actcode " );
        
if  (request.getParameter( " run_types " !=   null )
            run_types 
=  request.getParameter( " run_types " );

        
// 报表编译之后的.jasper文件的存放位置
        File reportFile  =   new  File(
                application.getRealPath(
" /ems/report/eventLog.jasper " ));
        
// 传递报表中用到的参数值,这里是空值
        System.out.println( " param:= "   +  parentid);
        Map parameters 
=   new  HashMap();
        System.out.print(sect_name);
                   parameters.put(
" event_code " " % " + event_code + " % " );
           parameters.put(
" event_name " ,   " % " + event_name + " % " );
           parameters.put(
" type_code2 " ,   " % " + parentid + " % " );
        
        
        
           parameters.put(
" type_code " " % " + parentid + " % " );
           parameters.put(
" type_code1 " ,   " % " + parentid + " % " );
           parameters.put(
" type_code2 " ,   " % " + parentid + " % " );
           
           parameters.put(
" sect_name " ,   " % " + sect_name + " % " );
           parameters.put(
" actcode " ,   " % " + actcode + " % " );
           parameters.put(
" run_types " ,   " % " + run_types + " % " );

        
// 连接到数据库
        Connection conn  =   null ;
        
try   {
            conn 
= ConnectionManager.getConnection("EMSDATACON");
        }
  catch  (Exception e)  {
            e.printStackTrace();
            
throw new Exception("创建默认数据库连接不成功,请检查dbconn.properties是否正确配置");
        }

        System.out.println(
" ----------jasper begin----------- " );
        
// 在控制台打印报表文件的物理路径 
        System.out.println( " ****物理路径 *** "   +  reportFile.getPath());
        
byte [] bytes  =  JasperRunManager.runReportToPdf(
                reportFile.getPath(), parameters, conn);
            
                
        System.out.println(
" bytes= "   +  parameters);
        System.out.println(
" ---------jasper end------- " );
        response.setContentType(
" application/pdf " );
        response.setContentLength(bytes.length);

        
// 清除输出对象的冲突(因jsp本身有自己的out输出对象,如果去除下面的语句,则response.getOutputStream()得到的输出对象与原来存在的out对象冲突,会报异常)

        out.clear();
        out 
=  pageContext.pushBody();

        ServletOutputStream output 
=  response.getOutputStream();
        output.write(bytes, 
0 , bytes.length);
        output.flush();
        output.close();

        
try   {
            
if (conn != null{
                conn.close();
            }

        }
  catch  (Exception e)  {
            e.printStackTrace();
        }

    
%>
</ body >
</ html >

二、通过传递结果集,JAVA实现

<% @ page language = " java "   import = " java.util.* "  pageEncoding = " gb2312 " %>
<% @ page language = " java "   import = " com.szywit.file.ReportExport " %>
<% @ page
    
import = " java.io.*,net.sf.jasperreports.engine.*,
net.sf.jasperreports.engine.util.JRLoader,net.sf.jasperreports.engine.data.JRBeanCollectionDataSource,net.sf.jasperreports.engine.export.JRRtfExporter " %>
< jsp:directive.include file = " /public_jdbc.jspf "   />
<%
    String parentid 
=   "" , sect_name  =   "" , actcode  =   "" , run_types  =   "" , types  =   "" , typedot  =   "" ;
    List list 
=   new  ArrayList();
    File reportFile 
=   new  File(
            application.getRealPath(
" /ems/report/preschDetail.jasper " ));

    Vector rsVector;
    CommonModel CM;

    
// 传参
     if  (request.getParameter( " types " !=   null )
        types 
=  request.getParameter( " types " );
    
if  (request.getParameter( " parentid " !=   null )
        parentid 
=  request.getParameter( " parentid " );
    
if  (request.getParameter( " pect_name " !=   null )
        sect_name 
=  request.getParameter( " pect_name " );
    
if  (request.getParameter( " actcode " !=   null )
        actcode 
=  request.getParameter( " actcode " );
    
if  (request.getParameter( " run_types " !=   null )
        run_types 
=  request.getParameter( " run_types " );

    String sql 
=   " select  * from vw_preschdetail  where ( type_code like '% "
            
+  parentid
            
+   " %' "
            
+   " or type_code2 like   '% "
            
+  parentid
            
+   " %'  or type_code1 like   '% "
            
+  parentid
            
+   " %') "
            
+   " and (sect_name like  '% "
            
+  sect_name
            
+   " %')  and (run_types like   '% "
            
+  run_types
            
+   " %') "
            
+   "  and (actcode like   '% "   +  actcode  +   " %') " ;

    
try   {
        rsVector 
= CCommonDAO.select(sql, "EMSDATACON");
        
if (rsVector != null && !rsVector.isEmpty()) {
            
for (int j = 0; j < rsVector.size(); j++{
                CM 
= (CommonModel) rsVector.get(j);
                Map map 
= new HashMap();
                map.put(
"sect_names", CM.getAttrValue("sect_names")
                        .trim());
                map.put(
"type_name", CM.getAttrValue("type_name")
                        .trim());
                map.put(
"actcode", CM.getAttrValue("actcode").trim());
                map.put(
"actconts", CM.getAttrValue("actconts").trim());
                map.put(
"run_types", CM.getAttrValue("run_types")
                        .trim());
                map.put(
"car_lens", CM.getAttrValue("car_lens").trim());

                map.put(
"dev_info", CM.getAttrValue("dev_info").trim());
                map.put(
"vehi_info", CM.getAttrValue("vehi_info")
                        .trim());
                map.put(
"vehisplit_info",
                        CM.getAttrValue(
"vehisplit_info").trim());
                map.put(
"car_lens", CM.getAttrValue("car_lens").trim());
                map.put(
"pub_info", CM.getAttrValue("pub_info").trim());
                list.add(map);
            }

        }


        String filenames 
= "预案台帐"
                
+ CAutoSerialNumber.getServerDateTime();
        
//String filenames = "预案台帐." + typedot;
        ReportExport.export(list, filenames, types, reportFile,
                request, response);
/**//*         out.clear();
        out = pageContext.pushBody(); 
*/

        
/**//*         JRDataSource ds = new JRBeanCollectionDataSource(list, false);
         JasperReport jasperReport = (JasperReport) JRLoader
         .loadObject(reportFile);
         Map parameters = new HashMap();
         JasperPrint jasperPrint = JasperFillManager.fillReport(
         jasperReport, parameters, ds);

         response.setContentType("application/msword;charset=utf-8");
         String files = "预案台帐" + CAutoSerialNumber.getServerDateTime() + ".doc";
         String fileName = new String(files.getBytes("GBK"), "ISO8859_1");
         response.setHeader("Content-disposition",
         "attachment; filename=" + fileName);
        
         OutputStream os=response.getOutputStream();   

         JRExporter exporter = new JRRtfExporter();
         exporter.setParameter(JRExporterParameter.JASPER_PRINT,
         jasperPrint);
         exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,
         os);

         exporter.exportReport();
        
        

         out.clear();   
         out = pageContext.pushBody();  
*/


    }
  catch  (Exception e)  {
        e.printStackTrace();

    }

%>

JAVA代码

package  com.szywit.file;

import  java.io.File;
import  java.io.IOException;
import  java.io.InputStream;
import  java.io.ObjectOutputStream;
import  java.io.UnsupportedEncodingException;
import  java.lang.reflect.Field;
import  java.util.Collection;
import  java.util.HashMap;
import  java.util.Map;

import  javax.servlet.ServletOutputStream;
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.JRExporter;
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.JasperReport;
import  net.sf.jasperreports.engine.base.JRBaseReport;
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.JRRtfExporter;
import  net.sf.jasperreports.engine.export.JRXlsExporter;
import  net.sf.jasperreports.engine.export.JRXlsExporterParameter;
import  net.sf.jasperreports.engine.util.JRLoader;

/** */ /**
 * 按照类型导出不同格式文件
 * 
 * 
@param datas
 *            数据
 * 
@param type
 *            文件类型
 * 
@param is
 *            jasper文件的来源
 * 
@param request
 * 
@param response
 
*/


public   class  ReportExport  {
    
public static void prepareReport(JasperReport jasperReport, String type) {
        
/**//*
         * 如果导出的是excel,则需要去掉周围的margin
         
*/

        
if ("excel".equals(type))
            
try {
                Field margin 
= JRBaseReport.class
                        .getDeclaredField(
"leftMargin");
                margin.setAccessible(
true);
                margin.setInt(jasperReport, 
0);
                margin 
= JRBaseReport.class.getDeclaredField("topMargin");
                margin.setAccessible(
true);
                margin.setInt(jasperReport, 
0);
                margin 
= JRBaseReport.class.getDeclaredField("bottomMargin");
                margin.setAccessible(
true);
                margin.setInt(jasperReport, 
0);
                Field pageHeight 
= JRBaseReport.class
                        .getDeclaredField(
"pageHeight");
                pageHeight.setAccessible(
true);
                pageHeight.setInt(jasperReport, 
2147483647);
            }
 catch (Exception exception) {
            }

    }


    
/** *//**
     * 导出excel
     
*/

    
public static void exportExcel(JasperPrint jasperPrint,String filename,
            HttpServletRequest request, HttpServletResponse response)
            
throws IOException, JRException {
        
/**//*
         * 设置头信息
         
*/

        
if (filename.trim() != null && filename != null{
            filename 
= filename + ".xls";
        }
 else {
            filename 
= "export.xls";
        }

            
        response.setContentType(
"application/vnd.ms-excel");
        String fileName 
= new String(filename.getBytes("GBK"), "ISO8859_1");
        response.setHeader(
"Content-disposition""attachment; filename="
                
+ fileName);

        ServletOutputStream ouputStream 
= response.getOutputStream();
        JRXlsExporter exporter 
= new JRXlsExporter();
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);
        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();
        ouputStream.flush();
        ouputStream.close();
    }


    
/** *//**
     * 导出pdf,注意此处中文问题, 1)在ireport的classpath中加入iTextAsian.jar
     * 2)在ireport画jrxml时,pdf font name :STSong-Light ,pdf encoding :
     * UniGB-UCS2-H
     
*/

    
public static void exportPdf(JasperPrint jasperPrint,
            HttpServletRequest request, HttpServletResponse response)
            
throws IOException, JRException {
        response.setContentType(
"application/pdf");
        String fileName 
= new String("未命名.pdf".getBytes("GBK"), "ISO8859_1");
        response.setHeader(
"Content-disposition""attachment; filename="
                
+ fileName);
        ServletOutputStream ouputStream 
= response.getOutputStream();
        JasperExportManager.exportReportToPdfStream(jasperPrint, ouputStream);
        ouputStream.flush();
        ouputStream.close();
    }

    
/** *//**
     * 在线显示pdf,
     
*/

    
public static void exportLinePdf(JasperPrint jasperPrint,String defaultFilename,
            HttpServletRequest request, HttpServletResponse response)
            
throws IOException, JRException {
    
        String defaultname 
= null;
        
try {
            response.setContentType(
"application/pdf");
            response.setCharacterEncoding(
"UTF-8");
            
if (defaultFilename.trim() != null && defaultFilename != null{
                defaultname 
= defaultFilename + ".pdf";
            }
 else {
                defaultname 
= "export.pdf";
            }

            response.setHeader(
"Content-disposition""inline; filename="+defaultname);
            ServletOutputStream ouputStream 
= response.getOutputStream();
            JasperExportManager.exportReportToPdfStream(jasperPrint, ouputStream);
            ouputStream.flush();
            ouputStream.close();
        }
 catch (Exception e) {
            System.out.println(
"Jasper Output Error:" + e.getMessage());
        }

    }



    
/** *//**
     * 导出html
     
*/

    
public static void exportHtml(JasperPrint jasperPrint,
            HttpServletRequest request, HttpServletResponse response)
            
throws IOException, JRException {
        response.setContentType(
"text/html");
        ServletOutputStream ouputStream 
= response.getOutputStream();
        JRHtmlExporter exporter 
= new JRHtmlExporter();
        exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN,
                Boolean.FALSE);
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
        exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, 
"UTF-8");
        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);

        exporter.exportReport();

        ouputStream.flush();
        ouputStream.close();
    }


    
/** *//**
     * 导出word
     
*/

    
public static void exportWord(JasperPrint jasperPrint,String filename,
            HttpServletRequest request, HttpServletResponse response)
            
throws JRException, IOException {
        
if (filename.trim() != null && filename != null{
            filename 
= filename + ".xls";
        }
 else {
            filename 
= "export.xls";
        }

        response.setContentType(
"application/msword;charset=utf-8");
        String fileName 
= new String(filename.getBytes("GBK"), "ISO8859_1");
        response.setHeader(
"Content-disposition""attachment; filename="
                
+ fileName);
        ServletOutputStream ouputStream 
= response.getOutputStream();
        JRExporter exporter 
= new JRRtfExporter();
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,
                ouputStream);

        exporter.exportReport();
        ouputStream.flush();
        ouputStream.close();
    }


    
/** *//**
     * 打印
     
*/

    
public static void exportPrint(JasperPrint jasperPrint,
            HttpServletResponse response, HttpServletRequest request)
            
throws IOException {
        response.setContentType(
"application/octet-stream");
        ServletOutputStream ouputStream 
= response.getOutputStream();
        ObjectOutputStream oos 
= new ObjectOutputStream(ouputStream);
        oos.writeObject(jasperPrint);
        oos.flush();
        oos.close();
        ouputStream.flush();
        ouputStream.close();
    }


    
public static void export(Collection datas,String filename, String type, File is,
            HttpServletRequest request, HttpServletResponse response) 
{
        
try {
            JasperReport jasperReport 
= (JasperReport) JRLoader.loadObject(is);
            prepareReport(jasperReport, type);
            JRDataSource ds 
= new JRBeanCollectionDataSource(datas, false);
            Map parameters 
= new HashMap();
            JasperPrint jasperPrint 
= JasperFillManager.fillReport(
                    jasperReport, parameters, ds);

            
if (EXCEL_TYPE.equals(type)) {
                exportExcel(jasperPrint,filename,request, response);
            }
 else if (PDF_TYPE.equals(type)) {
                exportPdf(jasperPrint, request, response);
            }
 else if (HTML_TYPE.equals(type)) {
                exportHtml(jasperPrint, request, response);
            }
 else if (WORD_TYPE.equals(type)) {
                exportWord(jasperPrint, filename,request, response);
            }
else if (LINE_TYPE.equals(type)) {
                exportLinePdf(jasperPrint,filename,request, response);
            }

        }
 catch (Exception e) {
            e.printStackTrace();
        }

    }


    
public static final String PRINT_TYPE = "print";
    
public static final String PDF_TYPE = "pdf";
    
public static final String EXCEL_TYPE = "excel";
    
public static final String HTML_TYPE = "html";
    
public static final String WORD_TYPE = "word";
    
public static final String LINE_TYPE = "linePdf";

}




 

你可能感兴趣的:(IREPORT报表实现)