【问题标题】:How Internet Explorer Prepare Print Preview windowInternet Explorer 如何准备打印预览窗口
【发布时间】:2010-12-12 05:21:40
【问题描述】:

我想知道 Internet Explorer、Mozilla Firefox 或任何其他浏览器如何生成加载到浏览器中的网页的打印预览窗口。

预览图会有各种变化,比如去掉banner和adv,会有白底黑字等。

我们希望使用 C# WebBrowser 控件实现类似的打印预览窗口,我不想使用默认浏览器打印预览功能,例如 ExecWB 命令或任何其他功能。

请给我们一些启示。

谢谢,

拉马南德·巴特。

【问题讨论】:

  • 您的意思是“如何强制 WebBrowser 控件使用@media print CSS 而不是默认的@media screen 呈现”?
  • 是的 Piskvor,我们正是想在 Web 浏览器控件中呈现已加载网页的打印媒体。任何可能的方法来做到这一点..

标签: c# css internet-explorer firefox browser


【解决方案1】:

您可以尝试通过访问和修改 HTMLDocument LINK 元素来更改样式。

HtmlDocument document = WebBrowser1.Document;

foreach (HtmlElement element in document.GetElementsByTagName("LINK"))
{
    string cssMedia = element.GetAttribute("Media");


    if (cssMedia == "print")
        element.SetAttribute("Media", "screen"); //sets print styles to display normally
    else
        element.SetAttribute("Media", "hidden"); //hides normal styles
}

这将更改您的打印样式以在屏幕视图中显示(即作为普通样式表而不必使用打印预览窗口)并且您的屏幕样式将不显示(因为它们没有媒体类型屏幕不再)

这是示例代码,因此没有任何错误检查。它也可能有一些语法错误,但它应该是实现目标的开始。

【讨论】:

  • 谢谢尼克,我们接受您的回答作为我们查询的解决方案。我们发现此解决方案将是启动的良好起点。但我们发现并非所有网站页面都具有“媒体 = 打印或屏幕”标签属性,因此并非所有网页(谷歌、必应等)都以打印预览模式呈现。那么我们如何支持不包含打印媒体标签的网页来生成打印预览位图图像。谢谢。
  • IE 在“工具>Internet 选项>高级>打印”下有一个高级设置,可让您“打印背景颜色和图像”。如果选中此项,打印版本将显示屏幕上显示的所有内容。此设置的默认设置是未选中的,这是我相信您所追求的行为。我会解析 CSS 并删除所有背景颜色和背景图像引用(在样式表中并确保嵌入在 html 中)。
【解决方案2】:

要打印屏幕,您需要在 javascript 中设置对 window.print() 的调用。

<a href="javascript:window.print();">Print screen</a>

然后它将使用您在页面中指定为“打印”的任何 CSS 将页面呈现为预览

【讨论】:

  • 谢谢,但是这个 javascript 会调用浏览器默认的打印预览和打印模块。我们想手动构建网页打印预览窗口,而不是使用浏览器打印窗口。
【解决方案3】:

据我所知,在打印预览期间,浏览器不会删除横幅、广告等。当媒体为print 时,CSS 控制外观。

【讨论】:

  • 谢谢 Alan,但是如何在 webbrowser 中为加载的网页调用“打印”媒体。
猜你喜欢
  • 2016-03-09
  • 1970-01-01
  • 2017-04-08
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多