2016-07-18 20 views
-1

私は現在JasperReportsで働いています。 PDF形式のレポートを生成する方法が1つあります。それは正常に動作しているが、私はExcel形式で同じレポートをしたい。ジャスパーレポートExcel形式の変換

public void generateFleetReportPdf(List<DailyTrakingReportBean> listOfDailyBean) throws JRException, IOException { 
    /* 
    Convert List to JRBeanCollectionDataSource 
    */ 
    JRBeanCollectionDataSource beanCollectionDataSource = new JRBeanCollectionDataSource(listOfDailyBean); 

    /* 
     Map to hold Jasper Report parameters 
    */ 

    Map<String,Object> parameters = new HashMap<String, Object>(); 
    parameters.put("ItemDataSource", beanCollectionDataSource); 

    String reportPath = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/reports/sadaqatReport.jasper"); 
    JasperPrint jasperPrint = JasperFillManager.fillReport(reportPath, parameters, beanCollectionDataSource); 
    HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse(); 
    httpServletResponse.addHeader("Content-disposition", "attachment; filename=report.pdf"); 
    ServletOutputStream outputStream = httpServletResponse.getOutputStream(); 
    JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream); 
    FacesContext.getCurrentInstance().responseComplete(); 
} 

答えて

1

は、以下のコードを試してください:

は、ここに私の方法です。 Jasperレポートを.xlsx形式にエクスポートする必要があります。あなたは.XLSを好む場合は、net.sf.jasperreports.engine.export.JRXlsExporter

public void generateFleetReportXlsx(List listOfDailyBean) throws JRException, IOException { 
    /* 
    Convert List to JRBeanCollectionDataSource 
    */ 
    JRBeanCollectionDataSource beanCollectionDataSource = new JRBeanCollectionDataSource(listOfDailyBean); 

    /* 
     Map to hold Jasper Report parameters 
    */ 

    Map<String,Object> parameters = new HashMap<String, Object>(); 
    parameters.put("ItemDataSource", beanCollectionDataSource); 

    String reportPath = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/reports/sadaqatReport.jasper"); 
    JasperPrint jasperPrint = JasperFillManager.fillReport(reportPath, parameters, beanCollectionDataSource); 
    HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse(); 
    httpServletResponse.addHeader("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
    httpServletResponse.addHeader("Content-disposition", "attachment; filename=report.xlsx"); 
    ServletOutputStream outputStream = httpServletResponse.getOutputStream(); 
    net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter exporter = new net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter(); 
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); 
    exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,outputStream); 
    exporter.exportReport(); 
    outputStream.flush(); 
    outputStream.close(); 
    FacesContext.getCurrentInstance().responseComplete(); 
} 
+0

私がしようとしているとnet.sf.jasperreports.engine.export.ooxml.JRXlsxExporterを交換してください。お待ち下さい。 –

+0

このページには、次のエラーが含まれています。 1列目のエラー:ドキュメントが空です 1列目のエラー:エンコーディングエラー 以下は最初のエラーまでのページのレンダリングです。 –

+1

ヘッダーに正しいContent-Typeを設定しましたか?また、返す前にoutputStreamをフラッシュして閉じてみてください。 'outputStream.flush(); outputStream.close();' –

0
try { 
     InputStream jasperStream = this.getClass().getResourceAsStream("yourReportName.jasper"); 
     Map<String, Object> params = new HashMap<>(); 
     JasperReport jasperReport = (JasperReport) JRLoader.loadObject(jasperStream); 

     JRXlsxExporter xlsxExporter = new JRXlsxExporter(); 
     ByteArrayOutputStream os = new ByteArrayOutputStream(); 
     xlsxExporter.exportReport(); 
     response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
     response.setHeader("Content-Disposition", "attachment; filename=anyName" + sdf.format(new Date()) + ".xlsx"); 
     response.getOutputStream().write(os.toByteArray()); 
     response.getOutputStream().flush(); 
     response.getOutputStream().close(); 
     response.flushBuffer(); 
    } 
    catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    finally { 

    } 
    return "success"; 
} 
関連する問題