0

htmlレポートを印刷したいのですが、この特有の問題があります。ファイル自体は、私のハードドライブにある通常のローカルhtmlファイルです。

これを行うために、私は次のことを試みました:

    public static void PrintReport(string path)
    {
        WebBrowser wb = new WebBrowser();
        wb.Navigate(path);
        wb.ShowPrintDialog()
    }

そして、クリックイベントのあるボタンが付いたこのフォームがあります。

    private void button1_Click(object sender, EventArgs e)
    {
        string path = @"D:\MyReport.html";
        PrintReport(path);
    }

これはまったく何もしません。これはちょっと奇妙なことです...しかし物事は奇妙になります...

印刷機能を編集して次のことを行う場合:

    public static void PrintReport(string path)
    {
        WebBrowser wb = new WebBrowser();
        wb.Navigate(path);
        MessageBox.Show("TEST");
        wb.ShowPrintDialog()
    }

できます。はい、MessageBoxを追加するだけです。メッセージボックスが表示され、その後に印刷ダイアログが表示されます。代わりにThread.Sleep(1000)を試してみましたが、これは機能しません。誰かがここで何が起こっているのか私に説明できますか?メッセージボックスが違いを生むのはなぜですか?

ある種の許可の問題でしょうか?私はこれをWindows7と8の両方で再現しました。同じことです。問題を特定するために、上記のコードのみを使用してこの小さなアプリケーションを作成しました。私が取り組んでいる古いバージョンのアプリケーションはWindowsXPで実行されるため、WindowsXPでも動作すると確信しています。代わりにmshtml-dllを使用してこれを直接実行しようとすると、問題が発生します。

任意の入力または説明は大歓迎です!

4

1 に答える 1

2

問題は、ブラウザがまだ印刷する準備ができていないことです。イベントハンドラーWebBrowserDocumentCompletedEventHandlerをWebBrowserオブジェクトに追加する必要があります。以下のサンプルコード。

public static void PrintReport(string path)
{
    WebBrowser wb = new WebBrowser();
    wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser_DocumentCompleted);
    wb.Navigate(path);
}

public static void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    WebBrowser wb = (WebBrowser)sender;
    if (wb.ReadyState.Equals(WebBrowserReadyState.Complete))
        wb.ShowPrintDialog();
}
于 2012-12-11T23:02:02.790 に答える