現在の非 IE ブラウザー (Chrome、Firefox、Opera、Safari) の場合、その PDF への URL を指定して PDF ドキュメントをプリンターに送信したいと考えています。
余分なウィンドウがポップアップしないようにするために、現在これを実行しています<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 ページにリンクの提案がありますが、このドキュメントは現在時代遅れのようです。私が見つけた最良の例は、Amazon Web Services の請求書の印刷ダイアログをリバース エンジニアリングすることでしたが、それはウィンドウを開きます。
私が検討した代替案の 1 つはGoogle クラウド プリントですが、明らかにこれには追加のソフトウェアのインストールまたは Google アカウントの構成が必要であり、必要でない限り、どちらもユーザーに課したくありません。
URL を指定して PDF を印刷する方法の他の例はありますか?