从服务

时间:2016-06-14 04:27:19

标签: java spring pdf

我是Jasper的新手,我想尝试使用我的应用程序中的jasper生成pdf文件。 这是场景:

我有一个我在iReport中构建的文件(reportEmployee.jrxml),在我的应用程序中,我有一个链接,如果我们点击该链接,我的应用程序将在pdf文件中创建报告并将其保存到我的本地存储。

我已经尝试过excel和word并且它有效,只有我感到困惑的pdf。

这是代码
1.在jsp文件上

<td><a href="<c:url value ="/savepdf"/>">Save to PDF</a></td>
<td><a href="<c:url value = "/save"/>">Save to Excel</a></td>
<td><a href="<c:url value = "/saveword"/>">Save to Word</a></td>

2。控制器

@RequestMapping("/savepdf")
public String dataEmployeePdf()
{
    employeeManager.dataEmployeePDFDownload();
    return "employ/editEmployeeList";
}

3。在EmployeeManagerImpl上(EmployeeManager的实现)

@Override
public void dataEmployeePDFDownload() {
    // TODO Auto-generated method stub
    try
    {

        File file = new File("report/reportEmployee.jrxml"); 
        String absolutePath = file.getAbsolutePath();
        InputStream input = new FileInputStream(new File(absolutePath));
        JasperReport jasperReport = JasperCompileManager.compileReport(input);
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null);
        JasperExportManager.exportReportToPdf(jasperPrint);
    }
    catch(JRException ex)
    {
        ex.getMessage();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
} 

我不需要通过我的应用程序从数据库发送数据,因为我已经使该文件(employeeReport.jrxml)自动从数据库中获取数据。 保存到word并保存到excel的情况相同,当我们点击该链接时,它会像这样将文件写入本地存储

enter image description here

谁能帮帮我?我希望我没有重新发布这个 谢谢

1 个答案:

答案 0 :(得分:1)

要下载文件,您必须将内容传递给response.getOutputStream()。您可以将其他信息设置为响应,例如用于设置fileName,enconding等的标题信息或设置文件contentType。

 @RequestMapping("/savepdf")
    public void dataEmployeePdf(HttpServletResponse response) {
        try {

            File file = new File("report/reportEmployee.jrxml");
            String absolutePath = file.getAbsolutePath();
            InputStream input = new FileInputStream(new File(absolutePath));
            JasperReport jasperReport = JasperCompileManager.compileReport(input);
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null);
            JasperExportManager.exportReportToPdfStream(jasperPrint,response.getOutputStream());
        } catch (JRException ex) {
            ex.getMessage();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }