demojasper

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;

    }

    }

相关推荐
皙然14 分钟前
深入拆解MESI协议:从原理到实战,搞懂CPU缓存一致性的核心机制
java·缓存
郝学胜-神的一滴14 分钟前
【技术实战】500G单行大文件读取难题破解!生成器+自定义函数最优方案解析
开发语言·python·程序人生·面试
愤豆18 分钟前
02-Java语言核心-语法特性-注解体系详解
java·开发语言·python
是翔仔呐34 分钟前
第13章 SPI通信协议全解:底层时序、4种工作模式与W25Qxx Flash芯片读写实战
c语言·开发语言·stm32·单片机·嵌入式硬件·学习·gitee
2401_8785302141 分钟前
自定义内存布局控制
开发语言·c++·算法
x-cmd41 分钟前
[x-cmd] 终端里的飞书:lark-cli,让 AI Agent 拥有“实体办公”能力
java·人工智能·ai·飞书·agent·x-cmd
wjs20241 小时前
SQLite 子查询
开发语言
AndrewMe82111 小时前
detailed-docx:一个能保住格式的 Word 文档操作库
开发语言·python·word
IT方大同1 小时前
RT_thread(RTOS实时操作系统)线程的创建与切换
c语言·开发语言·嵌入式硬件
吾日三省Java1 小时前
SpringBoot锁设计:让你的系统不再“抢”出问题!
java·spring boot·设计思路