2015-01-05 8 views
5

नीचे दिया गया कोड byte[] परिणाम प्राप्त करता है, जो पीडीएफ और एक्सएलएसएक्स के लिए काम करता है। एचटीएमएल के लिए, एक अपवाद उठाया जाता है।एचटीएमएल प्रारूप में निर्यात जैस्पर रीपॉर्ट्स

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(); 

HTML के लिए अपवाद exporter.exportReport(); लाइन जो कहते हैं

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) 

त्रुटि v6.0 और v5.6 के लिए एक ही है पर है। यह v5.0 में काम करता था (कुछ कक्षाओं को v5.6 में बहिष्कृत किया गया था)।

आप HTML सहित विभिन्न प्रारूपों में एक रिपोर्ट कैसे निर्यात करते हैं?

उत्तर

11

एचटीएमएल और अन्य प्रारूपों के लिए:

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(); 
} 

का उपयोग कर इसे कॉल:

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

प्रारूप के सभी प्रकार के लिए इस

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(); 
+0

आप अपने खुद के जवाब में फिर से पोस्ट किया था?! –

0

गतिशील रिपोर्ट कार्यान्वयन का प्रयास करें

Maven depeendecies शामिल होने के लिए नीचे दिए गए

<!-- dynamic/jasper reports --> 
    <dependency> 
     <groupId>net.sourceforge.dynamicreports</groupId> 
     <artifactId>dynamicreports-core</artifactId> 
     <version>4.1.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.eclipse.birt.runtime.3_7_1</groupId> 
     <artifactId>com.lowagie.text</artifactId> 
     <version>2.1.7</version> 
    </dependency> 

एक्सएचटीएमएल कोड है:

<h:commandLink id="csv" onclick="PF('data').hide();" 
    action="#{dashboardInfoBean.downloadCsv}"> 
    <h:graphicImage name="images/img_trans.gif" 
     styleClass="ico csvImg" /> 
</h:commandLink> 
<h:commandLink id="pdf" onclick="PF('data').hide();" 
    action="#{dashboardInfoBean.downloadPdf}"> 
    <h:graphicImage name="images/img_trans.gif" 
     styleClass="ico pdfImg" /> 
</h:commandLink> 
<h:commandLink id="excel" onclick="PF('data').hide();" 
    action="#{dashboardInfoBean.downloadExcel}"> 
    <h:graphicImage name="images/img_trans.gif" 
     styleClass="ico xlsImg" /> 
</h:commandLink> 
<h:commandLink id="xml" onclick="PF('data').hide();" 
    action="#{dashboardInfoBean.downloadXml}"> 
    <h:graphicImage name="images/img_trans.gif" 
     styleClass="ico xmlImg" /> 
</h:commandLink> 
<h:commandLink id="jasper" onclick="PF('data').hide();" 
    action="#{dashboardInfoBean.downloadJasperReport}"> 
    <h:graphicImage name="images/img_trans.gif" 
     styleClass="ico xmlImg" /> 
</h:commandLink>   

जावा कोड:

//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(); 
संबंधित मुद्दे