You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot集成JasperReports生成Base64 PDF报错求助

问题解决方案

一、解决JasperReports 6.12.2的ClassNotFoundException(net.sf.jasperreports.compilers.ReportExpressionEvaluationData)

这个错误源于编译依赖缺失或版本与Java17/21不兼容:

  • 优先升级JasperReports到6.20.0及以上版本,该版本对Java17/21支持更完善,彻底规避旧版本的高Java版本兼容问题。
  • 若坚持使用6.12.2,需补充引入编译相关依赖,Maven配置示例:
<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports-compilers-java</artifactId>
    <version>6.12.2</version>
</dependency>

二、解决JasperReports 6.13.0的FileNotFoundException(找不到类路径下的pdf.jasper)

针对资源找不到问题,从以下维度排查:

  1. 修正资源加载方式
    避免用File类直接加载(jar包内文件无法通过File访问),改用类路径流加载:

    // 加载JRXML直接编译
    InputStream jrxmlStream = getClass().getResourceAsStream("/pdf.jrxml");
    JasperReport jasperReport = JasperCompileManager.compileReport(jrxmlStream);
    
    // 若已预编译为jasper文件
    InputStream jasperStream = getClass().getResourceAsStream("/pdf.jasper");
    JasperReport jasperReport = (JasperReport) JRLoader.loadObject(jasperStream);
    

    注意路径前缀/代表类路径根目录,若文件在子目录(如src/main/resources/reports/),路径需写成/reports/pdf.jasper。

  2. 确保JRXML已编译为Jasper文件
    若依赖预编译的jasper文件,可通过Maven插件自动编译:

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jasperreports-maven-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
            <execution>
                <goals>
                    <goal>compile-reports</goal>
                </goals>
            </execution>
        </executions>
        <dependencies>
            <dependency>
                <groupId>net.sf.jasperreports</groupId>
                <artifactId>jasperreports</artifactId>
                <version>6.13.0</version>
            </dependency>
        </dependencies>
    </plugin>
    

    插件会自动编译src/main/resources下的JRXML文件,打包时将jasper文件放入类路径。

  3. 检查资源打包情况
    打包成jar后,执行jar tf your-app.jar查看pdf.jasper或pdf.jrxml是否在BOOT-INF/classes/目录下;若不在,确认src/main/resources被Maven/Gradle标记为资源目录,未被排除打包。

三、通用开发建议

  • 版本适配:Spring Boot3+搭配Java17/21时,优先选择JasperReports 6.20.0+版本,避免版本兼容坑。
  • 数据库驱动:PostgreSQL驱动使用org.postgresql:postgresql:42.6.0及以上版本,确保与Java17兼容。
  • 调试技巧:资源找不到时,打印类路径根目录确认资源位置:
    URL rootPath = getClass().getResource("/");
    System.out.println("类路径根目录:" + rootPath.getPath());
    

内容的提问来源于stack exchange,提问作者Rookie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 06:50:02