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}