gpt4 book ai didi

jsf - 通过 JSF 将 PDF 发送到浏览器

转载 作者:行者123 更新时间:2023-12-02 13:31:54 25 4
gpt4 key购买 nike

我正在尝试将 JasperReports 生成的 PDF 文件发送到用户的浏览器,我找不到我的托管 bean 方法中的问题,这里是一个片段:

System.out.println("Making pdf...");

FacesContext fc = FacesContext.getCurrentInstance();
ExternalContext ec = fc.getExternalContext();
String tplPath = ec.getRealPath("testTemplate.jrxml");
JasperReport jasperReport = JasperCompileManager.compileReport(tplPath);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap<String,Object>(), ds );

String pdfName = "/testReport.pdf";
String pdfPath = ec.getRealPath(pdfName);
JasperExportManager.exportReportToPdfFile(jasperPrint, pdfPath);

System.out.println("PDF ready!");

ec.responseReset();
ec.setResponseContentType(ec.getMimeType(pdfPath));
//ec.setResponseContentLength(contentLength);
ec.setResponseHeader("Content-Disposition", "attachment; filename=\"" + pdfName + "\"");

InputStream input = new FileInputStream(pdfPath);
OutputStream output = ec.getResponseOutputStream();
IOUtils.copy(input, output);

System.out.println("Sending to browser...");

fc.responseComplete();

通过简单的用户点击即可调用它:

<p:menuitem value="TestPDF" action="#{menuController.getTestPdf()}" />

我觉得这很容易找到。为什么我看不到? :)

最佳答案

<p:menuitem>默认使用ajax。无法通过ajax下载文件。由于安全原因,JavaScript 无法以编程方式强制与变量中的任意内容进行“另存为”对话。

关闭ajax即可。

<p:menuitem ... ajax="false" />

另请参阅:

关于jsf - 通过 JSF 将 PDF 发送到浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13931999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com