0

.net 4.0、Visual Studio 2010、およびWindowsフォームを使用してC#で.htmファイルを印刷する良い方法が見つからないようです。直接印刷しようとすると、「ページ」自体を印刷するのではなく、生のhtmlデータを印刷しました。

私がそれを印刷することを知っている唯一の方法は、WebBrowserコントロールを使用することです。ドキュメントを印刷すると、色が印刷されず、ページが正しく印刷されません。たとえば、エッジは描画されません。

Webブラウザのコード:

public void Print()
{
    // Create a WebBrowser instance. 
    WebBrowser webBrowserForPrinting = new WebBrowser();

    // Add an event handler that prints the document after it loads.
    webBrowserForPrinting.DocumentCompleted +=
        new WebBrowserDocumentCompletedEventHandler(PrintDocument);

    // Set the Url property to load the document.
    webBrowserForPrinting.Url = new Uri(Core.textLog);
}

private void PrintDocument(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    ((WebBrowser)sender).ShowPrintDialog();
    //// Print the document now that it is fully loaded.
    //((WebBrowser)sender).Print();

    //// Dispose the WebBrowser now that the task is complete. 
    ((WebBrowser)sender).Dispose();
}

私に何ができる?

ありがとうございました!

4

2 に答える 2

1

ウェブページを印刷することは永遠にあなたの存在の悩みの種になります。HTMLをプリンタに直接印刷するソリューションはありません。そして、それをうまく実行するプログラムを見つけたとしても、サポートされていないフォーマットでページを印刷しようとするのは時間の問題です。その場合、最初の場所に戻ります。

私たちがしているのは、wkhtmltopdfというプログラムを使ってHTMLをpdfファイルに出力することです。次に、Acrobat(優れた印刷サポートを備えています)で開き、そこから印刷します。私はwkhtmltopdfについて十分に良いことを言うことができません。それはコマンドライン駆動であり、その超、超高速です。 何よりも、その無料。これには、最も一般的な画像形式(bmp、jpg、pngなど)にも印刷されるwkhtmltoimageというコンパニオンプログラムがあります。

プログラムをダウンロード/インストールした後、コマンドプロンプトに移動し、インストールフォルダーに移動して、次のように入力すると、簡単なテストを実行できます。

wkhtmltopdf "http://YouWebAddress.com" "C:/YourSaveLocation.pdf"

また、出力(ヘッダー、フッター、ページ番号など)をより細かく制御できるコマンドラインスイッチも多数あります。

于 2012-07-13T16:14:35.453 に答える
0

わかりました、私が言ったように、問題はエッジが描画されず、背景も描画されないことでした.

これが私がそれを解決した方法です。

Hashtable values = new Hashtable();

values.Add("margin_left", "0.1");
values.Add("margin_right", "0.1");
values.Add("margin_top", "0.1");
values.Add("margin_bottom", "0.1");
values.Add("Print_Background", "yes");

using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Internet Explorer\PageSetup", true))
{
    if (key == null) return;

    foreach (DictionaryEntry item in values)
    {
        string value = (string)key.GetValue(item.Key.ToString());

        if (value != item.Value.ToString())
        {
            key.SetValue(item.Key.ToString(), item.Value);
        }
    }
}

したがって、印刷する前に、regedit に移動して値を変更すると、ドキュメントが完全に印刷されます。これが、Windows フォームの Web ブラウザー コントロールから印刷するときに同じ問題を抱えている他の人々に役立つことを願っています。

于 2012-07-14T10:40:58.983 に答える