ireport和jasperreport的简单使用

1.下载ireport包和jasperreport包

  去官方网站下载。

  iReport-nb-3.5.0.zip

  jasperreports-3.5.0-project.zip

2.使用ireport

  可以直接使用ireport生成报表,jasperreport只是用来在web应用上使用报表。

  1》.单独使用ireport,而且不使用中文,则不需要加入任何包到ireport的lib目录下。

  2》.使用中文,则需要加入iText-2.1.5.jar,iTextAsian.jar两个jar包到ireport的lib下,或者通过【工具】--》【选项】--》【classpath选项卡】加入依赖jar包。

  注意:ireport3.5.0的版本,没有什么编译,一保存就生成jrxml文件,点击preview相应的方式就会生成相应的应用文件和jasper文件。

   3》.具体的ireport的使用可以参考她的官网。http://ireport.cubebi.com/

3.在web上使用报表

  1.导入依赖的包

     com-jaspersoft-ireport.jar

     commons-beanutils-1.8.0.jar

     commons-collections-3.2.1.jar

     commons-digester-2.0.jar

     commons-logging.jar

     iText-2.1.5.jar

     iTextAsian.jar

     jasperreports-3.1.4.jar

     poi-3.2-FINAL-20081019.jar

当然还有数据库的驱动包mysql-connector-java-5.0.3-bin.jar

  2.使用ireport生成的jasper文件,将它放在webRoot下report下的jasper目录里。

  3.编写调用web文件。

    这是主要的jsp文件,可以通过如http://127.0.0.1:8080/工程名/xxx.jsp?reportType=pdf的方式测试

 

 <%@page contentType="text/html;charset=GB2312"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.io.File"%>
<%@page import="net.sf.jasperreports.engine.JasperRunManager"%>
<%@page import="net.sf.jasperreports.engine.JasperPrint"%>
<%@page import="net.sf.jasperreports.engine.JasperFillManager"%>
<%@page import="net.sf.jasperreports.engine.export.JRXlsExporter"%>
<%@page import="net.sf.jasperreports.engine.JRExporterParameter"%>
<%@page import="net.sf.jasperreports.engine.export.JRXlsExporterParameter"%>
<%@page import="java.io.ByteArrayOutputStream"%>
<%@page import="net.sf.jasperreports.engine.export.JRHtmlExporterParameter"%>
<%@page import="net.sf.jasperreports.engine.export.JRHtmlExporter"%>
<%@page import="java.sql.DriverManager"%>
<%

 String rptpath = application.getRealPath("/report/jasper");//我们将要使用的报表模板保存路径
// String reportname = request.getParameter("reportName");//获取报表名称
 String reportname ="employee";//一个employee.jasper的模板

 String driverName = "com.mysql.jdbc.Driver"; //加载JDBC驱动
 String dbURL = "jdbc:mysql://localhost:3306/wanrue"; //连接服务器和数据库test
 String userName = "root"; //默认用户名
 String userPwd = "xwrwc"; //密码
 try {
  Class.forName(driverName);
  Connection con = DriverManager.getConnection(dbURL, userName, userPwd);//创建数据源
  File rpt = new File(rptpath + "/" + reportname + ".jasper");//获取报表模板
  
  //将解析完的参数传入报表模板中并生成报表
  if(request.getParameter("reportType").equals("pdf")){
   byte[] bytes = JasperRunManager.runReportToPdf(rpt.getPath(), null, con);
   response.setContentType("application/pdf");
   response.setContentLength(bytes.length);
   ServletOutputStream ouputStream = response.getOutputStream();
   ouputStream.write(bytes, 0, bytes.length);
   ouputStream.flush();
   ouputStream.close();
   con.close();
   out.clear();
   out = pageContext.pushBody();
  }else if(request.getParameter("reportType").equals("xls")){
   JRXlsExporter exporter = new JRXlsExporter();
   ByteArrayOutputStream oStream = new ByteArrayOutputStream();
   JasperPrint jasperPrint = JasperFillManager.fillReport(rpt.getPath(), null, con);
   exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
   exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, oStream);
   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();
   byte[] bytes = oStream.toByteArray();
   response.setContentType("application/vnd.ms-excel");
   response.setContentLength(bytes.length);
   ServletOutputStream ouputStream = response.getOutputStream();
   ouputStream.write(bytes, 0, bytes.length);
   ouputStream.flush();
   ouputStream.close();
   con.close();
   out.clear();
   out = pageContext.pushBody();
  }else{
   //生成html
   JRHtmlExporter exporter = new JRHtmlExporter();
   ByteArrayOutputStream oStream = new ByteArrayOutputStream();
   JasperPrint jasperPrint = JasperFillManager.fillReport(rpt.getPath(), null, con);
   exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);
   exporter.setParameter(JRHtmlExporterParameter.JASPER_PRINT, jasperPrint);
   exporter.setParameter(JRHtmlExporterParameter.CHARACTER_ENCODING, "utf-8");
   exporter.setParameter(JRHtmlExporterParameter.OUTPUT_STREAM, oStream);
   exporter.exportReport();
   byte[] bytes = oStream.toByteArray();
   response.setContentType("text/html");
   response.setContentLength(bytes.length);
   response.setCharacterEncoding("utf-8");
   ServletOutputStream ouputStream = response.getOutputStream();
   ouputStream.write(bytes, 0, bytes.length);
   ouputStream.flush();
   ouputStream.close();
   con.close();
   out.clear();
   out = pageContext.pushBody();
  }
 } catch (Exception ex) {
  System.out.print("Jasper Output Error:" + ex.getMessage());
  ex.printStackTrace();
 }
