001package top.cenze.utils; 002 003/** 004 * jasper报表工具类 005 */ 006public class JasperReportUtil { 007 008// /** 009// * 使用 JasperReports 生成报表文件 010// * @param templatePath 模板文件路径及名称 011// * @param fileType 生成的文件类型,例如: pdf、html、xls 等 012// * @param parameters 传递到 jrxml 模板文件中的数据参数 013// * @param fields 传递到 jrxml 模板文件中的表格(集合)数据参数 014// * @return 返回生成的报表文件路径 015// */ 016// public static MultipartFile generateReport(String templatePath, ReportFileTypeEnum fileType, Map<String, Object> parameters, List<Map<String, Object>> fields) throws Exception { 017// // 1、获取 jasper 模板文件【采用流的方式读取】 018// ClassPathResource resource = new ClassPathResource(templatePath); 019// InputStream is = resource.getInputStream(); 020// 021// return generateReport(is, fileType, parameters, fields); 022// } 023// 024// /** 025// * 使用 JasperReports 生成报表文件 026// * @param isTemplate 模板文件流 027// * @param fileType 生成的文件类型,例如: pdf、html、xls 等 028// * @param parameters 传递到 jrxml 模板文件中的数据参数 029// * @param fields 传递到 jrxml 模板文件中的表格(集合)数据参数 030// * @return 返回生成的报表文件路径 031// */ 032// public static MultipartFile generateReport(InputStream isTemplate, ReportFileTypeEnum fileType, Map<String, Object> parameters, List<Map<String, Object>> fields) throws Exception { 033// if (ObjectUtil.isNull(isTemplate)) { 034// return null; 035// } 036// 037// // 1、读取模板文件流 038// JasperReport jasperReport = (JasperReport) JRLoader.loadObject(isTemplate); 039// 040// // 2、创建数据源参数(表格集合数据) 041// JRBeanCollectionDataSource listBeanDataSource = new JRBeanCollectionDataSource(fields); 042// 043// // 将parameters和fields数据源传递collate.jasper进行数据拼装 044// // 3、将 parameters 数据参数填充到模板文件中 045// JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, listBeanDataSource); 046// 047// /**查看底层代码发现JasperFillManager.fillReport(inputStream, map,new JREmptyDataSource()) 048// *中有调用(JasperReport) JRLoader.loadObject(inputStream)所以在这里我注掉了 049// *如果要使用(JasperReport) JRLoader.loadObject(inputStream)该方法 050// *fillReport方法的参数改为JasperFillManager.fillReport(jasperReport, map,new JREmptyDataSource()) 051// */ 052//// JasperReport jasperReport = (JasperReport) JRLoader.loadObject(inputStream); 053// //将数据源传递collate.jasper进行数据拼装 054// //fillReport接口就是处理数据和.jasper文件交互的方法 055//// JasperPrint jasperPrint = JasperFillManager.fillReport(inputStream, map, listBeanDataSource); 056// /** 057// *JasperCompileManager: 用于编译JRXML报表模板。 058// *JasperFillManager: 用于填充一个报表,从数据源的数据 059// *JasperPrintManager: 用于打印的JasperReports类库生成的文件 060// *JasperExportManager: 用于获取PDF,HTML或XML内容以供报表填充过程中产生的 *文件 061// *JasperViewer: 它代表了一个简单的Java Swing应用程序,可以加载和显示报表。 062// *JasperDesignViewer: 用于在设计时预览报表模板。 063// */ 064// // 调用打印方法 065//// JasperPrintManager.printReport(jasperPrint,false); 066// 067// // 4、按照指定的 fileType文件类型导出报表文件 068// if (ObjectUtil.isNull(fileType)) { 069// fileType = ReportFileTypeEnum.PDF; 070// } 071// File reportFIle = CZFileUtil.createReportFIle(fileType); 072// switch (fileType) { 073// case PDF: 074// JasperExportManager.exportReportToPdfFile(jasperPrint, reportFIle.getAbsolutePath()); 075// 076// break; 077// case XLS: 078// JRXlsExporter exporter = new JRXlsExporter(); 079// exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); // 设置导出的输入源 080// exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(reportFIle)); // 设置导出的输出源 081// // 配置信息 082// SimpleXlsReportConfiguration configuration = new SimpleXlsReportConfiguration(); 083// configuration.setOnePagePerSheet(true); // 每一页一个sheet表格 084// exporter.setConfiguration(configuration); // 设置配置对象 085// exporter.exportReport(); // 执行导出 086// 087// break; 088// case XLSX: 089// JRXlsxExporter exporterXlsx = new JRXlsxExporter(); 090// exporterXlsx.setExporterInput(new SimpleExporterInput(jasperPrint)); // 设置导出的输入源 091// exporterXlsx.setExporterOutput(new SimpleOutputStreamExporterOutput(reportFIle)); // 设置导出的输出源 092// SimpleXlsxReportConfiguration configurationXlsx = new SimpleXlsxReportConfiguration(); 093// configurationXlsx.setOnePagePerSheet(true); // 每一页一个sheet表格 094// exporterXlsx.setConfiguration(configurationXlsx); 095// exporterXlsx.exportReport(); // 执行导出 096// 097// break; 098// default: 099// JasperExportManager.exportReportToHtmlFile(jasperPrint, reportFIle.getAbsolutePath()); 100// 101// break; 102// } 103// 104// // 生成报表文件成功 105// MultipartFile multipartFile = null; 106// if (ObjectUtil.isNotNull(reportFIle) && FileUtil.exist(reportFIle)) { 107// multipartFile = MultipartFileUtil.getMultipartFile(reportFIle); 108// } 109// 110// isTemplate.close(); 111//// FileUtil.del(reportFIle); 112// 113// return multipartFile; 114// } 115}