web-dev-qa-db-ja.com

HTML / Javascriptワンクリックプリント(ダイアログなし)

印刷ダイアログをバイパスする印刷オプションを持つことは可能ですか?

クローズドシステムで作業しており、印刷ダイアログの設定を事前に定義できるようにしたいと考えています。ボタンをクリックするとすぐに印刷を処理します。

私が読んでいることから、これを行う方法はブラウザごとに異なります。たとえば、IEはActiveXを使用します。Chrome/Firefoxには拡張機能が必要です。これに基づいて、C++でアプリケーションを作成する必要があるようです。ブラウザから渡されたパラメータを処理して、適切なフォーマットで自動印刷できます(ラベル用)。次に、それをChrome/Firefoxの拡張機能として書き直す必要があります。最終結果は、クローズドシステムは、使用するブラウザに応じて、これらの機能をダウンロード/インストールする必要があります。

これを回避する別の方法があることを願っていますが、このタスクはブラウザのセキュリティ問題に違反している可能性があります。

10
teynon

結局、Nexus Mod Managerと非常によく似たカスタムアプリケーションを実装しました。カスタム アプリケーションURIスキーム を登録するC#アプリケーションを作成しました。仕組みは次のとおりです。

  1. ユーザーがWebサイトで[印刷]をクリックします。
  2. ウェブサイトはユーザーを「CustomURL:// Print/{ID}」にリンクします
  3. アプリケーションは、カスタムURIスキームを介してWindowsによって起動されます。
  4. アプリケーションは事前設定されたサーバーと通信して印刷要求を確認し、私の場合は実際の印刷コマンドを取得します。
  5. 次に、アプリケーションは C#RawPrinterHelper クラスを使用して、コマンドをプリンターに直接送信します。

このアプローチでは、ユーザーからの最初のダウンロードと、アプリケーションを初めて起動するときにウィンドウからの単一のセキュリティプロンプトが必要でした。また、印刷ジョブが処理されたかどうかを検出するようにJavascriptマジックを実装しました。そうでない場合は、アプリケーションをダウンロードするように求めます。

8
teynon

これが遅い返信であることは知っていますが、これが私が使用している解決策です。私はこれをIEでのみ使用し、他のブラウザではテストしていません。

このSub Printブローは、デフォルトの印刷機能を効果的に置き換えます。

<script language='VBScript'>
Sub Print()
       OLECMDID_PRINT = 6
       OLECMDEXECOPT_DONTPROMPTUSER = 2
       OLECMDEXECOPT_PROMPTUSER = 1
       call WB.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER,1)
End Sub
document.write "<object ID='WB' WIDTH=0 HEIGHT=0 CLASSID='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'></object>"
</script>

次に、Javascriptのwindow.print();を使用します。ハイパーリンクまたはボタンに関連付けて、印刷コマンドを実行します。

ページが読み込まれたときに自動的に印刷する場合は、下のコードをタグの近くに配置します。

<script type="text/javascript"> 
window.onload=function(){self.print();} 
</script> 
8
ComputerMinute

この問題を解決するFirefoxの素晴らしいプラグインを見つけました。 try シームレス印刷 印刷ダイアログを表示せずにWebアプリケーションから何かを印刷するFirefoxのプラグイン。

  1. Firefoxを開く
  2. アドオン名のシームレス印刷を検索してインストールします
  3. インストールが正常に完了すると、ユーザーが何かを印刷したいときに印刷ウィンドウがバイパスされます。
3
Reaz Patwary

一般的な答えは次のとおりです。NO一般的なケースではこれを行うことはできませんが、場合によってはそれを行うことができます。チェック http://justtalkaboutweb.com/2008/05/09/javascript-print-bypass-printer-dialog-in-ie-and-firefox/

とにかくそのようなことを許可した場合、マルウェアのスクリプトが静かに印刷ジョブを訪問者のプリンターに送信する可能性があるため、セキュリティの問題になります。

3
pater

私はFirefoxブラウザのためにこの答えを書いています。

  • ファイルを開く>ページ設定

  • すべてのヘッダーとフッターを空白にします

  • マージンを0(ゼロ)に設定します

  • Firefoxのアドレスバーにabout:configと入力します

  • print.always_print_silentを検索し、ダブルクリックします

  • Falseからtrueに変更します

    • これにより、表示される[印刷]ポップアップボックスをスキップしたり、[OK]をクリックする必要があるステップをスキップしたりして、適切なサイズの伝票を自動的に印刷できます。
  • print.always_print_silentが表示されない場合

    • 設定ウィンドウの空白の領域を右クリックします

    • 新規>ブール値を選択

    • 名前として「print.always_print_silent」と入力します(引用符は不要)

    • [OK]をクリックします

    • 値にtrueを選択します

  • print.print_printerにリストされているものを確認することもできます

    • Generic/Text Only(またはレシートプリンターの名前が付いているもの)を選択する必要がある場合があります。
1
Abhijeet Kale