Linux 上的 JasperReports 文件损坏 Excel
Getting corrupted Excel file with JasperReports on Linux
我使用此代码将报告导出为 Excel 文件 JasperReports 4.6:
File reportFile = new File(externalContextAuthenticationConfiguration.getReportTempFolderUrl());
File outputFile = File.createTempFile("reportOutput", ".XLS", reportFile);
JRXlsExporter exporterXLS = new JRXlsExporter();
exporterXLS.setParameter(JRXlsExporterParameter.JASPER_PRINT, print);
exporterXLS.setParameter(JRXlsExporterParameter.OUTPUT_FILE, outputFile);
exporterXLS.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);
exporterXLS.setParameter(JRXlsExporterParameter.IS_COLLAPSE_ROW_SPAN, Boolean.TRUE);
exporterXLS.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.TRUE);
exporterXLS.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
exporterXLS.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_COLUMNS, Boolean.TRUE);
exporterXLS.setParameter(JRXlsExporterParameter.CHARACTER_ENCODING, "UTF-8");
exporterXLS.exportReport();
return outputFile.getAbsolutePath();
此代码在 Windows 中运行良好,但是当项目转到 OpenSuse Linux 时,创建的 Excel 文件如下图所示:
有人知道问题出在哪里吗?
终于找到问题所在了:
问题不在 JasperReport 中。
它在 Excel 扩展中正确创建了报告,但是当应用服务器将其发送到客户端时,问题发生了
我们使用此代码将报告发送给客户:
response.setHeader("Content-Transfer-Encoding", "Cp1256");
response.setContentType("application/vnd.ms-excel-download");
但 application/vnd.ms-excel-下载仅适用于 Windows Excel,它会破坏 Excel 中的文件报告 Linux.
现在,我使用这段代码来压缩它,然后将它发送到客户端,这样它就可以在 Windows 和 Linux 服务器上运行:
File zipFile = new File(fileName.replace("XLS", "ZIP"));
FileOutputStream fileOutputStream = new FileOutputStream(zipFile);
ZipOutputStream zipOutputStream = new ZipOutputStream(fileOutputStream);
addFileToZip("", fileName, zipOutputStream, false);
zipOutputStream.flush();
zipOutputStream.close();
我使用此代码将报告导出为 Excel 文件 JasperReports 4.6:
File reportFile = new File(externalContextAuthenticationConfiguration.getReportTempFolderUrl());
File outputFile = File.createTempFile("reportOutput", ".XLS", reportFile);
JRXlsExporter exporterXLS = new JRXlsExporter();
exporterXLS.setParameter(JRXlsExporterParameter.JASPER_PRINT, print);
exporterXLS.setParameter(JRXlsExporterParameter.OUTPUT_FILE, outputFile);
exporterXLS.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);
exporterXLS.setParameter(JRXlsExporterParameter.IS_COLLAPSE_ROW_SPAN, Boolean.TRUE);
exporterXLS.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.TRUE);
exporterXLS.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
exporterXLS.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_COLUMNS, Boolean.TRUE);
exporterXLS.setParameter(JRXlsExporterParameter.CHARACTER_ENCODING, "UTF-8");
exporterXLS.exportReport();
return outputFile.getAbsolutePath();
此代码在 Windows 中运行良好,但是当项目转到 OpenSuse Linux 时,创建的 Excel 文件如下图所示:
有人知道问题出在哪里吗?
终于找到问题所在了: 问题不在 JasperReport 中。 它在 Excel 扩展中正确创建了报告,但是当应用服务器将其发送到客户端时,问题发生了
我们使用此代码将报告发送给客户:
response.setHeader("Content-Transfer-Encoding", "Cp1256");
response.setContentType("application/vnd.ms-excel-download");
但 application/vnd.ms-excel-下载仅适用于 Windows Excel,它会破坏 Excel 中的文件报告 Linux.
现在,我使用这段代码来压缩它,然后将它发送到客户端,这样它就可以在 Windows 和 Linux 服务器上运行:
File zipFile = new File(fileName.replace("XLS", "ZIP"));
FileOutputStream fileOutputStream = new FileOutputStream(zipFile);
ZipOutputStream zipOutputStream = new ZipOutputStream(fileOutputStream);
addFileToZip("", fileName, zipOutputStream, false);
zipOutputStream.flush();
zipOutputStream.close();