我有一个JSF / Seam网络应用程序,其中有一个页面,其中包含一个表单,当提交(单击按钮)时,会根据表单输入动态创建PDF文件(在Java,服务器端)。目前我的工作是将生成的PDF作为文件下载返回到浏览器,因此用户可以选择保存或在Acrobat Reader中打开它以进行后续打印。
我想要发生的是PDF被发送到浏览器并打印(客户端)而无需进一步的用户干预(好吧,除了可能出现的Windows打印机选项对话框,我无能为力)。
解决方案似乎是基于在加载PDF的页面上隐藏iframe
,然后在.contentWindow.print()
上调用iframe
。但是,我不知道如何通过HttpServletResponse
(在Java中)将PDF放入iframe,更不用说在加载pdf后如何在iframe上自动调用print()。
答案 0 :(得分:5)
但是,我不知道如何通过
HttpServletResponse
(在Java中)将PDF放入iframe
让<iframe src>
指向servlet网址,该网址获取PDF的InputStream
并将其写入响应的OutputStream
。如有必要,您可以将JSF bean属性作为附加GET参数传递,以便您可以控制PDF生成。
<iframe src="pdfServlet?foo=#{bean.foo}&bar=#{bean.bar}"></iframe>
有问题的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()。
在<iframe onload>
上挂钩一个功能。但是,您需要考虑浏览器特定的行为。在这个问题中可以找到更多提示:How do I print an IFrame from javascript in Safari/Chrome
答案 1 :(得分:0)
这不是您问题的答案,但您可以使用&#34; kiosk&#34;以Chrome格式传递打印对话框。模式(跳过打印对话框)请参阅:
How to disable print preview on Google Chrome ver 38?
我希望这对你有用:)
引用回答:
命令行参数 - disable-print-preview 适用于最新版本 我只是自己测试了Chrome版本。