如何使用iReport 和jasper生成报表(SQL传参数及中文文件名)

 1.首先下载所需要的工具和架包。这里不在多说了。

2.这里只介绍几个难点。

1)用ireport创建完成jrxml文件后,到ireport的安装目录找到相应的jasper文件,然后放到项目的一个目录中。(由于让程序每次都编译jrxml很浪费时间,再说模板也不容易改变,建议只编译一次就OK)

2)使用代码如下

Session session = HibernateUtil.currentSession();
   Connection con = session.connection();    //得到链接
   Statement stmt = con.createStatement();
   ResultSet rs = stmt.executeQuery("select * from applications_list where app_id='" +appId+"'");    //用数据集传入带参数的SQL语句
   System.out.println("select * from applications_list where appl_list_id='" +appId+"'");
   String appPath = request.getSession().getServletContext().getRealPath("/");    //得到以便于好的jasper文件
   if (appPath.lastIndexOf("//") != appPath.length() - 1)appPath += "//";
   String reportFileName = appPath+ "jasper//untitled_report_1.jasper";
   Map parameters = new HashMap();
   parameters.put("Title", "设备申请列表");//注意可以有很多个参数
   JasperPrint jasperPrint = JasperFillManager.fillReport(reportFileName, parameters, new JRResultSetDataSource(rs));
   JRRtfExporter exporter = null;
   exporter = new JRRtfExporter();
   response.setContentType("text/html; charset=UTF-8");
   response.setContentType("application/msword");
   String applicatiosname = ToUTF8.toUtf8String("设备申请单");    //处理下载后文件名中文问题
   response.setHeader("Content-disposition","attachment;filename="+applicatiosname+".doc");
   exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8");
   exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
   exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream());
   exporter.exportReport();

 

 

 

  * 返回字符编码UTF-8  */
 public static String toUtf8String(String s) {
  StringBuffer sb = new StringBuffer();
  for (int i = 0; i < s.length(); i++) {
   char c = s.charAt(i);
   if (c >= 0 && c <= 255) {
    sb.append(c);
   } else {
    byte[] b;
    try {
     b = Character.toString(c).getBytes("UTF-8");
    } catch (Exception ex) {
     //System.out.println(ex);
     b = new byte[0];
    }
    for (int j = 0; j < b.length; j++) {
     int k = b[j];
     if (k < 0)
      k += 256;
     sb.append("%" + Integer.toHexString(k).toUpperCase());
    }
   }
  }
  return sb.toString();
 }

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值