%>

 4.中文问题

2 设置中文支持
    为了在报表中能够显示中文,加入以上四个包还不够(因为以上四个包仅对报表生成及中文显示提供了支持),必须设置报表上各显示对象的相关属性,各属性设置说明如下:
    Font        name:    宋体 (中文字体)
    PDF font name:   STSong-Light
    PDF  Encoding:  UniGB-UCS2-H(Chinese Siplified)
    PDF   Embeded: √
    注意:此三项的设置必须确保iTextAsian.jar亚洲语言包已经包含在项目中,否则出现编译错误.
    ”Fonts”菜单进行统一设置,并设成报表的默认字体。如下图所示:若读者觉得对每一个对象设置比较麻烦,可通过iReport的”Format”
 
3可能出现的问题
   经过以上的设置,报表中文的显示应该没什么问题了,笔者在报表的开发过程中遇到几个问题,现总结如下:
  3.1 问题描述
   在WinXp中运行iReport1.2.8,设计报表时将数据字段的字体设置成中文字体,调好格式后编译并运行,并使用JRViewer进行预览一切正常(中文显示正常),但使用PDF、Excel预览出现如下错误:
   Could not load the following font :
   pdfFontName   : STSong-Light
   pdfEncoding   : UniGB-UCS2-H
   isPdfEmbedded : true
   产生原因:成成PDF的亚洲语言包没有包含到项目中
   解决办法”Classpath”将iTextAsian.jar添加Classpath中或者直接将iTextAsian.jar复制到iReport安装目录下的lib中.若是Web项目则应该将iTextAsian.jar复制到此项目的WEB-INF/lib/中.:将亚洲语言包iTextAsian.jar包含到项中,可能过iReport的”Options”
   3.2 问题描述
    在WinXp中运行iReport1.2.8,设计报表时将数据字段的字体设置成中文字体,调好格式后编译并运行,并使用JRViewer进行预览一切正常(中文显示正常),使用PDF、Excel预览时无任何错误,但中文无法显示(只显示空白).
    产生原因:报表显示对象的PDF字体属性设置不正确
    解决办法: 报表对象有关字体属性的设置如下:
    Font        name:         宋体 (中文字体)
    PDF font name:  STSong-Light
    PDF Encoding:   UniGB-UCS2-H(Chinese Siplified)
    PDF Embeded:  √
 
 
   3.3问题描述
    生成PDF、Excel文件时,中文显示一切正常,但生成Html文件时显示乱码
 产生原因:主要是网页编码问题
    解决方法
 在JSP页中生成Html时,设置 <%@ page contentType="text/html;charset=GB2312" %> 
 在Servlet中生成Html时,response.setContentType("text/html;charset=GB2312");
  若用户对项目进行了统一编码设定及过滤,则需要另作考虑,但主要还是集中在编码问题上.例如:笔者最近做的项目是其于Struts的,对编码进行了统一和过滤处理,生成Html页面时无需指编码就可正确生成Html页面,并不会出乱码,若设置成charset=GB2312反而出现了乱码.总之,对编码的统一与处理还是比较嘛烦的事.
    另外, 我们通过查看iReport生成的jrxml(<?xml version="1.0" encoding="UTF-8" ?>)文件可以发现, iReport保存的汉字都是UTF-8编码。了解它的编码可以有助于我们统一编码方式。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值