4

HTML/CSS に変換される XML を読み込んでいる WinForms アプリに WebBrowser コントロールがあります。そこで、または通常のブラウザで表示したいだけなら、美しく見えます。

フォームが読み込まれると、ファイルに移動することになっています。次に、OnDocumentCompleted イベントが発生すると、ヘッダー、フッター、および既定のプリンター名をレジストリに設定し、ユーザーが指定した部数に対して Print() を呼び出します。

デバッガーで実行しましたが、OnDocumentCompleted イベントで正しい回数 webBrowser.Print() を呼び出しています。null であってはならないものはありません。Visible は、AllowNavigation と同様に、WebBrowser コントロールで true です。はい、プリンターの電源が入っていて、ネットワーク経由で到達可能です。まったく同じコードがプロジェクトの他の場所で機能しますが、ここでは機能しません。

この地獄のようなコントロールが印刷コマンドを無視する原因は他にあるでしょうか?

理想的には、これは Windows スケジューラを使用して実行することを意図しており、ユーザーには決して表示されないため、すべてを画面外に隠したいと思います。ただし、コントロールを表示する必要があることを読んだので、この最初のねじれが解決するまで待つことができます。

EDIT : OnDocumentCompleted イベント ハンドラーの最後の 2 行で、DialogResult を OK に設定し、フォームを閉じました。Close() の呼び出しを削除すると印刷できるようになるため、フォームが閉じられて WebBrowser コントロールが破棄される前に、印刷スプーラーに到達しなかったと推測しています。

閉じる前に任意の時間制限を設定するだけでなく、いつ印刷が完了したかを知る方法はありますか?

4

3 に答える 3

4

ドキュメントを印刷スプーラーに送信する前にフォームが閉じられるというタイミングの問題であることが判明しました。フォームにタイマーを追加して 30 秒に設定し、Tick() イベントでフォームを閉じました。以前はフォームを閉じていましたが、現在は closeTimer.Start() を呼び出すだけです。

于 2009-05-18T18:48:22.560 に答える
3

これを試して:

mshtml.IHTMLDocument2 doc;
doc = oWeb.Document;        
doc.execCommand("Print", True, Nothing);

編集から:

SHELL コマンドを使用して、印刷キュー内のジョブのステータスを確認することができます

于 2009-05-18T17:35:58.773 に答える