Web 应用程序允许用户使用浏览器的打印对话框打印 pdf 文档。这些文档是从具有 mimetype application/pdf 的服务流式传输的。在 Web 客户端中,创建 iframe 并将其附加到 document.body 并为源设置返回内容的服务的 uri。框架如下:
<iframe id="printPage" name="printPage" src="/remote/api/export/resource_name" style="position: absolute; top: -1000px; width: ${opts.frameWidth}px; height: ${opts.frameHeight}px;"></iframe>
javascript中的打印执行部分是这样的
let iframe = $('the_iframe_html_above');
iframe.load(() => {
window.frames.printPage.focus();
window.frames.printPage.print();
});
$('body').append(iframe);
这样,打印对话框仅在 Chrome 和 Safari 浏览器下按预期打开。
- 在 Firefox 下,对话框打开但打印 about:blank page 因为 iframe 保持为空(正文中没有内容)。当从 about:config 禁用 pdfjs 时会发生这种情况,这显然是可以的。如果它没有被禁用,那么 FF 会给出错误“错误:访问属性打印的权限被拒绝”,在 mozilla 的 bugtracker https://bugzilla.mozilla.org/show_bug.cgi?id=911444中报告了一个 3 年前的错误
- IE 和 Edge 只是忽略了我知道它是预期的 onload 处理程序,但即使使用内联 onload 处理程序,它们也无法打开打印对话框。只有 IE 提供文件用于保存/打开但不提供打印。
所以我的问题是:如果有一个跨浏览器的方式来执行打印操作(打开浏览器的本机打印对话框)给定这些条件?