在jsp中调用报表

    技术2022-05-18  26

    在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···这样也会出现错误的····


    最新回复(0)