17.05 Einbinden von formatierten Textbausteinen (RTF)
In den infra-Textbausteintabellen BUCHTEXT (Datei 37), TEXTE1 (Datei 46) und TEXT (Datei 114) können Textbausteine auch im RTF-Format gespeichert sein. Um diese Texte zum Beispiel mit Crystal Reports korrekt formatiert und lesbar ausgeben zu können, muss der Report so gestaltet werden, dass zunächst alle zu einem Textbaustein gehörenden Zeilen aus der SQL-Datenbank gelesen werden, bevor der zusammengebaute Text ausgegeben werden kann. Dazu muss beim Auslesen der einzelnen Textzeilen über eine kleine Formel der vollständige Text zusammengebaut werden. Das passiert durch einfaches Aneinandererreihen (Konkatenieren) der einzelnen Textzeilenelemente. Als Besonderheit ist zu beachten, dass in der ersten Textzeile die Zeichenkette "$RTF$" enthalten ist, um den Beginn des eigentlichen RTF-Codes zu markieren. Das heißt der als RTF-Text auszugebende Text beginnt erst hinter dieser Zeichenkette – vor der Zeichenkette stehen bis zu 80 Zeichen normaler Text, der bei der RTF-Ausgabe ignoriert werden kann. Das Ergebnis der Konkatenier-Formel muss in einem Textfeld des Berichts ausgegeben werden. Bei diesem Textfeld ist unter "Feld formatieren" bei Textinterpretation "RTF-Text" einzustellen.
Die Konkatenier-Formel für die Textzusammenstellung sieht so aus:
WhileReadingRecords
Global TextIstRTF As Boolean
Global Text As String
Dim Anfang As Number
if {TEXTE1.Zeile} = 1 then
'1.Textzeile behandeln, Text merken
'und Texttyp identifizieren
Text = {TEXTE1.Text}
Anfang = Instr(Text,"$RTF$")
if Anfang > 0 then
'Text liegt im RTF-Format vor
TextIstRTF = true
'nur den reinen RTF-Code aus der Formel zurückgeben
Anfang = Anfang + 5
else
'normaler Text ohne RTF
TextIstRTF = false
Anfang = 1
end if
Formula = Mid(Text,Anfang)
else
'alle folgenden Textzeilen behandeln
'und Text zusammensetzen
if Not TextIstRTF then
'wenn kein RTF, dann Zeilenvorschub nach jeder Textzeile
Text = Text + CHR(13) + {TEXTE1.Text}
Anfang = 1
else
'wenn RTF, dann Text einfach anhängen
Text = Text + {TEXTE1.Text}
'nur den reinen RTF-Code aus der Formel zurückgeben
Anfang = Instr(Text,"$RTF$")
if Anfang > 0 then
Anfang = Anfang + 5
else
Anfang = 1
end if
end if
Formula = Mid(Text,Anfang)
end if
Es ist zu beachten, dass diese Formel für jede gelesene Textzeile der Textbausteindatei ausgeführt werden muss – daher das Schlüsselwort "WhileReadingRecords".
Im Verzeichnis .\INFRA\GRAFIK\EXTERN\BERICHTE befindet sich ein Beispielreport RTFText.rpt, der den Einsatz dieser Formel demonstriert.
Mit Hilfe dieser Formel lassen sich auch Anwendungsfälle außerhalb von Crystal Reports lösen, wenn es darum geht, formatierte RTF-Texte aus der infra-SQL-Datenbank in anderen Anwendungen zu verwenden. Voraussetzung ist dafür einerseits die Möglichkeit, eigene Formeln oder Scripts zum Beispiel in Visual Basic verwenden zu können. Andererseits muss die jeweilige Software das RTF-Format unterstützen, um die Formatierungen interpretieren und darstellen zu können.
