0

我在我的 liferay portlet 中使用 jasper 报告,我希望该用户直接从输出流中下载报告。我不想将报告 pdf 文件存储在我的服务器上。

我怎样才能用碧玉报告做到这一点?

File pdf = File.createTempFile("output.", ".pdf");
JasperExportManager.exportReportToPdfStream(jasperPrint, new FileOutputStream(pdf));

现在我正在这样做,它在某个目录中生成 pdf 文件,然后我向用户提供下载链接。但我希望该用户只需从直接输出流中下载 pdf。

4

2 回答 2

1

在您的 portlet 操作中:

public void serveResource(ResourceRequest request,ResourceResponse response) throws PortletException, IOException {

    response.setContentType("application/application-download");
    response.setProperty("Content-disposition", "attachement; filename=<some file.pdf>");

    OutputStream responseStream = response.getPortletOutputStream();

    jasperPrint=...
    JasperExportManager.exportReportToPdfStream(jasperPrint, responseStream);

    responseStream.flush();
    responseStream.close();

}

然后像这样创建资源下载 url:

<a href="<portlet:resourceURL/>">Download Report</a>
于 2012-12-23T16:33:34.020 回答
0

如果我正确理解了这个问题,您可以尝试

  ByteArrayOutputStream bous = new ByteArrayOutputStream();
  JasperExportManager.exportReportToPdfStream(jasperPrint, bous);
  byte[] bytes = bous.toByteArray();
于 2012-12-21T07:39:10.750 回答