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