使用Windows.Forms.WebBrowser控件进行打印时剪切页面

时间:2012-07-03 12:49:26

标签: c#

我在使用WebBrowser控件的打印功能时遇到了问题。

首先我加载我的页面并使其呈现正确。 然后我设置页眉/页脚/边距和右侧打印机: webbrowser printing; How do I programatically change printer settings with the WebBrowser control?

到目前为止这是有效的。然后我使用myBrowser.Print();

但我的网站打印不正确。只打印左上角,几厘米,然后有滚动条。

我用IE9打印了我的网站,一切都很好。还尝试了不同的浏览器模式和文档模式。没问题。 我认为控件和IE在技术上是一样的......

有遗忘的参数吗?

我要打印的网站很旧,没有doctype。但由于控件显示正确,我希望它也能正确打印。

修改

发现它与网站上的javascript有关,它不会用于打印。 有没有办法从被操纵的DOM中获取HTML?

1 个答案:

答案 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();
    }