не может успешно экспортировать Excel в WebLogic 11 + Linux - PullRequest
1 голос
/ 26 ноября 2011
<%
         response.reset();
         response.setHeader("Content-Disposition", "attachment;filename=\"" + "test.xls\"");
         response.setHeader("Content-Transfer-Encoding", "binary");
         response.setContentType("application/vnd.ms-excel");

        InputStream is = new FileInputStream(realPath);
        //OutputStream outStream = response.getOutputStream();

        JasperPrint jasperPrint = JasperFillManager.fillReport(is,
                parameters, new JRBeanCollectionDataSource(pdfList));

        JRAbstractExporter exporter = new JExcelApiExporter();
         exporter.setParameter(JExcelApiExporterParameter.JASPER_PRINT, jasperPrint); 
         exporter.setParameter(JExcelApiExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE); 
         exporter.setParameter(JExcelApiExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);
         exporter.setParameter(JExcelApiExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
         exporter.setParameter(JExcelApiExporterParameter.OUTPUT_STREAM, out);
         exporter.exportReport();

         outStream.flush();
         outStream.close();

         out.clear();
         out =pageContext.pushBody();
    %>

мы используем приведенный выше код для генерации Excel, и он хорошо работает в tomcat + windows, но после загрузки на сервер linux + weblogic Excel поврежден.Я использую текстовый редактор, чтобы открыть Excel, я обнаружил, что добавить несколько пустых строк в Excel, в результате чего Excel не может быть успешно открыт, кто-нибудь может указать мне правильное направление?Почему есть место?Как это получается?

Заранее спасибо!

1 Ответ

0 голосов
/ 27 ноября 2011

Я подозреваю, что ваше использование pageContext.pushBody () может быть виновником.Насколько я знаю, pushBody предназначен для обновления вывода в области тега JSP.

Когда вы генерируете двоичный контент, такой как файл Excel, где вы должны быть абсолютно уверены, что предполагаемыйбайты, и только предполагаемые байты достигают браузера, вам нужно записать эти байты, очистить вывод и затем убедиться, что больше ничего не записано.Вызывая pushBody (), вы делаете это так, чтобы в выводе можно было записывать больше контента и выводить любые пустые строки (и переводы каретки / переводы строк между ними) на странице JSP.

В общем, я предлагаю, чтобы вы просто не делали этого в JSP - вместо этого делайте это в сервлете.

...