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
Tabelle mit Elementen erstellen
Das Erstellen einer einfachen Tabelle ist schon etwas aufwendiger. Schauen wir uns ein einfaches Beispiel an.
Dazu wollen wir die Tabelle aus Bild 3 erstellen – also eine Tabelle mit drei Spalten und vier Zeilen sowie Inhalt und Rahmenlinien.
Bild 3: Erstellen einer einfachen Tabelle
Wir deklarieren zunächst einige Variablen, die wir für die Erstellung der Tabelle benötigen sowie die zwei Laufvariablen i und j, mit denen wir die Zeilen und Spalten zum Erstellen der Zellen durchlaufen wollen:
Private Sub BtnTabelle_Click(sender As Object, e As RoutedEventArgs) Dim objFlowDocument As FlowDocument Dim objTable As Table Dim objTableColumn As TableColumn Dim objTableRowGroup As TableRowGroup Dim objTableRow As TableRow Dim objTableCell As TableCell Dim objParagraph As Paragraph Dim i As Integer Dim j As Integer
Dann erstellen wir ein neues FlowDocument– und ein neues Table-Element. Das Table-Element fügen wir über die Add-Methode der Blocks-Auflistung zum FlowDocument hinzu:
objFlowDocument = New FlowDocument objTable = New Table objFlowDocument.Blocks.Add(objTable)
Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Visual Basic Entwickler:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 200 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein: