如何同时生成 xlsx 和 ods - Java

How to generate both xlxs and ods - Java

我正在使用 spring-boot 和 Java 11 构建一个应用程序,该应用程序要求以 ods 和 xlsx 格式导出报告。

我读到 jasper 报告可以支持这一点。但是没有文档实际说明这可能是可能的。

我还考虑过创建一个 TemplateClass 的实现,并使用 apache poi 实现一个 xlsx 导出器,并使用另一个库实现一个 ods 导出器。

你知道更好的方法吗?

这让我到目前为止,输出到 Servlet OutputStream,但文件经常损坏。 Ods 在最近的 Jasper 中内置了支持,例如我在 6.18.1 中尝试过这个。

if (format.equals("xlsx")) {
        JRXlsxExporter exporter = new JRXlsxExporter(); // initialize exporter
        exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); // set compiled r
        SimpleXlsxReportConfiguration reportConfigXLS = new SimpleXlsxReportConfiguration();
        Map<String, String> dateFormats = new HashMap<String, String>();
        dateFormats.put("EEEEE dd MMMMM yyyy", "ddd, mmm d, yyyy");
        reportConfigXLS.setFormatPatternsMap(dateFormats);
        reportConfigXLS.setIgnoreGraphics(true);
        reportConfigXLS.setOnePagePerSheet(true); // setup configuration
        reportConfigXLS.setDetectCellType(true);
        reportConfigXLS.setSheetNames(new String[]{"Active Patients"});
        exporter.setConfiguration(reportConfigXLS);
        exporter.setExporterOutput(new 
          SimpleOutputStreamExporterOutput(out));
        exporter.exportReport();
} else if (format.equals("ods")) {
        JROdsExporter exporter = new JROdsExporter(); // initialize exporter
        exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); // set compiled r
        SimpleOdsExporterConfiguration reportConfigXLS = new SimpleOdsExporterConfiguration();
        exporter.setConfiguration(reportConfigXLS);
        exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(out));
        exporter.exportReport();
}
byte[] binData = out.toByteArray();
OutputStream out1 = response.getOutputStream();
out1.write(binData);
out1.close();
response.setContentLength(binData.length);