Internet Explorer 如何准备打印预览窗口
Posted
技术标签:
【中文标题】Internet Explorer 如何准备打印预览窗口【英文标题】:How Internet Explorer Prepare Print Preview window 【发布时间】:2010-12-12 05:21:40 【问题描述】:我想知道 Internet Explorer、Mozilla Firefox 或任何其他浏览器如何生成加载到浏览器中的网页的打印预览窗口。
预览图会有各种变化,比如去掉banner和adv,会有白底黑字等。
我们希望使用 C# WebBrowser 控件实现类似的打印预览窗口,我不想使用默认浏览器打印预览功能,例如 ExecWB 命令或任何其他功能。
请给我们一些启示。
谢谢,
拉马南德·巴特。
【问题讨论】:
您的意思是“如何强制 WebBrowser 控件使用@media print
CSS 而不是默认的@media screen
呈现”?
是的 Piskvor,我们正是想在 Web 浏览器控件中呈现已加载网页的打印媒体。任何可能的方法来做到这一点..
【参考方案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 中为加载的网页调用“打印”媒体。以上是关于Internet Explorer 如何准备打印预览窗口的主要内容,如果未能解决你的问题,请参考以下文章
使用 Javascript 或 CSS 从 Internet Explorer 打印时隐藏页眉和页脚
从 Internet Explorer 8 打印时,我需要为不透明度设置哪种 css 样式?
如何从 Internet Explorer 11 降级到 Internet Explorer 10?
对于某些情况,如 Internet Explorer 特定的 CSS 或 Internet Explorer 特定的 JavaScript 代码,如何仅针对 Internet Explorer 10?