在jsp中调用报表

来源:互联网 发布:手机淘宝客登录不上去 编辑:程序博客网 时间:2024/04/28 00:23

在jsp中调用报表·····
    解决这个问题也用了我差不多2天时间:(,但总算是搞定了·····
    下面分别介绍以pdf格式和以html格式显示报表····
   a、pdf格式ireport_pdf.jsp····

   <%@ page import="net.sf.jasperreports.engine.*" %>
    <%@ page import="java.util.*" %>
    <%@ page import="java.io.*" %>
    <%@ page import="java.sql.*" %>
    <%
      //报表编译之后生成的.jasper 文件的存放位置
      File reportFile = new File(application.getRealPath("ireport/xueji.jasper"));
      //这个是用来联接我的mysql 的JDBC URL
      String url="jdbc:mysql://localhost:3306/xueji?useUnicode=true&characterEncoding=gb2312";
      Class.forName("org.gjt.mm.mysql.Driver").newInstance();
      //传递报表中用到的参数值
      Map parameters = new HashMap();
     //"Name"是报表中定义过的一个参数名称,其类型为String 型

     parameters.put("banji", new String(" c1"));
     System.out.println("---------conn-------------");
     //连接到数据库
     Connection conn = DriverManager.getConnection(url,"root","root");
     System.out.println("---------Jasper begin-------------");
     //在控制台显示一下报表文件的物理路径
     System.out.println(reportFile.getPath());
     byte[] bytes=JasperRunManager.runReportToPdf(reportFile.getPath(),parameters,conn);

     System.out.println("---------Jasper end-------------");
     response.setContentType("application/pdf");
     response.setContentLength(bytes.length);
     ServletOutputStream ouputStream = response.getOutputStream();
     ouputStream.write(bytes, 0, bytes.length);
     ouputStream.flush();
     ouputStream.close();
   %>

    b、html格式ireport_html.jsp····   
   <%

    File reportFile = new File(application.getRealPath("/ireport/xueji.jasper"));
    JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());
    Map parameters = new HashMap();
    parameters.put("baiji", "c1");
   //parameters.put("BaseDir", reportFile.getParentFile());   
   //JRBeanArrayDataSource jrDataSource = new JRBeanArrayDataSource(objects);//objects为要打印的实体数组;

    Class.forName("org.gjt.mm.mysql.Driver");
    Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/xueji","root","root");
    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, conn);
         
    JRHtmlExporter exporter = new JRHtmlExporter();
    StringBuffer sbuffer = new StringBuffer();

    Map imagesMap = new HashMap();
    session.setAttribute("IMAGES_MAP", imagesMap);
   
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
    exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
    //exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap);
    //exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "/ireport/ireport_html.Image?image=");
    //exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML, "
");
    exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);
    exporter.exportReport();
    //out.flush();
    conn.close();
   % >

注意:以html格式调用主要要注意//exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap);
                              //exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "images目录的路径?image=");
                              在生成html预览的时候会生成一个px文件,而这个images_uri的路径就是那个px的路径,建议不用,就用下面
                              的语句就可以了····
                              exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);   
而这个语句则是处理分页用的····                              
//exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML, "
");


需要注意的地方····
必须在tomcat5以上版本中运行····
在运行的时候还要将jasperreports/lib下的包全部拷到tomcat下你所放文件目录下的win-inf/lib下···
特别要注意的是看看ireport/lib下的包与jasperreports/lib的包是否兼容···
之前我的一直有问题就是因为我的发布环境是jasperreports-0.6.7.jar而运行环境是jasperreports-0.6.8.jar···
这样也会出现错误的····

原创粉丝点击