Spring 使用 JasperReport 启动应用程序中的 FileNotFoundException
FileNotFoundException in a Spring Boot application with JasperReport
在我的 Spring 引导 webapp 中,我正在尝试实现一些后端功能以使用 JasperReports
.
生成 PDF 文件
我的文件结构如下所示:
应用程序在 运行ning 时,可以毫无问题地查看 application-*.properties
或 static
文件夹中的任何文件。
我写了一段代码来生成报告并显示在 JasperViewer
:
JasperPrint print = null;
try {
JasperCompileManager.compileReportToFile("invoices/invoice.jrxml");
print = JasperFillManager.fillReport("invoices/invoice.jasper", new HashMap<>());
JasperViewer jasperViewer = new JasperViewer(print);
jasperViewer.setVisible(true);
} catch (JRException e) {
e.printStackTrace();
}
但是当我尝试 运行 应用程序时,我得到的是:
net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: invoices/invoice.jrxml (No such file or directory)
您正在使用 java.io
文件 api 操作从类路径加载资源。当应用程序在 IDE 的开发过程中解压缩时它可以工作,但当应用程序被打包到 JAR 时会失败,因此 FileNotFoundException
更改您的代码以使用 InputStream
从类路径加载资源,例如通过使用 JasperCompileManager.compileReport()
:.
try (InputStream in = getClass().getResourceAsStream("/invoices/invoice.jrxml")) {
JasperCompileManager.compileReport(in);
...
}
在我的 Spring 引导 webapp 中,我正在尝试实现一些后端功能以使用 JasperReports
.
我的文件结构如下所示:
应用程序在 运行ning 时,可以毫无问题地查看 application-*.properties
或 static
文件夹中的任何文件。
我写了一段代码来生成报告并显示在 JasperViewer
:
JasperPrint print = null;
try {
JasperCompileManager.compileReportToFile("invoices/invoice.jrxml");
print = JasperFillManager.fillReport("invoices/invoice.jasper", new HashMap<>());
JasperViewer jasperViewer = new JasperViewer(print);
jasperViewer.setVisible(true);
} catch (JRException e) {
e.printStackTrace();
}
但是当我尝试 运行 应用程序时,我得到的是:
net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: invoices/invoice.jrxml (No such file or directory)
您正在使用 java.io
文件 api 操作从类路径加载资源。当应用程序在 IDE 的开发过程中解压缩时它可以工作,但当应用程序被打包到 JAR 时会失败,因此 FileNotFoundException
更改您的代码以使用 InputStream
从类路径加载资源,例如通过使用 JasperCompileManager.compileReport()
:.
try (InputStream in = getClass().getResourceAsStream("/invoices/invoice.jrxml")) {
JasperCompileManager.compileReport(in);
...
}