【问题标题】:how to print .htm files in c#?如何在 C# 中打印 .htm 文件?
【发布时间】:2012-07-13 16:07:44
【问题描述】:

我似乎找不到使用 .net 4.0、visual studio 2010 和 windows 窗体在 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();
}

我能做什么?

谢谢!

【问题讨论】:

    标签: c# .net html visual-studio-2010 printing


    【解决方案1】:

    打印网页将永远成为您生存的祸根。只是没有一种解决方案可以将 HTML 直接打印到您的打印机,非常非常好。即使您确实找到了一个运行良好的程序,您尝试打印具有某些不受支持的格式的页面也只是时间问题,在这种情况下,您又回到了开始的地方。

    我们所做的是使用名为wkhtmltopdf 的程序将 HTML 打印到 pdf 文件中。然后我们在 Acrobat(它具有出色的打印支持)中打开它并从那里打印。关于 wkhtmltopdf,我不能说太多好话。它是命令行驱动的,而且超级超级快。 最重要的是,它是免费的。它有一个名为 wkhtmltoimage 的配套程序,它也可以打印成大多数流行的图像格式(bmp、jpg、png 等)。

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

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

    它还有a ton of command line switches,让您可以更好地控制输出(页眉、页脚、页码等)。

    【讨论】:

    • 你应该从你的第一句话中删除“网页”这个词......应该完全禁止打印! ;-)
    • 尽管我同意你的回答,但这并不能解决在没有安装第 3 方控件的情况下回答的问题。我自己提出了这个问题,寻求有关如何自己打印 htm 文件的信息。每次需要打印 htm 文件时,您不必求助于生成 pdf 文件。支持使用默认浏览器直接打印 htm 文件。我一直这样做,而且效果很好。您只需首先确保默认设置正确即可。
    • @ArvoBowen:今天可能是这样,但当我回答这个问题时,肯定不是三年前。具有讽刺意味的是,大多数网站仍然将打印视为事后的想法,并且很少实施一组正确的 css 打印样式tinyurl.com/jvykgzc。事实上,尝试在 Chrome 中打印这个网页,无论您对打印设置做了多少摆弄,您都会发现明显的不一致。这显然是不可接受的,尤其是在需要专业/准确/相同输出(RFP、审计)甚至关键(证据、调查等)的情况下。
    • @Mr.JavaScript 我完全同意。我的评论更指出了您必须在答案中使用第三方应用程序这一事实。很多答案似乎都倾向于 wkhtmltopdf 可执行文件。我很想看到 WKHTMLTOPDF 的 API 或类,或者可以封装在程序(甚至是 dll/库)中的东西。不过,您的评论点应该会有所帮助。 ;)
    【解决方案2】:

    好的,正如我所说,问题是没有绘制边缘,也没有绘制背景。

    我是这样解决的。

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

    【讨论】:

      猜你喜欢
      • 2016-06-05
      • 2012-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-19
      • 1970-01-01
      • 2011-03-17
      • 2012-08-22
      相关资源
      最近更新 更多