jasperreport_ireport集成与使用

来源:互联网 发布:enum java 用法 编辑:程序博客网 时间:2024/05/20 18:54

Jasperreport是一个功能强大的报表类库,可以利用ireport设计报表的最终显示内容和页面。此文实现jasperreport与项目的集成,利用此方式在以后增加报表时,只需做二部分工作,一是通过ireport 设计报表,二是针对报表所需的参数编写jsp页面。

1 下载相关项目包

iReport-nb-3.1.3.zip

jasperreports-3.1.4-project.zip

 

2 把相关jar包加入web-inflib目录下

itext-1.3.jar

iTextAsian.jar

jasperreports-1.3.3.jar

jxl.jar

poi-3.0.1-FINAL-20070705.jar

poi-contrib-3.0.1-FINAL-20070705.jar

poi-scratchpad-3.0.1-FINAL-20070705.jar

 

 

3 编写相关servlet

package com.web.servlet;

 

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import java.util.Set;

import java.util.Map.Entry;

 

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.ServletOutputStream;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.shane.areaportal.web.util.ConnectionFactory;

import net.sf.jasperreports.engine.JRExporterParameter;

import net.sf.jasperreports.engine.JasperCompileManager;

import net.sf.jasperreports.engine.JasperFillManager;

import net.sf.jasperreports.engine.JasperPrint;

import net.sf.jasperreports.engine.JasperReport;

import net.sf.jasperreports.engine.export.JRHtmlExporter;

import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;

import net.sf.jasperreports.engine.export.JRPdfExporter;

import net.sf.jasperreports.engine.export.JRRtfExporter;

import net.sf.jasperreports.engine.export.JRXlsAbstractExporter;

import net.sf.jasperreports.engine.export.JRXlsAbstractExporterParameter;

import net.sf.jasperreports.engine.export.JRXlsExporter;

import net.sf.jasperreports.engine.util.JRLoader;

import net.sf.jasperreports.j2ee.servlets.BaseHttpServlet;

import net.sf.jasperreports.j2ee.servlets.ImageServlet;

 

 

public class IreportServlet extends BaseHttpServlet {

 

         public void doGet(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

                  

                   this.doPost(request, response);

         }

 

