JSF / Seam:如何在没有用户干预的情况下下载和打印动态生成的PDF文件?
我有一个JSF / Seam Web应用程序,其中有一个页面,其中包含一个表单,当提交(按钮单击)时,会根据表单输入动态创建PDF文件(在Java,服务器端)。 目前我的工作是将生成的PDF作为文件下载返回到浏览器,因此用户可以选择保存或在Acrobat Reader中打开它以进行后续打印。
我想要发生的是PDF被发送到浏览器并打印(客户端)而无需进一步的用户干预(好吧,除了可能出现的Windows打印机选项对话框,我无能为力)。
该解决方案似乎基于在加载PDF的页面上隐藏iframe
,然后在iframe
上调用.contentWindow.print()
。 但是,我不知道如何通过HttpServletResponse
(在Java中)将PDF放入iframe,更不用说在加载pdf后如何在iframe上自动调用print()了。
但是,我不知道如何通过
HttpServletResponse
(在Java中)将PDF放入iframe
让指向一个servlet URL,它获取PDF的
InputStream
并将其写入响应的OutputStream
。 如有必要,您可以将JSF bean属性作为附加GET参数传递,以便您可以控制PDF生成。
有问题的servlet的doGet()
方法如下所示:
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.
一旦加载pdf,如何在iframe上自动调用print()更少。
在上挂钩一个函数。 但是,您需要考虑浏览器特定的行为。 在这个问题中可以找到更多提示: 如何在Safari / Chrome中从javascript打印IFrame
这不是您的问题的答案,但您可以使用“kiosk”模式(跳过打印对话框)通过chrome中的打印对话框查看:
如何在Google Chrome ver 38上禁用打印预览?
我希望对你有用:)
引述答案:
命令行参数–disable-print-preview适用于最新版本的Chrome,我刚刚自己测试过。