通过Javascript打印在IFrame中加载的PDF

时间:2015-01-23 23:45:30

标签: javascript html css pdf iframe

为什么不能这样做?我花了两天时间研究它。它是不可能做到的!

Chrome的最新版本确实允许父窗口访问PDF的iframe。但是FF或IE都不允许我触摸包含" application / pdf"的iframe。在它上面。

代码很简单:

<iframe id="pdfFrame" src="/mydomain/document.pdf"></iframe>

如果我打电话:

pdfFrame.contentWindow.print();

FF说:

Error: Permission denied to access property 'print'

IE说:

SCRIPT65535: Invalid calling object 

之前有没有人遇到过同样的情况?有没有人设法解决它?有没有人有不同的建议?我只想从自己的域名下载PDF并将其优雅地发送到打印机。

我尝试使用CSS @media格式化我的文档。但这一团糟。只要打印文档的一半,无论我将框架设置为100%翻转。

谢谢!

2 个答案:

答案 0 :(得分:2)

使用以下html显示pdf。 iframe用于镀铬打印

<object id="exPDF" type="application/pdf" data="pdfUrl#toolbar=1&navpanes=0&statusbar=0&messages=0" style="width:100%;height:475px;" >

<iframe id="iframePDF" name="iframePDF" src="pdfUrl" width="1" height="1" >

//javascript
try {

    if (isChrome) {
        var iframe = document.getElementById('iframePDF');
        if (iframe.src) {
            var frm = iframe.contentWindow;

            frm.focus();// focus on contentWindow is needed on some versions  
            frm.print();
        }
    }
    else {
        var _pdf_o = document.getElementById('exPDF');
        if (_pdf_o != undefined) {
            _pdf_o.print();
        }
        else {
            alert("pdf object not found");
        }
    }
} catch (e) {
    alert(e.description);
}

答案 1 :(得分:0)

这是一个混乱的解决方案,取决于您的经验深度。但是,我建议在iframe内容上添加一个窗口事件监听器。然后在父窗口上发出消息/发布消息。然后,当在iframe上拾取消息时,让该页面打印出pdf,然后应该在同一级别上。 当然,我实际上并没有亲自完成这项工作,但我使用了在iframe之间来回传递的广义事件监听器/帖子消息。

也许你在iframe中没有任何HTML,如果它只是pdf的直接链接,请先尝试另一个答案。

一个开始的好地方: https://developer.mozilla.org/en-US/docs/Web/API/Window.postMessage