【问题标题】:JasperReports unable to export PDF files [duplicate]JasperReports 无法导出 PDF 文件 [重复]
【发布时间】:2019-06-19 22:53:05
【问题描述】:

我正在尝试编写简单的代码来将 JasperPrint 导出为 pdf 文件。准确地说,就是将字节写入 HTTP 响应。

我的简单代码如下所示:

public static void writePdfReport(final JasperPrint jp,
                                  final HttpServletResponse response,
                                  final String reportName) throws IOException, JRException {
    response.setContentType("application/pdf");
    response.setHeader("Content-disposition",
            "inline; filename=" + (reportName == null ? jp.getName() : reportName).replace('"', '_') + ".pdf");

    final OutputStream outStream = response.getOutputStream();

    final byte[] pdfBytes = JasperExportManager.exportReportToPdf(jp);
    response.setContentLength(pdfBytes.length);

    final ByteArrayInputStream bais = new ByteArrayInputStream(pdfBytes);
    IOUtils.copy(bais, outStream);

    outStream.flush();
    IOUtils.closeQuietly(outStream);
}

我的 Maven pom 文件:

 <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports</artifactId>
            <version>6.8.1</version>
        </dependency>
        <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports-fonts</artifactId>
            <version>6.8.1</version>
        </dependency>
        <dependency>
            <groupId>ar.com.fdvs</groupId>
            <artifactId>DynamicJasper</artifactId>
            <version>5.1.2</version>
        </dependency>

问题是每当我调用writePdfReport 函数时,我都会得到这个异常:

java.lang.NoClassDefFoundError: com/lowagie/text/pdf/FontMapper

    at net.sf.jasperreports.engine.JasperExportManager.exportToPdf(JasperExportManager.java:214)
    at net.sf.jasperreports.engine.JasperExportManager.exportReportToPdf(JasperExportManager.java:544)
    at com.kendaxa.fexcom.core.reports.ReportWriter.writePdfReport(ReportWriter.java:31)
    at com.kendaxa.fexcom.core.reports.GenericTableReportSpec.Should generate simple table PDF report(GenericTableReportSpec.groovy:100)
Caused by: java.lang.ClassNotFoundException: com.lowagie.text.pdf.FontMapper
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 4 more

我做了我的研究,首先,问题似乎出在这里建议的 JasperReports 库中(4 岁):Dependency error in jasper-reports from itext

但是,即使使用最新版本,应用已接受的答案也无济于事。

我还尝试了一种不同的方法来导出受Export JasperReport to PDF OutputStream? 启发的文件,但没有任何运气。

有没有人有用于导出 pdf 文件的最新工作解决方案? 谢谢你的任何帮助。

【问题讨论】:

    标签: java spring maven jasper-reports


    【解决方案1】:

    com.lowagie.text.pdf.FontMapper 类确实存在于 com.lowagie.itext jar 的 2.1.7 版本中。

    您是否使用这个确切的版本作为依赖项?在我的工作示例中,这是我使用的版本。

    <dependency>
       <groupId>com.lowagie</groupId>
       <artifactId>itext</artifactId>
       <version>2.1.7</version>
    </dependency>
    

    如果您已经这样做了,我会确保您的运行时环境只有这个 2.1.7 版本的 itext jar。部署的 jar 库中是否可能包含另一个版本的 itext?

    我将一个工作示例推送到https://github.com/cameronhurd/simple-jasper-report

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多