2009-05-18 21 views
4

HTML/CSSに変換されたXMLを読み込んでいるWinFormsアプリケーションにWebBrowserコントロールがあります。私はちょうどそこまたはそれを普通のブラウザで見たいと思えば美しく見えます。WebBrowserコントロールはC#から印刷されません

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

私はデバッガを介して実行しており、WebBrowser.Print()をOnDocumentCompletedイベントで正しい回数呼び出しています。 nullにはならないものは何もありません。WebBrowserコントロールではVisibleがtrueであり、AllowNavigationもtrueです。はい、プリンタは電源が入っていて、ネットワーク経由でアクセス可能です。まったく同じコードはプロジェクトのどこかで動作しますが、ここでは動作しません。

他に、この地獄のコントロールが私の印刷コマンドを無視する原因になる可能性がありますか?

理想的には、Windowsスケジューラを使用して実行することを意味し、ユーザーは画面に表示されないようにすることが理想的です。私は、コントロールが見えるようにする必要があることを読んだので、この最初のキンクを解決するまで待つことができます。

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

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

答えて

4

内のジョブの状態を確認するためにコマンドを使用することが可能です印刷のスプーラに文書を送信する前にフォームが閉じられているという問題がありました。私はフォームにTimerを追加して30秒間設定し、Tick()イベントをフォームを閉じるようにしました。以前にフォームを閉じていたところで、今すぐcloseTimer.Start()を呼び出します。

+1

これは、ジョブがスプーラに到達するまでの時間によって異なります。これは、大きなジョブを処理する必要がなく、印刷システムの可用性が高いと想定しています。このようにしなければならない場合は、スレッドを30秒間スリープさせてからフォームを閉じることができます。ジョブが印刷されることを保証するために、印刷ジョブのステータスに基づいてより高いレベルの制御を行う方がよい。 – Yuan

3

これを試してみてください:EDIT FROM

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

SHELLがあることが判明し、印刷キュー

+0

がIHTMLDocument *インタフェースのいずれかにwebBrowser.Document(のHTMLDocument)に変換することはできませんからHTMLを印刷する源泉最良の方法です。 HTMLDocumentは独自のExecCommandを持っていますが、これはあなたの提案を使用して呼び出されました。 showUIをtrueまたはfalseに設定しても、何も起こりません。 –

+0

"(IHTMLDocument2)oWeb.Document;"を使用して、DocumentオブジェクトをIHTMLDocument2オブジェクトに変換するよう明示的に指示する必要があります。また、プロジェクトの参照としてMSHTML dllがあることを確認してください。 これに関係なく、ブラウザコントロールの内容を印刷します。 –

-1

これは、私は、文字列

void PrintString(string strHTMLText) 
{ 
    WebBrowser wbPrintString = new WebBrowser() { DocumentText = string.Empty }; 
    wbPrintString.Document.Write(strHTMLText); 
    wbPrintString.Document.Title = "Type The Header You Want Here"; 
    Microsoft.Win32.RegistryKey rgkySetting = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Internet Explorer\\PageSetup", true); 
    rgkySetting.SetValue("footer", "Type THe Footer You Want Here"); 
    rgkySetting.Close(); 
    wbPrintString.Parent = this; 
    wbPrintString.ShowPrintPreviewDialog(); 
    wbPrintString.Dispose(); 

}

関連する問題