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

Print a PDF loaded in IFrame via Javascript

本文关键字:加载 PDF IFrame Javascript 打印 通过      更新时间:2023-09-26

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

最新版本的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%一切,都只打印文档的一半。

谢谢!!

使用以下 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);
}

这是一个混乱的解决方案,具体取决于您的经验深度。 但是,我建议在 iframe 内容上添加一个窗口事件侦听器。 然后在父窗口上发出消息/发布消息。 然后,当在 iframe 上拾取消息时,让该页面打印出 pdf,然后应该处于同一级别。当然,我个人实际上并没有这样做,但我使用过在 iframe 之间来回切换的通用事件侦听器/发布消息。

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

也许是一个很好的起点:https://developer.mozilla.org/en-US/docs/Web/API/Window.postMessage