package com.yiheng.clean_project.utils;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.export.SimpleExporterInput;
import net.sf.jasperreports.export.SimpleOutputStreamExporterOutput;
import net.sf.jasperreports.export.SimpleXlsReportConfiguration;
import net.sf.jasperreports.export.SimpleXlsxReportConfiguration;
import org.springframework.core.io.ClassPathResource;
import java.io.InputStream;
import java.util.*;
/**
-
DATE: 2023/12/4
-
Author: xiaoqu
-
Version: 1.0.0
*/
public class DemoJasperPDF {
public static void main(String[] args) throws Exception {
try {
ClassPathResource resource1 = new ClassPathResource("aa.jasper");
String templatePath = resource1.getPath();
// String templatePath ="D:\test\jasper\SXSMH.jasper";
String fileName = "Jasper导出PDF文件";
/*
创建传递到 Jasper 模板文件中的数据参数。
注意:参数的 key 必须和 Jasper Studio 中创建的 Parameters 参数名称相同,否则匹配不上,无法填充数据。
*/
Map<String, Object> parameters = new HashMap<>();
// 表格数据集是 JRBeanCollectionDataSource 类型的,也就是 JavaBean 实体类类型
List<Map<String, String>> data = DemoJasperPDF.getData(100);
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(data);
parameters.put("tabListParam", dataSource); // 这里的 tableData 字段名称就是和模板文件中表格数据集的参数名称相同
// 执行导出操作
String fileType="pdf";
// String pdf = JasperReportsUtil.generateReport(templatePath, fileName, "pdf", parameters);
ClassPathResource resource = new ClassPathResource(templatePath); InputStream in = resource.getInputStream(); JasperReport jasperReport = (JasperReport) JRLoader.loadObject(in); // 2、将 parameters 数据参数填充到模板文件中 JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JREmptyDataSource()); // 3、按照指定的 fileType 文件类型导出报表文件 if (fileType == null || "".equals(fileType.trim())) { fileType = "pdf"; } if (Objects.equals("pdf", fileType)) { JasperExportManager.exportReportToPdfFile(jasperPrint, fileName + ".pdf"); } else if (Objects.equals("xls", fileType)) { // 导出 xls 表格 JRXlsExporter exporter = new JRXlsExporter(); exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); // 设置导出的输入源 exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(fileName + ".xls")); // 设置导出的输出源 // 配置信息 SimpleXlsReportConfiguration configuration = new SimpleXlsReportConfiguration(); configuration.setOnePagePerSheet(true); // 每一页一个sheet表格 exporter.setConfiguration(configuration); // 设置配置对象 exporter.exportReport(); // 执行导出 } else if (Objects.equals("xlsx", fileType)) { // 导出 xlsx 表格 JRXlsxExporter exporter = new JRXlsxExporter(); exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); // 设置导出的输入源 exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(fileName + ".xlsx")); // 设置导出的输出源 SimpleXlsxReportConfiguration configuration = new SimpleXlsxReportConfiguration(); configuration.setOnePagePerSheet(true); // 每一页一个sheet表格 exporter.setConfiguration(configuration); exporter.exportReport(); // 执行导出 } else if (Objects.equals("html", fileType)) { JasperExportManager.exportReportToHtmlFile(jasperPrint, fileName + ".html"); } }catch (Exception e){ e.printStackTrace(); }
}
private static List<Map<String, String>> getData(int num) {
List<Map<String, String>> ansMap = new ArrayList<>();
for (int i = 0; i < num; i++) {
Map<String, String> map = new HashMap<>();
// 这里的 key 必须和模板文件中的 Field 字段的名称相同
map.put("clientName", "name" + i);
map.put("printData", i % 2 == 0 ? "male" : "female");
map.put("printNo", (i + 20) + "");
ansMap.add(map);
}
return ansMap;
}
}