Получение поврежденного файла Excel с помощью JasperReports в Linux

1

Я использовал эти коды для экспорта отчета в виде файла 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 похож на эту картинку:

Изображение 174551

Кто-нибудь знает, в чем проблема?

  • 0
    Вы проверяли полученный файл в MS Office ?
  • 0
    да, когда я открываю его в MS Office, он тоже поврежден
Теги:
export-to-excel
opensuse
jasper-reports

1 ответ

0
Лучший ответ

Наконец, я нашел проблему: проблема не в JasperReport. Он правильно создает отчет в Excel, но когда сервер приложений отправляет его клиенту, проблема возникает

Мы использовали этот код для отправки отчета клиенту:

    response.setHeader("Content-Transfer-Encoding", "Cp1256");
    response.setContentType("application/vnd.ms-excel-download");

но приложение /vnd.ms-excel-download предназначено только для Windows Excel, и оно уничтожает отчет файла Excel в Linux.

Теперь я использую этот код для его zip, а затем отправляю его клиенту, чтобы он работал как на 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();
  • 0
    Привет, я не уверен в этой логике. Вы загружаете файл как zip, а затем локально переименовываете его (вручную) в xlsx? Я получаю ту же проблему, и я заметил, что загруженные файлы xlsx не могут быть разархивированы нормально, когда вы меняете расширение на zip. ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню