3

現在の非 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 を印刷する方法の他の例はありますか?

4

1 に答える 1