我在使用WebBrowser控件的打印功能时遇到了问题。
首先我加载我的页面并使其呈现正确。 然后我设置页眉/页脚/边距和右侧打印机: webbrowser printing; How do I programatically change printer settings with the WebBrowser control?
到目前为止这是有效的。然后我使用myBrowser.Print();
但我的网站打印不正确。只打印左上角,几厘米,然后有滚动条。
我用IE9打印了我的网站,一切都很好。还尝试了不同的浏览器模式和文档模式。没问题。 我认为控件和IE在技术上是一样的......
有遗忘的参数吗?
我要打印的网站很旧,没有doctype。但由于控件显示正确,我希望它也能正确打印。
修改
发现它与网站上的javascript有关,它不会用于打印。 有没有办法从被操纵的DOM中获取HTML?
答案 0 :(得分:2)
对于打印功能,不处理外部文档。网站的所有文档都必须合并到一个可打印的网站中。要获取其他文档,您必须将myBrowser.Document.DomDocument强制转换为IHTMLDocument2。从那个IHTMLDocument2中,您可以提取CSS或JS以将其放入html。
例如:
void myBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
myBrowser.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(myBrowser_DocumentCompleted);
myBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(myBrowser_DocumentPrintable);
String mySource = myBrowser.DocumentText;
// Get the CSS
IHTMLDocument2 doc = (myBrowser.Document.DomDocument) as IHTMLDocument2;
myCSS = doc.styleSheets.item(0).cssText;
mySource = mySource.Replace("<link rel=\"stylesheet\" type=\"text/css\" href=\"/css/style.css\">", "<style type=\"text/css\">"+myCSS+"</style>");
// Reload
myBrowser.DocumentText = mySource;
}
void myBrowser_DocumentPrintable(object sender, WebBrowserDocumentCompletedEventArgs e)
{
myBrowser.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(myBrowser_DocumentPrintable);
myBrowser.Print();
}