2016-07-18 2 views
-1

현재 JasperReports에서 작업 중입니다. PDF 형식으로 보고서를 생성하는 한 가지 방법이 있습니다. 그것은 잘 작동하지만 나는 엑셀 형식으로 동일한 보고서를 원한다.재 스퍼 보고서 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 열 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"; 
} 
관련 문제