Firefox 19从JavaScript打印PDF

时间:2013-02-21 20:40:55

标签: javascript firefox pdf

我有一个“打印”按钮,可以调用以下JavaScript

window.frames.myPdfFrame.print();

其中“myPdfFrame”指的是带有src的PDF的iframe。

在Chrome和Firefox 18(及以下版本)中,这会按预期打开打印对话框,但从Firefox 19开始,我收到以下错误

Error: Permission denied to access property 'print'

我认为这与使用embedded PDF viewer released with Firefox 19而不是Adobe插件有关。使用PDF插件工具栏中的打印图标可以正常工作。

有没有办法从Javascript调用Firefox 19中的内联PDF中的打印对话框?

3 个答案:

答案 0 :(得分:5)

我尝试了提供的JSFiddle demo,Firefox 22 和NoScript 。有趣的是,当我第一次打开小提琴时,iframe的内容被NoScript阻止,但打印对话框很快就出现了!我点击“确定”,然后我得到一个任务栏吐司,说文件 about.blank 已发送到打印机。果然,我检查了打印机,它吐了一个漂亮的白页。没用......

现在,在告诉NoScript“暂时允许”PDF域名(irs.gov)之后,我重现了这个错误:

Error: Permission denied to access property 'print'

This other question让我想知道这是same origin policy的问题。所以我在自己的网络服务器上测试了它,并在同一台机器上托管了PDF文档。并且......没有骰子!

然后我在IE 9和Chrome中尝试了我的测试页面。他们两个都显示打印对话框,但是当我打印文档时,在IE 9的情况下,它实际上是打印:空白,Chrome打印出一个灰色矩形,上面写着“正在加载”...看起来它正在打印整个页面,而不仅仅是iframe中的文档。

所以,我同意Jason Sperske认为这似乎不可能。

更新this answer提供“正常工作”的解决方案,但仅适用于Fpdf library生成的PHP文件...

答案 1 :(得分:2)

在最新版本的Firefox(自19年代)上,您必须在about:config中禁用有问题的原生PDF查看器(pdf.js)。将pdfjs.disabled属性设置为true,您将看到使用您的脚本显示打印窗口。

如果开始下载,请将plugin.disable_full_page_plugin_for_types属性设置为application/pdf

答案 2 :(得分:1)

请尝试以下代码,它正在运行:

window.frames.myPdfFrame.focus();
window.print();