1

WebBrowser コントロールの印刷機能に問題があります。

最初にページをロードすると、正しくレンダリングされます。次に、ヘッダー/フッター/マージンと適切なプリンターを設定し ますWebBrowser コントロールを使用してプリンター設定をプログラムで変更するにはどうすればよいですか?

それはこれまでのところうまくいきます。それから私は使用しますmyBrowser.Print();

しかし、私のウェブサイトは正しく印刷されません。左上隅のみが数センチ印刷され、スクロールバーが表示されます。

Web サイトを IE9 で印刷しましたが、すべて問題ありませんでした。また、さまざまなブラウザモードとドキュメントモードを試しました。問題ない。そして、コントロールとIEは技術的に同じだと思っていました...

忘れたパラメーターはありますか?

印刷したい Web サイトは古く、Doctype がありません。しかし、コントロールはそれを正しく表示するので、それも正しく印刷されることを期待しています。

編集:

印刷用に実行されないWebサイトのjavascriptに関係していることがわかりました。操作された DOM から HTML を取得する方法はありますか?

4

1 に答える 1

2

印刷機能では、外部文書は処理されません。Web サイトのすべてのドキュメントは、1 つの印刷可能なサイトにマージする必要があります。他のドキュメントを取得するには、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();
    }
于 2012-07-06T08:45:00.070 に答える