infra:NET Expert
 
×
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.