         public void doPost(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

                  

                   response.setContentType("text/html;charset=GBK");

                   ServletContext context = this.getServletConfig().getServletContext();

                   String type = request.getParameter("type");

                   JasperPrint jasperPrint = null;

                  JRXlsAbstractExporter xlsexporter;

                   JRPdfExporter pdfexporter;

                   JRRtfExporter rtfexporter;

                   List list = null;    

                    

                   //判断HTML格式报表

                   if("HTML".equals(type)||"".equals(type)||type==null) {

                   PrintWriter out = response.getWriter();                          

                   jasperPrint = (JasperPrint)request.getSession().getAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE);

                   int pageIndex = 0;

                   int lastPageIndex = 1;

                   if(jasperPrint!=null) {

                            list = jasperPrint.getPages();

                   }

                   if (list!= null)  

                   {

                            lastPageIndex = jasperPrint.getPages().size() - 1;

                   }

                   String pageStr = request.getParameter("page");

                   if(pageStr!=null) {

                            pageIndex = Integer.parseInt(pageStr);

                   }

                   if (pageIndex < 0)

                   {

                            pageIndex = 0;

                   }

 

                   if (pageIndex > lastPageIndex)

                   {

                            pageIndex = lastPageIndex;

                   }

                   out.println("<html>");

                   out.println("<meta http-equiv='Content-Type' content='text/html; charset=gbk'>");

                   out.println("<head>");

                   out.println(" <style type='text/css'>");

                   out.println("*{margin:0 auto;padding:0;}");

                   out.println("a {text-decoration: none}");

                   out.println("</style>");

                   out.println("</head>");

                   out.println("<body >");

 

                   out.println("<div style='overflow-y: scroll;height:100%;text-align:center;'>");

                   out.println("<table width='20%' cellpadding='0' cellspacing='0' border='0' style='margin-top:12px;'>");

                   out.println("<tr>");

                   out.println("<td><a href='"+this.getServletName()+"?pag=0'><img src='./images/reload.GIF' border='0'></a></td>");

                   out.println("<td>&nbsp;&nbsp;&nbsp;</td>");

                   if (pageIndex > 0)

                   {

                            out.println("<td><a href='"+this.getServletName()+"?page=0'><img src='./images/first.GIF' border='0'></a></td>");

                            out.println("<td><a href='"+this.getServletName()+"?page="+(pageIndex-1)+"'><img src='./images/previous.GIF' border='0'></a></td>");

                   }else {

                            out.println("<td><img src='./images/first_grey.GIF' border='0'></td>");

                            out.println("<td><img src='./images/previous_grey.GIF' border='0'></td>");

                   }

                   String page = request.getParameter("page");

                   if(page!=null) {

                            pageIndex = Integer.parseInt(page);

                   }

                   if(pageIndex < lastPageIndex) {

                            out.println("<td><a href='"+this.getServletName()+"?page="+(pageIndex + 1)+"'><img src='./images/next.GIF' border='0'></a></td>");

                            out.println("<td><a href='"+this.getServletName()+"?page="+lastPageIndex+"'><img src='./images/last.GIF' border='0'></a></td>");

                   }else {

                            out.println("<td><img src='./images/next_grey.GIF' border='0'></td>");

                            out.println(" <td><img src='./images/last_grey.GIF' border='0'></td>");

                   }

                   out.println("</tr>");

                   out.println("</table>");

                   try {

                            if(request.getParameter("reload")!=null || jasperPrint == null) {

                            JasperCompileManager.compileReportToFile(context.getRealPath(this.getJrxmlPath(request)));

                            String reportFileName = context.getRealPath(this.getJasperPath(request));

                            File reportFile = new File(reportFileName);

                            JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());

                            Map parameters = this.getHtmlParameters(request,response);

                            jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, ConnectionFactory.getConn());

                            request.getSession().setMaxInactiveInterval(240*60);

                            request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);

                            }

                            JRHtmlExporter exporter = new JRHtmlExporter();

                            StringBuffer sbuffer = new StringBuffer();

                            exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);

                            exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);

                            exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "image?image=");

                            exporter.setParameter(JRExporterParameter.PAGE_INDEX, new Integer(pageIndex));

                            exporter.setParameter(JRHtmlExporterParameter.HTML_HEADER, "");

                            exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML, "");

                            exporter.setParameter(JRHtmlExporterParameter.HTML_FOOTER, "");

                            exporter.exportReport(); 

                             

                   } catch (Exception e) {

                            e.printStackTrace();     

                   }

                   out.println("</div>");

                   out.println("</body>");

                   out.println("</html>");

                   out.flush();

                   out.close();

                  

                   }else if("PDF".equals(type)) {

                            try {

                            JasperCompileManager.compileReportToFile(context.getRealPath(this.getJrxmlPath(request)));

                            String reportFileName = context.getRealPath(this.getJasperPath(request));

                            File reportFile = new File(reportFileName);

                            JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());

                            Map parameters = this.getHtmlParameters(request,response);

                            jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, ConnectionFactory.getConn());

                            pdfexporter = new JRPdfExporter();

                            pdfexporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);

                            ByteArrayOutputStream baos = new ByteArrayOutputStream();

                         pdfexporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);

                         pdfexporter.exportReport();

                         byte[] bytes = baos.toByteArray();

                         if (bytes != null && bytes.length > 0)

                          {

                                   response.setContentType("application/pdf");

                                   response.setContentLength(bytes.length);

                                    ServletOutputStream ouputStream = response.getOutputStream();

   

                                  try

                                 {

                                            ouputStream.write(bytes, 0, bytes.length);

                                              ouputStream.flush();

                                   }

                                  finally

                                    {

                                             if (ouputStream != null)

                                              {

                                                     try

                                                     {

                                                              ouputStream.close();

                                                     }

                                                     catch (IOException ex)

                                                     {

                                                     }

                                            }

                                   }

                            }

                        

                            }catch(Exception e) {

                                     e.printStackTrace();

                            }//XLS格式报表

                   }else if("XLS".equals(type)) {

                            try {

                                     JasperCompileManager.compileReportToFile(context.getRealPath(this.getJrxmlPath(request)));

                                     String reportFileName = context.getRealPath(this.getJasperPath(request));

                                      File reportFile = new File(reportFileName);

                                     JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());

                                     Map parameters = this.getHtmlParameters(request,response);

                                     jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, ConnectionFactory.getConn());

                                     xlsexporter = new JRXlsExporter();

                                     xlsexporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);

                                ByteArrayOutputStream baos = new ByteArrayOutputStream();

                                xlsexporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);

                                xlsexporter.setParameter(JRXlsAbstractExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);

                                xlsexporter.setParameter(JRXlsAbstractExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);

                                xlsexporter.exportReport();

                                byte[] bytes = baos.toByteArray();

                                if ((bytes != null) && (bytes.length > 0))

                                  {

                                    response.setContentType("application/xls");

                                    response.setHeader("Content-Disposition", "inline; filename=/"file.xls/"");

                                    response.setContentLength(bytes.length);

                                    ServletOutputStream ouputStream = response.getOutputStream();

                                    try

                                    {

                                      ouputStream.write(bytes, 0, bytes.length);

                                      ouputStream.flush();

                                    }

                                    finally

                                    {

                                      if (ouputStream != null)

                                      {

                                        try

                                        {

                                          ouputStream.close();

                                        }

                                        catch (IOException ex)

                                        {

                                        }

 

                                      }

 

                                    }

                            }

                            }catch(Exception e) {

                                     e.printStackTrace();

                            }//RTF格式报表

                   }else if("RTF".equals(type)) {

                            try {

                                     JasperCompileManager.compileReportToFile(context.getRealPath(this.getJrxmlPath(request)));

                                     String reportFileName = context.getRealPath(this.getJasperPath(request));

                                     File reportFile = new File(reportFileName);

                                     JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());

                                     Map parameters = this.getHtmlParameters(request,response);

                                     jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, ConnectionFactory.getConn());

                                     rtfexporter = new JRRtfExporter();

                                     rtfexporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);

                               

                        ByteArrayOutputStream baos = new ByteArrayOutputStream();

                        rtfexporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);

                        rtfexporter.exportReport();

                        byte[] bytes = baos.toByteArray();

                        if (bytes != null && bytes.length > 0)

                        {

                                 response.setContentType("application/rtf");

                                 response.setHeader("Content-Disposition", "inline; filename=/"file.rtf/"");

                                 response.setContentLength(bytes.length);

                                 ServletOutputStream ouputStream = response.getOutputStream();

   

                                 try

                                 {

                                           ouputStream.write(bytes, 0, bytes.length);

                                           ouputStream.flush();

                                 }

                                 finally

                                 {

                                            if (ouputStream != null)

                                            {

                                                     try

                                                     {

                                                              ouputStream.close();

                                                     }

                                                     catch (IOException ex)

                                                     {

                                                     }

                                            }

                                  }

                                    

                            }

                            }catch(Exception e) {

                                     e.printStackTrace();

                            }

                   }

 

         }

        

         /**

          * 获取页面参数

          * @param request

          * @param response

          * @return

          */

         protected  Map getHtmlParameters(HttpServletRequest request,HttpServletResponse response) {

                   //从表单获取Map参数集合

                   Map map = request.getParameterMap();

                   //传入报表Map参数集合

                   Map parameterMap = new HashMap();

                   Set set = map.entrySet();

                   Iterator iterator = set.iterator();

                   while(iterator.hasNext()) {

                            Map.Entry<String,String[]> entry = (Entry<String, String[]>)iterator.next();

                            String[] s = entry.getValue();

                            parameterMap.put(entry.getKey(), s[0]);

                   }

                   return parameterMap;

         }

        

         //.jrxml格式文件路径

         protected  String  getJrxmlPath(HttpServletRequest request) {

                   return "/jasper/"+request.getParameter("filename")+".jrxml";

         } 

         //.jasper格式文件路径

         protected  String getJasperPath(HttpServletRequest request) {

                   return "/jasper/"+request.getParameter("filename")+".jasper";  

         }

}

 

 

4 web.xml 当中加入servlet描述

 

  <servlet-mapping>

    <servlet-name>IreportServlet</servlet-name>

    <url-pattern>/IreportServlet</url-pattern>

  </servlet-mapping>

  <servlet>

    <description>This is the description of my J2EE component</description>

    <display-name>This is the display name of my J2EE component</display-name>

    <servlet-name>IreportServlet</servlet-name>    <servlet-class>com.web.servlet.IreportServlet</servlet-class>

  </servlet>

 

5 jasperreports-3.1.4/demo/samples/webapp下的images图片文件夹复制到项目的webroot目录里。

原创粉丝点击