Jasper Report and Spring



我有一个Spring项目。我还使用JasperReport为我的Spring项目构建报告模板,以便调用、使用和生成。

在看了几个教程之后,我终于设法让我的Spring项目调用并生成了我的报告模板。

但有一件事我不熟悉,那就是我用一个数据集查询配置了我的Jasper Reports,当我在JasperSoft中预览模板时,该查询会用数据填充模板。但当我通过Spring调用这个相同的report.jasper文件时,我得到的只是一个空报告(尽管有一些预期的格式(

我遇到的大多数例子都让他们的JasperReport在通过Spring从数据库传递所需数据时使用空数据源。但我的报告使用了多个数据集查询(因此使用了多个子表(,所以我不确定我该何去何从;我是否需要像那些例子一样通过Spring手动传递数据,或者我可以依靠JasperReport来做到这一点

我对Jasper和Spring还是比较陌生的。

基于这个链接创建的,这是我的测试函数示例:

@GetMapping(path = "/report")
void testFunction2(HttpServletResponse response) throws IOException, JRException {
String sourceFileName = new File("C:\\Users\\User\\JaspersoftWorkspace\\MyReports\\base3.jasper").getAbsolutePath();
JRBeanCollectionDataSource sampleDataSource = new JRBeanCollectionDataSource(null);
String testName = "testName.xlsx";
HashMap<String, Object> theHashMap = new HashMap<>();
JasperPrint jasperPrint = JasperFillManager.fillReport(sourceFileName, theHashMap);

JRXlsxExporter exporter = new JRXlsxExporter();
SimpleXlsxReportConfiguration reportConfigXLS = new SimpleXlsxReportConfiguration();
reportConfigXLS.setSheetNames(new String[] { "sheet1" });
exporter.setConfiguration(reportConfigXLS);
exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(response.getOutputStream()));
response.setHeader("Content-Disposition", "attachment;filename="+testName);
response.setContentType("application/octet-stream");
exporter.exportReport();
}

我想我解决了我的问题/困惑。

我需要的最重要的东西是连接到我的数据库。大多数教程的数据源都是从Spring项目本身连接的,进行存储库调用,并将调用中的数据发送到要生成的报告。

在我的例子中,我不是从Spring端调用DB,而是从Jasper端调用DB。

因此,或者,我的问题的解决方案是,我可以使用DriverManager.getConnection()发送连接详细信息,并将其作为第三个变量解析为fillReport,而不是数据源。

基本上,其他人都在做什么

JRBeanCollectionDataSource sampleDataSource = new JRBeanCollectionDataSource(repositoryService.getData());
JasperPrint report = JasperFillManager.fillReport(compiledReport, parameters, sampleDataSource);

但我想要的是这个

Connection con = DriverManager.getConnection("jdbc:postgresql://url:port/dbName","dbUsername","dbPassword");
JasperPrint jasperPrint = JasperFillManager.fillReport(compiledReport, parameters, con);

(但两种方法都是正确的(

一旦我完成了第二个方法,我的报告数据就会使用JasperSoft中所有预先配置的SQL查询成功生成。

我从这里得到了这个想法

最新更新