Hier aufklappen um sämtliche Kategorien zu durchstöbern.

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.

kick it on dotnet-kicks.de

Pingbacks and trackbacks (1)+

Kommentar schreiben

  Country flag

biuquote
  • Kommentar
  • Live Vorschau
Loading

Anmelden