JasperReport无法导出含有chart(饼形图)的execl.
源码如下,请大侠们帮忙看一下……
JRDataSource dataSource = new JRBeanCollectionDataSource(data);
//获取模板存放的真实路径,绝对路径
String reportFilePath = getRequest().getSession().getServletContext().getRealPath("/report/report12.jasper");
//定义一个输出流
OutputStream ouputStream = getResponse().getOutputStream();
// 设置输出格式,默认为pdf的格式,因为导出的Excel格式需要自己稍微的调整报表的大小,建议输出为pdf格式
String contentType="pdf";
//根据前台传递的参数判断导出的格式
if ("xls".equals(format.toLowerCase())) {
contentType = "xls";
}
//设定导出的格式
getResponse().setContentType("application/" + contentType);
//设定导出报表的格式
getResponse().setCharacterEncoding("UTF-8");
//定义导出报表的名称和格式,如:机构类型表.xls或机构类型表.pdf
getResponse().setHeader("Content-Disposition", "attachment; filename="+URLEncoder.encode("总收入分成比例表", "UTF-8")+"." +contentType);
//定义一个模板导出器
JRAbstractExporter exporter = new JRRtfExporter();
//不同的格式导出器的方式不同,下面PDF和Excel为例
if ("pdf".equals(format.toLowerCase())) {
exporter = new JRPdfExporter(); //重新new一个PDF格式的导出器
} else if ("xls".equals(format.toLowerCase())) {
exporter = new JRXlsExporter(); // excel导出器
exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, false);
}
//加载已经编译好的模板,编译好的模板格式为.jasper
JasperReport report = (JasperReport)JRLoader.loadObject(reportFilePath);
//此时,进行数据填充,report为Jasper文件,reportParameters为参数Map,dataSource为Connection
//注意:此时MAP中的参数的key名称一定要和模板中定义的参数名称一致,负责会获取不到数据从而导致填充数据失败
//第三个参数建议使用dataSource作为数据源,不建议使用Connection,因为
//要在Ireport里写SQL语句,将需要的字段在SQL语句里输出出来,然后再拖拉构造模版文件。当报表比较复杂时,这种情况就需要写一些非常复杂的SQL语句
JasperPrint jasperPrint = JasperFillManager.fillReport(report, reportParameters,dataSource);
// getRequest().getSession().setAttribute( ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);
// 设置要输出的jasper对象
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
// 设置输出流
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);
// 导出带有数据的报表
exporter.exportReport();
ouputStream.flush();
ouputStream.close();
补充:Java , Java EE