4242import net .sf .jasperreports .engine .JasperReport ;
4343import net .sf .jasperreports .engine .data .JRMapArrayDataSource ;
4444import net .sf .jasperreports .engine .export .HtmlExporter ;
45- import net .sf .jasperreports .engine .export .JRXlsExporter ;
4645import net .sf .jasperreports .engine .export .ooxml .JRDocxExporter ;
46+ import net .sf .jasperreports .engine .export .ooxml .JRXlsxExporter ;
4747import net .sf .jasperreports .engine .util .JRLoader ;
4848import net .sf .jasperreports .export .SimpleExporterInput ;
4949import net .sf .jasperreports .export .SimpleHtmlExporterOutput ;
5050import net .sf .jasperreports .export .SimpleHtmlReportConfiguration ;
5151import net .sf .jasperreports .export .SimpleOutputStreamExporterOutput ;
52- import net .sf .jasperreports .export .SimpleXlsReportConfiguration ;
52+ import net .sf .jasperreports .export .SimpleXlsxReportConfiguration ;
5353import org .apache .logging .log4j .LogManager ;
5454import org .apache .logging .log4j .Logger ;
5555
@@ -135,7 +135,7 @@ public void showReport(String reportName, Map<String, Object> parameters,
135135 Class classRef ) throws JRException , IOException , NamingException , Exception {
136136
137137 Map [] dataRows = convertTo (data );
138- if (reportName == null ){
138+ if (reportName == null ) {
139139 throw new Exception ("El nombre del reporte es nulo o no existe" );
140140 }
141141 if (!reportName .endsWith (".jasper" )) {
@@ -187,8 +187,7 @@ public void print(String reportName, Map<String, Object> parameters,
187187 servletOutputStream .flush ();
188188 servletOutputStream .close ();
189189 FacesContext .getCurrentInstance ().responseComplete ();
190- }
191- if ("doc" .equals (parameters .get ("device" ))) {
190+ } else if ("doc" .equals (parameters .get ("device" ))) {
192191 JRDocxExporter exporter = new JRDocxExporter ();
193192 exporter .setExporterInput (new SimpleExporterInput (jasperPrint ));
194193 HttpServletResponse httpServletResponse = (HttpServletResponse ) facesCtx .getExternalContext ().getResponse ();
@@ -200,8 +199,7 @@ public void print(String reportName, Map<String, Object> parameters,
200199 outputStream .flush ();
201200 outputStream .close ();
202201 FacesContext .getCurrentInstance ().responseComplete ();
203- }
204- if ("pdf" .equals (parameters .get ("device" ))) {
202+ } else if ("pdf" .equals (parameters .get ("device" ))) {
205203 String target ;
206204 if (parameters .containsKey ("target" )) {
207205 target = parameters .get ("target" ).toString ();
@@ -213,25 +211,35 @@ public void print(String reportName, Map<String, Object> parameters,
213211 ServletOutputStream servletOutputStream = httpServletResponse .getOutputStream ();
214212 JasperExportManager .exportReportToPdfStream (jasperPrint , servletOutputStream );
215213 FacesContext .getCurrentInstance ().responseComplete ();
216- }
217- if ( "xls" . equals ( parameters . get ( "device" ))) {
218- JRXlsExporter exporter = new JRXlsExporter ();
214+ } else if ( "xlsx" . equals ( parameters . get ( "device" ))) { // Condición actualizada
215+ // Usamos el exportador moderno para .xlsx
216+ JRXlsxExporter exporter = new JRXlsxExporter ();
219217 exporter .setExporterInput (new SimpleExporterInput (jasperPrint ));
218+
220219 HttpServletResponse httpServletResponse = (HttpServletResponse ) facesCtx .getExternalContext ().getResponse ();
221- httpServletResponse .setContentType ("application/nd.openxmlformats-officedocument.spreadsheetml.sheet" );
222- httpServletResponse .setHeader ("Content-Disposition" , "attachment;filename= " + reporte .replaceAll (".jasper" , "" ) + ".xls" );
220+ // ContentType correcto para .xlsx
221+ httpServletResponse .setContentType ("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" );
222+ // Extensión de archivo actualizada a .xlsx
223+ httpServletResponse .setHeader ("Content-Disposition" , "attachment;filename=" + reporte .replaceAll (".jasper" , "" ) + ".xlsx" );
224+
223225 OutputStream outputStream = httpServletResponse .getOutputStream ();
224226 exporter .setExporterOutput (new SimpleOutputStreamExporterOutput (outputStream ));
225- SimpleXlsReportConfiguration configuration = new SimpleXlsReportConfiguration ();
227+
228+ // Usamos la configuración específica para XLSX
229+ SimpleXlsxReportConfiguration configuration = new SimpleXlsxReportConfiguration ();
226230 configuration .setOnePagePerSheet (false );
227231 configuration .setDetectCellType (true );
228232 configuration .setCollapseRowSpan (false );
233+ configuration .setWhitePageBackground (false );
234+ configuration .setRemoveEmptySpaceBetweenRows (true );
235+
229236 exporter .setConfiguration (configuration );
230237 exporter .exportReport ();
238+
231239 outputStream .flush ();
232240 outputStream .close ();
233241 FacesContext .getCurrentInstance ().responseComplete ();
234- }
242+ }
235243 } else {
236244 JasperPrintManager .printReport (jasperPrint , false );
237245 }
@@ -366,7 +374,7 @@ public JasperReport getJasperReportFrom(String reportNameJasper, Class classRef)
366374 jasperReport = (JasperReport ) JRLoader .loadObject (IOUtil .getResourceAsStream (classRef , "/reports/" + reportNameJasper ));
367375 } catch (NullPointerException e ) {
368376 ErrorManager .showError (e , LOGGER );
369- throw new JRException ("Es posible que no exista el reporte " + Fn .nvl (reportNameJasper ,"" ).toUpperCase ());
377+ throw new JRException ("Es posible que no exista el reporte " + Fn .nvl (reportNameJasper , "" ).toUpperCase ());
370378 }
371379 }
372380 return jasperReport ;
@@ -384,10 +392,10 @@ public DefaultStreamedContent getReportStreamedContent(String reportName, Map<St
384392 JasperPrint jasperPrint = JasperFillManager .fillReport (jasper , parameters , new JRMapArrayDataSource (dataRows ));
385393 docPdf = JasperExportManager .exportReportToPdf (jasperPrint );
386394 return DefaultStreamedContent .builder ()
387- .stream (() -> new ByteArrayInputStream (docPdf ))
388- .contentType ("application/pdf" )
389- .name (reportName .replaceAll (".jasper" , "" ) + ".pdf" )
390- .build ();
395+ .stream (() -> new ByteArrayInputStream (docPdf ))
396+ .contentType ("application/pdf" )
397+ .name (reportName .replaceAll (".jasper" , "" ) + ".pdf" )
398+ .build ();
391399 }
392400}
393401
0 commit comments