Export JasperReports in HTML format

匿名 (未验证) 提交于 2019-12-03 01:47:02

问题:

The code below gets a byte[] result, which works for PDF and XLSX. For HTML, an exception is raised.

    JasperPrint jasperPrint = JasperFillManager.fillReport(report,             params, dataSource != null ? new JRMapArrayDataSource(                     dataSource) : new JREmptyDataSource());      ByteArrayOutputStream out = new ByteArrayOutputStream();     @SuppressWarnings("rawtypes")     Exporter exporter;     switch (format) {     case PDF:         exporter = new JRPdfExporter();         break;     case XLSX:         exporter = new JRXlsxExporter();         break;     case HTML:         exporter = new HtmlExporter();         break;     default:         throw new ReportException("Unknown export format");     }     exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(out));     exporter.setExporterInput(new SimpleExporterInput(jasperPrint));     exporter.exportReport();     return out.toByteArray(); 

The exception for HTML is at exporter.exportReport(); line which says

java.lang.ClassCastException:   net.sf.jasperreports.export.SimpleOutputStreamExporterOutput cannot be cast to net.sf.jasperreports.export.HtmlExporterOutput at net.sf.jasperreports.engine.export.HtmlExporter.exportReport(HtmlExporter.java:232) 

The error is the same for v6.0 and v5.6. This used to work in v5.0 (some of the classes were deprecated in v5.6).

How do you export a report in various formats, including HTML?

回答1:

For HTML and other formats:

import net.sf.jasperreports.engine.JRDataSource; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.export.HtmlExporter; import net.sf.jasperreports.engine.export.JRCsvExporter; import net.sf.jasperreports.engine.export.JRPdfExporter; import net.sf.jasperreports.engine.export.JRXmlExporter; import net.sf.jasperreports.export.Exporter; import net.sf.jasperreports.export.SimpleExporterInput; import net.sf.jasperreports.export.SimpleHtmlExporterOutput; import net.sf.jasperreports.export.SimpleOutputStreamExporterOutput;  public byte[] export(final JasperPrint print) throws JRException {     final Exporter exporter;     final ByteArrayOutputStream out = new ByteArrayOutputStream();     boolean html = false;      switch (getReportFormat()) {         case HTML:             exporter = new HtmlExporter();             exporter.setExporterOutput(new SimpleHtmlExporterOutput(out));             html = true;             break;          case CSV:             exporter = new JRCsvExporter();             break;          case XML:             exporter = new JRXmlExporter();             break;          case XLSX:             exporter = new JRXlsxExporter();             break;          case PDF:             exporter = new JRPdfExporter();             break;          default:             throw new JRException("Unknown report format: " + getReportFormat().toString());     }      if (!html) {         exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(out));     }      exporter.setExporterInput(new SimpleExporterInput(print));     exporter.exportReport();      return out.toByteArray(); } 

Call it using:

JasperPrint print = JasperFillManager.fillReport(report, parameters, dataSource); byte report[] = export(print); 


回答2:

Dynamic report implementation for all types of format

Maven depeendecies to be included is as below

     net.sourceforge.dynamicreportsdynamicreports-core4.1.0org.eclipse.birt.runtime.3_7_1com.lowagie.text2.1.7

XHTML Code :

Java Code :

 //set datasource for creating the report         report.setDataSource(dataSource);         JasperPrint jasperPrint = report.toJasperPrint();         HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();         ServletOutputStream servletOutputStream = response.getOutputStream();          if(downloadFormat.equalsIgnoreCase("PDF")){             response.setContentType("application/pdf");               response.addHeader("Content-disposition", "attachment; filename=report.pdf");             JasperExportManager.exportReportToPdfStream(jasperPrint, servletOutputStream);         } else if(downloadFormat.equalsIgnoreCase("XML")){             //response.setContentType("application/pdf");               response.addHeader("Content-disposition", "attachment; filename=report.xml");             JasperExportManager.exportReportToXmlStream(jasperPrint, servletOutputStream);         } else if(downloadFormat.equalsIgnoreCase("CSV")){             response.setContentType("text/plain");               response.addHeader("Content-disposition", "attachment; filename=report.csv");             JRCsvExporter exporter = new JRCsvExporter();               exporter.setParameter(JRCsvExporterParameter.JASPER_PRINT,                       jasperPrint);               exporter.setParameter(JRCsvExporterParameter.OUTPUT_STREAM,                       servletOutputStream);               exporter.setParameter(JRExporterParameter.IGNORE_PAGE_MARGINS,                       Boolean.TRUE);               exporter.exportReport();           } else if(downloadFormat.equalsIgnoreCase("XLS")){             response.setContentType("application/vnd.ms-excel");               response.addHeader("Content-disposition", "attachment; filename=report.xls");             JExcelApiExporter exporterXLS = new JExcelApiExporter();               exporterXLS.setParameter(                   JRXlsExporterParameter.JASPER_PRINT,                   jasperPrint);               exporterXLS.setParameter(                   JRXlsExporterParameter.IS_DETECT_CELL_TYPE,                   Boolean.TRUE);               exporterXLS.setParameter(                   JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,                   Boolean.FALSE);               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.IS_IGNORE_CELL_BORDER,               // Boolean.TRUE);               exporterXLS.setParameter(JRXlsExporterParameter.OUTPUT_STREAM,                       servletOutputStream);               exporterXLS.exportReport();           }         FacesContext.getCurrentInstance().responseComplete(); 


回答3:

Try this

JasperPrint jasperPrint = JasperFillManager.fillReport(report,             params, dataSource != null ? new JRMapArrayDataSource(                     dataSource) : new JREmptyDataSource());          ByteArrayOutputStream out = new ByteArrayOutputStream();          @SuppressWarnings("rawtypes")         Exporter exporter;         switch (format) {         case PDF:             exporter = new JRPdfExporter();             exporter.setExporterOutput(new SimpleWriterExporterOutput(out));             break;         case CSV:             exporter = new JRCsvExporter();             exporter.setExporterOutput(new SimpleWriterExporterOutput(out));             break;         case XLSX:             exporter = new JRXlsxExporter();             exporter.setExporterOutput(new SimpleWriterExporterOutput(out));             break;         case HTML:              exporter = new HtmlExporter();             exporter.setExporterOutput(new SimpleWriterExporterOutput(out));             break;         default:             throw new ReportException("Unknown export format");         }         exporter.setExporterInput(new SimpleExporterInput(jasperPrint));         exporter.exportReport(); 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!