0

Liferayポートレットでjasperレポートを使用しており、そのユーザーが出力ストリームからレポートを直接ダウンロードするようにしたいと考えています。レポートのPDFファイルをサーバーに保存したくありません。

ジャスパーレポートでこれを行うにはどうすればよいですか?

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

今、私はこれを行って、あるディレクトリにpdfファイルを生成してから、ユーザーにダウンロードリンクを提供します。しかし、私はそのユーザーが直接出力ストリームからpdfをダウンロードすることを望んでいます。

4

2 に答える 2

1

ポートレット アクションで:

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 に答える