JBOSS 點滴

          豐豐的博客

          IREPORT報表實現(xiàn)

          一、在JSP中通過傳參數(shù)實現(xiàn)源代碼:(在jasper模板中定義好查詢條件及參數(shù))


          <%@ 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"));
                  
          //傳遞報表中用到的參數(shù)值,這里是空值
                  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+"%");

                  
          //連接到數(shù)據(jù)庫
                  Connection conn = null;
                  
          try {
                      conn 
          = ConnectionManager.getConnection("EMSDATACON");
                  }
           catch (Exception e) {
                      e.printStackTrace();
                      
          throw new Exception("創(chuàng)建默認數(shù)據(jù)庫連接不成功,請檢查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>

          二、通過傳遞結(jié)果集,JAVA實現(xiàn)

          <%@ 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 
          = "預(yù)案臺帳"
                          
          + CAutoSerialNumber.getServerDateTime();
                  
          //String filenames = "預(yù)案臺帳." + 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 = "預(yù)案臺帳" + 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;

          /**
           * 按照類型導(dǎo)出不同格式文件
           * 
           * 
          @param datas
           *            數(shù)據(jù)
           * 
          @param type
           *            文件類型
           * 
          @param is
           *            jasper文件的來源
           * 
          @param request
           * 
          @param response
           
          */


          public class ReportExport {
              
          public static void prepareReport(JasperReport jasperReport, String type) {
                  
          /*
                   * 如果導(dǎo)出的是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) {
                      }

              }


              
          /**
               * 導(dǎo)出excel
               
          */

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

                  
          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();
              }


              
          /**
               * 導(dǎo)出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());
                  }

              }



              
          /**
               * 導(dǎo)出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();
              }


              
          /**
               * 導(dǎo)出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";

          }




           

          posted on 2014-11-19 11:47 半導(dǎo)體 閱讀(384) 評論(0)  編輯  收藏 所屬分類: 報表

          主站蜘蛛池模板: 铜梁县| 廉江市| 安徽省| 黄大仙区| 蛟河市| 关岭| 大埔区| 即墨市| 西安市| 博客| 政和县| 商城县| 改则县| 沙湾县| 牙克石市| 永康市| 调兵山市| 舒兰市| 临城县| 忻州市| 信宜市| 永州市| 金坛市| 沈阳市| 富民县| 湛江市| 容城县| 祁阳县| 司法| 济宁市| 壶关县| 浦北县| 南涧| 七台河市| 兴义市| 普格县| 澜沧| 贵南县| 蓝田县| 子洲县| 日喀则市|