FlowDocumente mit VB zusammenstellen

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:

Erster Beispieltext

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.

Text mit Formatierungen

Bild 2: Text mit Formatierungen

 

Schreibe einen Kommentar