2014-07-08 18 views
7

Diese etwas ähnlich ist etwa Is there a better way to get the page count from a PrintDocument than this?ohne Drucken des Dokuments drucken Seite Count

Aber in meinem Fall in Frage habe ich eine Web-Browser-Steuerelement mit HTML formatiert. Im Moment habe ich eine Option, die ShowPrintPreviewDialog() aufruft, damit der Benutzer sehen kann, wie viele Seiten gedruckt werden.

Gibt es trotzdem das no von Seiten, die gedruckt werden, ohne die PrintPreview starten?

Ich versuche eine Methode zu erstellen, die OnTextChange aufruft und die Anzahl der Druckseiten automatisch anzeigt?

habe ich PrintPage Ereignis

private void PrintDocumentOnPrintPage(object sender, PrintPageEventArgs e) 
{ 
    e.Graphics.DrawString(this.webBrowser1.DocumentText, this.webBrowser1.Font, Brushes.Black, 10, 25);    
} 
+0

Ich denke, Sie haben Ihre Antwort in der [Antwort auf die verknüpfte Frage] (http://stackoverflow.com/a/11456713/1552016): Es ist eine statische Methode, die Sie in Ihrem Text ändern Event-Handler aufrufen können, und es zeigt keine Dialoge an. – qqbenq

+0

@qqbenq: wenn 'StandardPrintController' verwendet, funktioniert es gut, aber nicht der' PreviewPrintController', also hilft die Antwort nicht –

Antwort

10

Schlechte Nachrichten immer langsam fährt mit SO verwenden. Sie müssen die Idee kratzen, dass dies praktisch ist.

Obwohl in der Frage nicht erwähnt, sollten Sie bereits herausgefunden haben, dass Ihr PrintPage-Event-Handler nicht funktioniert. Es erzeugt immer eine Anzahl von 1. Das liegt daran, dass Sie die Eigenschaft e.HasMorePages nie auf "true" setzen, da die Eigenschaft mehr als eine Seite generiert.

Um zuverlässig setzen Sie diese Eigenschaft auf True, müssen Sie genau herausfinden, wie das HTML von der Browser-Layout-Engine gerendert wird. Und genau herauszufinden, wie man es in Seiten aufteilt, die nicht schneiden, sagen wir, eine Textzeile oder ein Bild in zwei Teile. Und herauszufinden, wie das ist in der genau gleiche Weise, dass die Browser-Druck-Engine dies tut. Eine Leistung, die von vielen Programmierern versucht wurde, die von niemandem erreicht wurde. Das Automationsobjektmodell des Browsers hat einfach nicht die benötigte API.

Der einzige vernünftige Weg ist der, den Sie bereits kennen. Sie haben ShowPrintPreviewDialog() aufrufen. Welche zeigt leicht die Seitenanzahl im Vorschau-Dialog sieht wie folgt in IE11:

enter image description here

Im Fall würde betrachten Sie diese Nummer aus dem Dialog-Snooping: Nein, das auch nicht funktionieren kann. Der Dialog verwendet keine Steuerelemente, es ist ein monolithisches Fenster.

+0

Hallo, wo ich wirklich die 'e.NewPage' setze. Ich kann nicht scheinen, ähnliches Eigentum zu finden? –

+0

Das war ein Tippfehler, korrigiert. Bitte versuchen Sie, den Punkt der Antwort zu verstehen, Sie haben keine Chance, es richtig einzustellen. –