通过Servlet或JSP将JasperReport的报告导出为pdf

时间:2014-01-09 11:38:22

标签: java jsp servlets jasper-reports

我使用以下代码将jasper报告导出到使用JSP的pdf文件。

response.setHeader("Content-Disposition", "inline; filename=\"application.pdf\"");
response.setContentType("application/pdf");

Connection con;

String host = "jdbc:mysql://localhost:3306/123";
String uname = "root";
String upass = "";
Class.forName("com.mysql.jdbc.Driver");      

con = DriverManager.getConnection(host, uname, upass);

String report="C:\\Users\\Acer\\Documents\\NetBeansProjects\\jasper\\1.jrxml";
JasperReport jr= JasperCompileManager.compileReport(report);
JasperPrint jasperPrint = JasperFillManager.fillReport(jr,  null, con);

JasperExportManager.exportReportToPdfFile(jasperPrint, "application.pdf");

当我在 NetBeans 中运行此JSP文件时,浏览器中会出现一个消息框,其中包含以下错误:

“文件不以'%PDF-'开头。 当地\ EWH _)!50gc#“

此消息来自Adobe Reader。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

使用exportReportToPdfFile()是完全错误的:您不想创建文件,而是导出到响应流。因此,请使用以下代码替换代码段的最后一行:

OutputStream outStream = response.getOutputStream();
JasperExportManager.exportReportToPdfStream(jasperPrint, outStream);

答案 1 :(得分:0)

似乎每件事都没问题,除了最后一部分,即导出部分。

将其替换为

//Exporting the report as a PDF
    System.out.println("Exporting pdf");
    JasperExportManager.exportReportToPdfStream(jasperPrint, response.getOutputStream());

    JasperExportManager.exportReportToPdfFile(jasperPrint, "report.pdf");