java - JSF/接缝 : How to download and print a dynamically generated PDF file without user intervention?

标签 java jsf jboss seam

我有一个 JSF/Seam 网络应用程序,它有一个带有表单的页面,当提交(单击按钮)时,会导致基于表单输入动态创建 PDF 文件(在 Java 中,服务器端)。目前我的工作是将生成的 PDF 作为文件下载返回到浏览器,因此用户可以选择保存它或在 Acrobat Reader 中打开它以进行后续打印。

我希望发生的是 PDF 被发送到浏览器并打印(客户端)而无需进一步的用户干预(好吧,除了可能出现的 Windows 打印机选项对话框,对此我无能为力)。

解决方案似乎是基于在加载 PDF 的页面上隐藏一个 iframe,然后在 上调用 .contentWindow.print() >iframe。但是,我不知道如何通过 HttpServletResponse(在 Java 中)将 PDF 放入 iframe,更不知道如何在加载 pdf 后自动调用 iframe 上的 print()。

最佳答案

However, I have no idea how to get the PDF into the iframe via the HttpServletResponse (in Java)

<iframe src>指向 servlet获得 InputStream 的 URL PDF 并将其写入 OutputStream的回应。如有必要,您可以将 JSF bean 属性作为附加 GET 参数传递,以便您可以控制 PDF 生成。

<iframe src="pdfServlet?foo=#{bean.foo}&amp;bar=#{bean.bar}"></iframe>

doGet()有问题的 servlet 的方法可能如下所示:

String foo = request.getParameter("foo");
String bar = request.getParameter("bar");

response.setContentType("application/pdf");

InputStream input = generatePdfSomehowBasedOn(foo, bar);
OutputStream output = response.getOutputStream();
// Now just write input to output.

much less how to automatically call print() on the iframe once the pdf has been loaded.

<iframe onload> 上 Hook 一个函数.但是,您需要考虑浏览器的特定行为。可以在这个问题中找到更多提示:How do I print an IFrame from javascript in Safari/Chrome

关于java - JSF/接缝 : How to download and print a dynamically generated PDF file without user intervention?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7430351/

相关文章:

java - Spring JDBC 依赖问题

java - Jenkins 如何发现构建后插件的 config.jelly?

jsf - Spring/JSF 项目中的 OmniFaces 不检索枚举属性

jboss - org.apache.cxf.BusException : No DestinationFactory was found for the namespace http://schemas. xmlsoap.org/soap/http/

java - 实体监听器调用顺序

Java 8 方法引用非静态方法

java - 在 Java 中恢复 SSL X509TrustManager

jsf - 转换器="entityConverter"与转换器="#{entityConverter}"的区别

java - JSF 中的递归(c :forEach vs. ui:repeat)

jboss - 如何以编程方式创建带有 hornet q 的主题?