在Java中使用JasperPrint导出多个pdf文件以获得多个列表

时间:2018-11-20 08:45:21

标签: java jasper-reports

我必须将多个列表数据导出到多个pdf文件。代码如下所示:

    public void prinReport(String reportType){
    String reportPath ="",fileName="";
    List<LoanDisplayModel> loanDisplayModelList=new ArrayList<>();
    Map<String, Object> params = new HashMap();
    if(reportType.equals("Sanchipta")){
            reportPath = FacesContext.getCurrentInstance().getExternalContext().getRealPath
            ("/reports/np/report1.jasper");
            loanDisplayModelList=loanSanchipitaModelList;
            fileName="reportOne.pdf";
            }
        else if(reportType.equals("Bistrit")){
            reportPath = FacesContext.getCurrentInstance().getExternalContext().getRealPath
            ("/reports/np/report2.jasper");
            loanDisplayModelList=loanBistritModelList;
            fileName="reportTwo.pdf";
        }
        else{
            reportPath = FacesContext.getCurrentInstance().getExternalContext().getRealPath
            ("/reports/np/report3.jasper");
            loanDisplayModelList=loanSahaBistritModelList;
            fileName="reportThree.pdf";
            }

    JasperPrint jasperPrint;
    try {
        jasperPrint = JasperFillManager.fillReport(reportPath, params,new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(
                loanDisplayModelList));
    HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
    httpServletResponse.setContentType("application/x-download");
    httpServletResponse.addHeader("Content-disposition", "inline; filename="+fileName+"");
    ServletOutputStream servletOutputStream = httpServletResponse.getOutputStream();
    JasperExportManager.exportReportToPdfStream(jasperPrint, servletOutputStream);
    FacesContext.getCurrentInstance().responseComplete();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

以上代码用于将列表导出为pdf文件。使用httpServletResponse.setContentType("application/x-download");下载pdf文件。 对于单个列表,代码可以完美运行。但是我有三个不同的列表,单击一次按钮就必须将列表导出到不同的pdf文件。 按钮单击代码如下:

<h:commandButton value="Export" actionListener="#{closingMB.setReports}" id="cmdExport" ajax="false"/>

actionListener调用setReports()函数,在该函数中设置了三个不同的列表,然后调用了printReport()函数,并将reportType作为参数。 文件名,reportPath和loanDisplayModelList是根据reportType设置的。现在我面临一个问题,即仅将最后一个列表导出到pdf文件并下载,并且不导出初始pdf文件,并且将FileName设置为reportOne.pdf,即第一个fileName。

  

注意:我需要三个具有不同文件名的不同pdf文件。

有人可以帮我解决这个问题。

0 个答案:

没有答案