Drucken unter Silverlight

Drucken unter Silverlight war ja als Thema für mich – mangels einer Anforderung – nie wirklich interessant – zumal es hier auch Wege drumherum gibt. Nun gibt es dieses Feature aber doch und schlussendlich habe ich dafür auch eine Anforderung erhalten. Blieb also nichts anderes übrig, als sich das Feature einmal genauer anzusehen.

Am Anfang der Geschichte steht die Klasse PrintDocument. Sie bietet folgende Möglichkeiten:

Methode/Event Beschreibung
BeginPrint Wird nach dem Bestätigen des Druck-Dialogs aber vor dem eigentlichen Druckvorgang ausgelöst.
PrintPage Wird für jede zu druckende Seite ausgelöst und übernimmt die Aufgabe, das zu Druckende zu definieren.
EndPrint Wird ausgeführt, wenn der Druckvorgang fertiggestellt wurde (sowohl reguläres Ende des Druckens als auch bei einem Abbruch).
Print Öffnet den Druckdialog und startet bei dessen Bestätigung den Druckvorgang. Als Parameter ist der Name des zu druckenden Dokumentes zu übergeben.

Und so sieht es aus:

PrintDocument doc = new PrintDocument();

doc.BeginPrint += new EventHandler<BeginPrintEventArgs>(doc_BeginPrint);

doc.PrintPage += new EventHandler<PrintPageEventArgs>(doc_PrintPage);

doc.EndPrint += new EventHandler<EndPrintEventArgs>(doc_EndPrint);

doc.Print("MyDocument");

Interessant hierbei ist das Ereignis PrintPage. Der Handler dazu erhält ein Objekt vom Typ PrintPageEventArgs. Dieser stellt vier Eigenschaften zur Verfügung:

Eigenschaft Beschreibung
HasMorePages Darüber kann festgelegt werden, ob weitere Seiten zu drucken sind.
PageMargins Liefert die Seitenränder der Seite mit Hilfe eines Thickness-Objektes zurück.
PageVisual Setzt das Objekt vom Typ Visual fest, welches ausgedruckt werden soll.
PrintableArea Liefert die Größe der druckbaren Fläche zurück.

 

Wie in der Tabelle ersichtlich, kann per PageVisual festgelegt werden, welches Objekt vom Typ Visual ausgedruckt werden soll. Auf dieser Basis können nun zwei Anwendungsfälle abgedeckt werden:

  1. Es wird ein bestehendes Visual herangezogen und (quasi á la Screenshot) ausgedruckt.
  2. Programmatisch wird ein Visual mit den notwendigen Informationen und Elementen erzeugt, welches ausgedruckt wird.

Der erste Fall läßt sich mit herkömmlichen Boardmitteln sehr gut abdecken und muss nicht zwangsweise über Silverlight behandelt werden. Der zweite Fall ist hierbei schon durchaus interessanter, da eigene Drucksichten gebastelt werden kann. Dies ist zwar weniger interessant, wenn es sich um eine LOB-Silverlight-Anwendung handelt und im Kontext einer größeren Online-Anwendung eingebettet ist. Für andere Szenarien ist die Möglichkeit aber durchaus verwendbar.

Veröffentlicht von Norbert Eder

Ich bin ein leidenschaftlicher Softwareentwickler. Mein Wissen und meine Gedanken teile ich nicht nur hier im Blog, sondern auch in Fachartikeln und Büchern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Cookie-Einstellungen
Auf dieser Website werden Cookie verwendet. Diese werden für den Betrieb der Website benötigt oder helfen uns dabei, die Website zu verbessern.
Alle Cookies zulassen
Auswahl speichern
Individuelle Einstellungen
Individuelle Einstellungen
Dies ist eine Übersicht aller Cookies, die auf der Website verwendet werden. Sie haben die Möglichkeit, individuelle Cookie-Einstellungen vorzunehmen. Geben Sie einzelnen Cookies oder ganzen Gruppen Ihre Einwilligung. Essentielle Cookies lassen sich nicht deaktivieren.
Speichern
Abbrechen
Essenziell (1)
Essenzielle Cookies werden für die grundlegende Funktionalität der Website benötigt.
Cookies anzeigen