Javascript .print()无法使用IE11进行类型application / pdf

时间:2013-12-02 12:49:37

标签: javascript html printing compatibility internet-explorer-11

我已经在我的网站上使用了一段时间的代码示例,现在从IE11和Windows 8.1运行时出现问题。

问题是当再次调用javascript方法.print()时,不会弹出打印窗口。

<html>
<head></head>

<body onload="window.document.getElementById('PDFDoc').print();">
    <object id='PDFDoc' name='PDFDoc' type='application/pdf' data='Hello World.pdf' height="369" width="266" style="border-width:thin;border:#CCCCCC" >
</object>
</body>
</html>

我发现this article谈论类似的事情,但我自己无法将其用作修复。

PS:我会上传Hello World pdf,但stackoverflow不允许我这样只使用任何pdf来复制错误。

在调试模式下,我收到错误object doesn't support property or method 'print'

enter image description here

我知道self.print()有效,但我不确定如何使其适应此代码以打印pdf而不是整个html页面。还有其他方法吗?

2 个答案:

答案 0 :(得分:1)

如果我错了,请纠正我,但<object>元素似乎没有print()方法。之所以在IE浏览器中工作,我猜是因为他们没有过多地提供标准,但现在他们往往更接近他们,因此他们可能已经放弃了他们的自定义打印方法。

然而,你有很多选择:

  1. 隐藏您不想打印的所有内容,并调用window.print()
  2. 创建print.css样式表
  3. 您可以创建<iframe>元素并将元素附加到那里,然后在该iframe上调用print。
  4. 另请查看these discussions

答案 1 :(得分:0)

尽管这是一个相当老的问题,但这是一个非常有效的出色解决方案。已在IE10 v11.1039.17763.0(在IE10模式下),Google Chrome v80.0.3987.132,MS Edge v44.17763.831.0和MS Edge(在Chromium,测试版上)v81.0.416.20(均在Win10下)进行了测试。 >

此解决方案直接打开带有给定pdf文件的浏览器的打印对话框。

<object id="objectPdf" data="my.pdf" type="application/pdf" width="1" height="1">
  alt : <a href="my.pdf">my.pdf</a>
</object>

<iframe id="iFramePdf" src="my.pdf" style="display:none;"></iframe>

<input type="button" value="Print PDF" onclick="printTrigger();" />

<script type="text/javascript">
 function printTrigger() {
    try {
        document.getElementById('objectPdf').printWithDialog();
    } catch(e) {
        document.getElementById('iFramePdf').contentWindow.print();
    }
 }
</script>

请注意,所提供的解决方案在启动三个HTTP请求(而不只是一个HTTP请求)时表现不佳!