Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!
FlowDocument-Element werden per RichTextBox-Feld eingegeben, per XAML definiert oder auch per VB zusammengestellt. Letzteres ist vor allem dann interessant, wenn Sie das Dokument mit den Daten aus einer externen Quelle wie einer Datenbank füllen wollen. So können Sie beispielsweise Rechnungen erstellen, Auflistungen von Produkten, Angebote und beliebige andere Dokumente. Diese können Sie dann als PDF verschicken oder ausdrucken. Dieser Artikel zeigt die Grundlagen zum Erstellen von FlowDocument-Objekten und zum Füllen mit den gewünschten Elementen und Inhalten.
In anderen Artikeln wie FlowDocument-Elemente mit XAML (www.datenbankentwickler.net/203) oder Das RichTextBox-Steuerelement (www.datenbankentwickler.net/204) haben wir die Grundlagen zu FlowDocument-Elementen geliefert und zu den Steuerelementen, in denen sie angezeigt und bearbeitet werden können.
Nun wollen wir zeigen, wie Sie Elemente, die Sie in den zuvor genannten Beiträgen mit XAML-Definitionen erstellt oder über ein RichTextBox-Steuerelement eingegeben haben, per VB-Code erstellen können.
Vorbereitung
Die Basis unseres Beispiels definieren wir wie folgt. Wir haben ein Grid, in dessen erster Zeile ein StackPanel-Element liegt, das wir im Laufe des Artikels mit Schaltflächen zum Ausführen unserer Beispiele füllen werden. In der zweiten Grid-Zeile haben wir ein FlowDocumentPageViewer-Element zur Anzeige der erzeugten FlowDocument-Elemente definiert:
<Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"></RowDefinition> <RowDefinition Height="*"></RowDefinition> </Grid.RowDefinitions> <StackPanel Orientation="Horizontal"> <Button x:Name="btnEinfacherText" Click="BtnEinfacherText_Click">Einfacher Text</Button> </StackPanel> <FlowDocumentPageViewer x:Name="fdp" Margin="3" Grid.Row="1"></FlowDocumentPageViewer> </Grid>
Die Beispielmethoden, die durch die Schaltflächen ausgelöst werden, legen wir im Code behind-Modul des Fensters an. Für den ersten Beispieltext hinterlegen wir die folgende Prozedur in der Klasse FlowDocumentPerVB:
Public Class FlowDocumentPerVB Private Sub BtnEinfacherText_Click(sender As Object, e As RoutedEventArgs) Dim objFlowDocument As FlowDocument Dim objParagraph As Paragraph objFlowDocument = New FlowDocument objParagraph = New Paragraph() With objParagraph .Inlines.Add("Dies ist ein erster Absatz.") End With objFlowDocument.Blocks.Add(objParagraph) fdp.Document = objFlowDocument End Sub End Class
Klicken wir nach dem Starten des Projekts auf die Schaltfläche, erhalten wir das Ergebnis aus Bild 1. Hier haben wir noch keine Absatzformate definiert. Die Zeilen, die dem Paragraph-Objekt den Text hinzufügen, können wir auch noch abkürzen durch folgenden Ausdruck:
Bild 1: Erster Beispieltext
objParagraph = New Paragraph(New Run("Dies ist ein erster Absatz."))
Absatz mit Formatierungen
Im zweiten Beispiel wollen wir einen Absatz mit Formatierungen versehen – der Text soll in der Schriftart Calibri in der Größe 24 mit fetter Auszeichnung ausgegeben werden.
Dazu verwenden wir die folgende Methode, die durch die Schaltfläche mit der Beschriftung Text mit Format ausgelöst wird:
Private Sub BtnTextMitFormat_Click(sender As Object, e As RoutedEventArgs) Dim objFlowDocument As FlowDocument Dim objParagraph As Paragraph objFlowDocument = New FlowDocument objParagraph = New Paragraph(New Run("Dies ist ein erster Absatz.")) With objParagraph .FontFamily = New FontFamily("Calibri") .FontSize = 24 .FontWeight = FontWeights.Bold End With objFlowDocument.Blocks.Add(objParagraph) fdp.Document = objFlowDocument End Sub
Das Ergebnis sehen Sie in Bild 2. Die Formatierungen können wir einfach über die Eigenschaften des Paragraph-Objekts zuweisen. Gegenüber Programmiersprachen wie VBA lässt sich hier jedoch nicht in jedem Fall einfach der Name der Schriftart zuweisen, sondern wir müssen dazu neue Objekte erstellen wie FontFamily oder Auflistungen aus Klassen verwenden wie FontWeights.Bold.
Bild 2: Text mit Formatierungen