Java JasperReport:如何下载生成的报告?
我正在开发一个web应用程序,用户可以在上面生成一些数据的报告。我在用JasperReport做。这是我第一次体验JasperReport。所以我一直在关注这个 这里描述的方法可以在服务器上保存报告,但我需要在生成报告后可以下载该报告 非常感谢您的帮助,谢谢。或者:Java JasperReport:如何下载生成的报告?,java,jsp,jasper-reports,Java,Jsp,Jasper Reports,我正在开发一个web应用程序,用户可以在上面生成一些数据的报告。我在用JasperReport做。这是我第一次体验JasperReport。所以我一直在关注这个 这里描述的方法可以在服务器上保存报告,但我需要在生成报告后可以下载该报告 非常感谢您的帮助,谢谢。或者: 将文件保存到客户端可直接访问的位置,或 从文件(或其他字节流)流回字节 要执行#1,您必须将其保存在web应用程序中,这在部署战争时是不可能的,如果部署爆发的战争,则需要将其保存在web应用程序中。符号链接和容器游戏可以解决这个问题
大多数框架在不编写纯servlet的情况下提供类似的功能。在尝试下载生成的文件时,需要在servlet代码中设置这些功能。可能需要根据具体情况的文件格式更改某些参数
response.setContentType("APPLICATION/OCTET-STREAM");
String disHeader = "Attachment;Filename=\"ReportFile.csv" + "\"";
response.setHeader("Content-Disposition", disHeader);
在尝试下载生成的文件时,需要在servlet代码中设置这些。可能需要根据具体情况的文件格式更改某些参数
response.setContentType("APPLICATION/OCTET-STREAM");
String disHeader = "Attachment;Filename=\"ReportFile.csv" + "\"";
response.setHeader("Content-Disposition", disHeader);
您的代码应该如下所示:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
String path = getServletContext().getRealPath("/reports/report1.jrxml");
jasReport = JasperCompileManager.compileReport(path);
System.out.println("Jasper Report : " + jasReport);
Connection con = MyConnFactory.getConnection();
System.out.println(con);
jasPrint = JasperFillManager.fillReport(jasReport,null,con);//, mapParam, con);
System.out.println("Jasper Print : " + jasPrint);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// JasperExportManager.exportReportToPdfFile(jasPrint, "f:/nn.pdf");
// JasperExportManager.exportReportToPdfStream(jasPrint, baos);
// ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
// inputStream = bais;
ServletOutputStream sos=resp.getOutputStream();
JasperExportManager.exportReportToPdfStream(jasPrint, sos);
try {
MyConnFactory.getConnection().close();
sos.close();
} catch (SQLException ex) {
Logger.getLogger(MyReport.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (JRException ex) {
Logger.getLogger(MyReport.class.getName()).log(Level.SEVERE, null, ex);
}
}
您的代码应该如下所示:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
String path = getServletContext().getRealPath("/reports/report1.jrxml");
jasReport = JasperCompileManager.compileReport(path);
System.out.println("Jasper Report : " + jasReport);
Connection con = MyConnFactory.getConnection();
System.out.println(con);
jasPrint = JasperFillManager.fillReport(jasReport,null,con);//, mapParam, con);
System.out.println("Jasper Print : " + jasPrint);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// JasperExportManager.exportReportToPdfFile(jasPrint, "f:/nn.pdf");
// JasperExportManager.exportReportToPdfStream(jasPrint, baos);
// ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
// inputStream = bais;
ServletOutputStream sos=resp.getOutputStream();
JasperExportManager.exportReportToPdfStream(jasPrint, sos);
try {
MyConnFactory.getConnection().close();
sos.close();
} catch (SQLException ex) {
Logger.getLogger(MyReport.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (JRException ex) {
Logger.getLogger(MyReport.class.getName()).log(Level.SEVERE, null, ex);
}
}
看看JasperReports服务器。您可以使用它,因为它能够保存和下载报告。或者,您可以了解需要在自己的应用程序中实现什么。您可以使用它,因为它能够保存和下载报告。或者,您也可以了解需要在自己的应用程序中实现什么。