我是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的情况相同,当我们点击该链接时,它会像这样将文件写入本地存储
谁能帮帮我?我希望我没有重新发布这个 谢谢答案 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();
}
}