RTF in Plaintext wandeln

Hier kann über alles was mit E-Rechnungen zu tun hat geredet werden
Antworten
Benutzeravatar
ssemleit
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 178
Registriert: Di, 08. Mär 2016 11:32
Hat sich bedankt: 20 Mal
Danksagung erhalten: 33 Mal

RTF in Plaintext wandeln

Beitrag von ssemleit »

Hallo,

für Positionstexte oder auch Freitexte einer Rechnung werden oft RTF-Texte verwendet.
Beim Export als E-Rechnung müssen die Texte als Plaintext umgewandelt werden, damit die Daten valide sind.

Eine Möglichkeit wäre so:

Code: Alles auswählen

oEdit := XbpRTF():new(NIL,NIL,NIL,NIL,NIL,.F.):create()
oEdit:textRTF := cRTF
cText := oEdit:text
oEdit:destroy()
Das wird auch in einem Dienst benötigt und scheint auch, also ohne GUI, zu funktionieren.
Ich würde das XbpRTF dann aber einmal erzeugen und dann bei Bedarf immer nur :textRTF setzen und :text auslesen.

Wie macht Ihr das? Verwendet Ihr andere Konstrukte um RTF in Plaintext zu wandeln?
Gruß
Stefan
Benutzeravatar
Marcus Herz
Programmier-Gott
Programmier-Gott
Beiträge: 1013
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 49 Mal
Danksagung erhalten: 246 Mal
Kontaktdaten:

Re: RTF in Plaintext wandeln

Beitrag von Marcus Herz »

Ich hab auch sowas mal benötigt. Im Prinzip fangen alle RTF Tags mit einem \ an. Dann bis zum nächsten Blank entfernen.
Den Xbase Code finde ich auf die Schnelle nicht mehr.
Aber das ganze als SQL, musst halt umschreiben

Code: Alles auswählen

declare @pos integer;
declare @pos2 integer;
declare @text string;

if left(string,2) = '{\' then
    string = substring( string, 2, length(trim(string))-3);

    @pos = position('}' in string );
    while @pos > 0 do
      string = substring( string, @pos+1, length(string));
      @pos = position('}' in string );
      @pos2 = position('}' in substring( string, @pos+1, length(string)) );
      if @pos2 = 0 then
            leave;
        end if;
    end while;

    string = replace(string, '\''e4', 'ä');
    string = replace(string, '\''f6', 'ö');
    string = replace(string, '\''fc', 'ü');
    string = replace(string, '\''c4', 'Ä');
    string = replace(string, '\''d6', 'Ö');
    string = replace(string, '\''dc', 'Ü');
    string = replace(string, '\''df', 'ß');
    string = replace(string, '\par }', '');
    string = replace(string, '\fs17', '');

    @pos = position('\' in string );
    @text = '';
    while @pos > 0 do
      string = substring( string, @pos+1, length(string));
      @pos = position(' ' in string );
      string = substring( string, @pos+1, length(string));
      if @pos > 0 then
          @text = @text + left(string, @pos -1 );
      else
         leave;
      end if;
      @pos = position('\' in string );
    end while;
    return (@text);
end if;
return(string);


Gruß Marcus

Den Kopf in den Sand zu stecken rettet die Welt auch nicht.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9877
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 138 Mal
Danksagung erhalten: 470 Mal
Kontaktdaten:

Re: RTF in Plaintext wandeln

Beitrag von Tom »

Wie macht Ihr das?
So ähnlich wie Du (ChatGPT schlägt das auch vor), aber mit dem TX Text Control (ActiveX). Bei interner Erfassung auch formatierter Texte (mit TX Text Control) speichere ich (meistens in Tabellen) grundsätzlich drei Varianten - RTF, HTML und plain Text.
Herzlich,
Tom
Benutzeravatar
ssemleit
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 178
Registriert: Di, 08. Mär 2016 11:32
Hat sich bedankt: 20 Mal
Danksagung erhalten: 33 Mal

Re: RTF in Plaintext wandeln

Beitrag von ssemleit »

Danke für die Vorschläge.
TX Textcontrol habe ich auch an Board.
Beim Vergleich der Laufzeit TextControl<>XbpRTF ist das XbpRTF bei der Konvertierung ca. um Faktor 10 schneller.
Da ich die Texte nicht in mehreren Varianten ablegen möchte und die Konvertierung erst bei der Ausgabe mache, werde ich zunächst das XbpRTF verwenden.
Gruß
Stefan
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9877
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 138 Mal
Danksagung erhalten: 470 Mal
Kontaktdaten:

Re: RTF in Plaintext wandeln

Beitrag von Tom »

Im Prinzip fangen alle RTF Tags mit einem \ an. Dann bis zum nächsten Blank entfernen.
Das stimmt nur bei sehr einfachen Vorlagen. Wenn beispielsweise Schriftarten definiert oder eingebettet werden, oder es werden RTF-Stylesheets verwendet, ist man mit dieser Methode schnell am Limit. Dann gibt es auch noch Kommentare und eingebettete Keywords und weiß der Geier was noch alles ...
Herzlich,
Tom
Antworten

Zurück zu „E-Rechnungen“