对于当前的非 IE 浏览器(Chrome、Firefox、Opera、Safari),我想将 PDF 文档发送到给定该 PDF 的 URL 的打印机。
为了避免弹出多余的窗口,我目前正在这样做,<iframe>
但我想在打印完成后关闭 iframe,否则一些浏览器会在尝试离开页面时弹出一个对话框。
到目前为止,这是我想出的(为了简单起见,使用 lodash 和 jQuery):
var _print_url, _remove_iframe, _set_print;
_print_url = function(src_url) {
$("<iframe src='" + src_url + "' type='application/pdf'>").css({
visibility: 'hidden',
position: 'fixed',
right: '0',
bottom: '0'
}).on('load', _set_print).appendTo(document.body);
};
_remove_iframe = function(iframe) {
return $(iframe).parent().find(iframe).detach();
};
_set_print = function() {
this.contentWindow.print();
/*
* Where we could do @contentWindow.close() with a window, we must remove the
* print iframe from the DOM. We have to engage in some async madness
* it seems, for no apparent reason other than this won't work
* synchronously (@cw.print above must be async, it seems) - even though
* window.close() appears to work synchronously.
*/
_.delay(_.partial(_remove_iframe, this), 100);
};
有时,似乎与Google Chrome一起,打印式数字最终会正确显示PDF,但是当人们选择打印机并确认打印的意图时,它实际上会将框架的父页面的内容发送到打印机,而不是PDF本身。
Mozilla 页面上有一个链接建议,但该文档目前似乎已过时。我能找到的最好的例子是对发票的亚马逊网络服务打印对话框进行逆向工程,但这会打开一个窗口。
我考虑过的另一种选择是Google Cloud Print,但显然这需要安装额外的软件或配置 Google 帐户,除非必要,否则我不希望对用户强加。
是否还有其他示例可以说明如何在给定 URL 的情况下打印 PDF,尤其是使用 Javascript 并且没有其他多余的额外浏览器插件或人工制品(例如弹出窗口)?