2009-11-02 60 views
1

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

预览图像将被删除的各种变化,例如横幅和进阶,将有白色背景和黑色文字等

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

请给我们一些关于这一点。

谢谢,

Ramanand Bhat。

+1

你的意思是“如何强制WebBrowser控件使用'@media print' CSS而不是默认的'@media screen'渲染”? – Piskvor 2009-11-02 09:47:46

+0

是Piskvor, 我们完全想要在Web浏览器控件中呈现加载的网页的打印介质。 任何可能的方式来做到这一点.. – 2009-11-02 09:54:47

回答

2

您可以尝试通过访问和修改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 
} 

这将改变你的打印样式屏幕视图中显示(即作为一个正常的样式表,而不必使用打印预览窗口),您的屏幕样式不会显示(因为它们不有媒体类型的屏幕了)

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

+0

感谢Nick,我们接受您的答案作为我们查询的解决方案。 我们发现这个解决方案将成为启动的良好起点。 但是,当我们发现并非所有网站页面都具有'Media = Print或screen'标签属性,因此并非所有网页(Google,bing等)都以打印预览模式呈现。 那么我们如何支持不包含打印介质标签的网页来生成打印预览位图图像。 谢谢。 – 2009-11-03 05:32:22

+0

IE在“工具> Internet选项>高级>打印”下有一个高级设置,可让您“打印背景颜色和图像”。如果选中此项,打印版本将显示屏幕上显示的所有内容。此设置的默认值未经检查,这是我相信您之后的行为。我会解析CSS并删除所有背景颜色和背景图像引用(在样式表中并嵌入到html中以确保)。 – NickGPS 2009-11-03 14:15:40

0

据我所知,在打印预览期间,浏览器删除了横幅,广告等等而非。当媒体为print时,CSS支配外观。

+0

谢谢艾伦, 但如何调用“打印”媒体为webbrowser加载的网页。 – 2009-11-02 09:34:52

1

要打印一个屏幕,您需要在javascript中设置对window.print()的呼叫。

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

然后,它会使用任何CSS你在页面指定为“打印”来渲染页面的预览

+0

谢谢,但是这个javascript会调用浏览器的默认打印预览​​和打印模块。 我们想手动构建网页打印预览窗口,而不是使用浏览器打印窗口。 – 2009-11-02 10:11:00