0

我似乎找不到使用 .net 4.0、visual studio 2010 和windows forms在 c# 中打印 .htm 文件的好方法。当我尝试直接打印它时,它打印了原始 html 数据而不是打印“页面”本身。

我知道打印它的唯一方法是使用 WebBrowser 控件。当我打印文档时,它不打印颜色并且页面打印不正确。例如,不绘制边缘等。

网页浏览器代码:

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,我不能说太多好话。它是命令行驱动的,而且超级超级快。 最重要的是,它是免费的。它有一个名为 wkhtmltoimage 的配套程序,它也可以打印成最流行的图像格式(bmp、jpg、png 等)。

下载/安装程序后,您可以通过转到命令提示符、导航到安装文件夹并键入以下内容来运行快速测试:

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 窗体中从 webbrowser 控件打印时遇到相同问题的人。

于 2012-07-14T10:40:58.983 回答