RTF to HTML
Re: RTF to HTML
Ich weiß nicht, eigentlich ist das RichMemo schon sehr gut, man müsste sich nur tiefer damit befassen, dann kriegt man die Benutzeroberfläche sicher besser hin als in meinem Demo. Man kann sogar Bilder einfügen, zumindest in den Fließtext (allerdings weiß ich nicht, ob man sie auch bezüglich der Seite verankern kann). Und dann gibt es ja auch noch das KMemo, das angeblich noch kompletter ist.
Die Extraktion von Daten aus dem RTF ist ein anderes Thema. Ich bin da sehr spezifisch für HTML angegangen, aber vielleicht will jemand ja auch rtf nach pdf, oder nach odt? Da müsste man wieder von vorne anfangen... Da kommt dann die Idee des FPVectorial wieder ins Spiel, die Daten in ein grundlegendes Gerüst einzulesen, aus dem man in beliebigen Zielformaten schreiben kann. Man bräuchte nur einen RTF-Reader für FPVectorial - vielleicht mache ich das mal... Leider hat sich der Schöpfer von FPVectorial vom Lazarus-Team verabschiedet.
Für kleinere Extraktionsaufgaben ist der RTFPars gut geeignet, um z.B. den "Text" oder "alle Bilder" extrahieren.
Die Extraktion von Daten aus dem RTF ist ein anderes Thema. Ich bin da sehr spezifisch für HTML angegangen, aber vielleicht will jemand ja auch rtf nach pdf, oder nach odt? Da müsste man wieder von vorne anfangen... Da kommt dann die Idee des FPVectorial wieder ins Spiel, die Daten in ein grundlegendes Gerüst einzulesen, aus dem man in beliebigen Zielformaten schreiben kann. Man bräuchte nur einen RTF-Reader für FPVectorial - vielleicht mache ich das mal... Leider hat sich der Schöpfer von FPVectorial vom Lazarus-Team verabschiedet.
Für kleinere Extraktionsaufgaben ist der RTFPars gut geeignet, um z.B. den "Text" oder "alle Bilder" extrahieren.
Re: RTF to HTML
Was mir an RichMemo nicht gefällt ist, dass es kein natives Pascal Control ist.wp_xyz hat geschrieben: Mi 7. Jun 2023, 18:18 Ich weiß nicht, eigentlich ist das RichMemo schon sehr gut, man müsste sich nur tiefer damit befassen, dann kriegt man die Benutzeroberfläche sicher besser hin als in meinem Demo. Man kann sogar Bilder einfügen, zumindest in den Fließtext (allerdings weiß ich nicht, ob man sie auch bezüglich der Seite verankern kann). Und dann gibt es ja auch noch das KMemo, das angeblich noch kompletter ist.
Wenn man solche komplexen Widgets (GtkTextView, QTextEdit, RichEdit, NSTextView...) kapselt, kommt auf jeder Plattform etwas anderes heraus oder ggf. auch einfach nicht viel, wie z.B. bei Qt.
Siehe z.B. https://wiki.lazarus.freepascal.org/Ric ... orkArounds
Für Multi-Plattform ist das immer eine wacklige Sache.
KMemo ist da als natives Control schon viel besser.
Ich würde das jedenfalls dem RichMemo vorziehen.
Was ich dort nicht optimal finde ist, dass es sich so eng an RTF orientiert und Plugins für andere Formate anscheinend nicht angedacht sind.
Mein eigener Versuch hatte eine Art DOM-Tree als Rückgrat und dieser konnte durch verschiedene Streamer Plugins (TXT, HTML, ODT, RTF, Natives Format) bestückt und gespeichert werden.
-
- Beiträge: 761
- Registriert: Do 27. Sep 2012, 00:07
- OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
- CPU-Target: x86_64-win64
- Wohnort: Hamburg
Re: RTF to HTML
Ich bin über diesen Beitrag hier gestolpert und das ausprobiert. Ich finde es richtig gut, hut ab. Das sollte man vielleicht bei RichMemo zu Beispielen packen, damit es nicht hier verloren geht.wp_xyz hat geschrieben: Mi 7. Jun 2023, 00:25 Es ist schon Wahnsinn, welches Kleinod man manchmal in den FPC-Verzeichnissen findet. Zu dem Thema dieses Thread passt die Unit RtfPars, die einen weitgehend kompletten Parser von RTF-Dateien zur Verfügung stellt. Hat etwas gedauert, bis ich herausgefunden habe, wie das Ding funktioniert, aber nun konnte ich das Beispiel der vorigen Posts so umschreiben, dass nicht mehr das RichMemo zum Umwandeln nach HTML verwendet wird, sondern eben dieser Parser. Und damit ist die Umwandlung so schnell wie man es erwartet.
Probiere mal das beigefügte Projekt aus. Ein Beispiel-RTF, erstellt vom RichMemo, zeigt, was alles unterstützt wird. Das erstellte HTML passt weitgehend, bis auf die im Memo eingegebenen Leerzeilen - da muss ich bei Gelegenheit nochmals nachfassen. Ich habe mich auch an Tabellen und Bildern versucht, aber ist im RTF so haarsträubend implementiert, dass ich das vorerst aufgegeben habe.
In dem Zip ist auch eine geringfügig überarbeitete Version des Parsers enthalten, denn die FPC-Version ignoriert ein paar Kommandos.
Wenn man jetzt für Tabulator-Zeichen für HTML 8 mal, oder variabel, verwenden würde, dann könnte man eine Tabelle simulieren und wenn man die Bilder wie bei Save Page WE Erweiterung von Firefox einbetten würde, dann wäre es perfekt für Textverarbeitung, die man auch nach HTML exportiert.
-
- Beiträge: 6
- Registriert: Mi 4. Okt 2023, 10:28
- OS, Lazarus, FPC: MacOS 26 mit M3 (Lazarus 3.6 FPC 3.3.1)
- CPU-Target: aarch64-darwin-cocoa
Re: RTF to HTML
Hallo wp_wyz,wp_xyz hat geschrieben: Mi 7. Jun 2023, 00:25 Es ist schon Wahnsinn, welches Kleinod man manchmal in den FPC-Verzeichnissen findet. Zu dem Thema dieses Thread passt die Unit RtfPars, die einen weitgehend kompletten Parser von RTF-Dateien zur Verfügung stellt. Hat etwas gedauert, bis ich herausgefunden habe, wie das Ding funktioniert, aber nun konnte ich das Beispiel der vorigen Posts so umschreiben, dass nicht mehr das RichMemo zum Umwandeln nach HTML verwendet wird, sondern eben dieser Parser. Und damit ist die Umwandlung so schnell wie man es erwartet.
Probiere mal das beigefügte Projekt aus. Ein Beispiel-RTF, erstellt vom RichMemo, zeigt, was alles unterstützt wird. Das erstellte HTML passt weitgehend, bis auf die im Memo eingegebenen Leerzeilen - da muss ich bei Gelegenheit nochmals nachfassen. Ich habe mich auch an Tabellen und Bildern versucht, aber ist im RTF so haarsträubend implementiert, dass ich das vorerst aufgegeben habe.
In dem Zip ist auch eine geringfügig überarbeitete Version des Parsers enthalten, denn die FPC-Version ignoriert ein paar Kommandos.
ich stehe heute vor der gleichen Herausforderung (RTF in HTML umwandeln, um es als Nachrichtentext in einer E-Mail zu nutzen) und bin auf deinen Beitrag gestoßen. Dein Beispiel funktioniert genau wie von dir beschrieben. Toll, vielen Dank für deinen Einsatz!
Leider schaffe ich es mit meinem begrenzten Wissen nicht, die von dir schon geschilderte Fehlersituation der nicht eingefügten Leerzeilen zu beseitigen. Daher sieht der erzeugte HTML-Text nicht schön aus bzw. anders als vom User erwartet. Hast du Muße dich damit noch einmal zu beschäftigen oder kannst mir konkrete Hinweise geben, wie ich das ggf. selbst löse? Bei Letzterem habe ich allerdings nicht so große Hoffnungen, dass ich das umgesetzt bekomme

Ich hoffe, du oder einer der anderen Experten kann mir hier helfen.
Re: RTF to HTML
Keine Ahnung mehr, was ich "damals" vor zwei Jahren gemacht habe... Kannst du vielleicht eine rtf-Datei hochladen, an der sich das von dir beschriebene Problem zeigt, so dass ich wieder reinkomme?
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1697
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: RTF to HTML
Hab da auch mal etwas mit rumgespielt.
Wenn man Leerzeilen nur mit der Entertaste im RTF Editor einträgt, erscheint kein RTFLine Token und wird somit auch nicht als <br /> exportiert.
Macht man es hingegen mit Shift+Entertaste, dann wird es eingefügt.
Wenn man Leerzeilen nur mit der Entertaste im RTF Editor einträgt, erscheint kein RTFLine Token und wird somit auch nicht als <br /> exportiert.
Macht man es hingegen mit Shift+Entertaste, dann wird es eingefügt.
-
- Beiträge: 6
- Registriert: Mi 4. Okt 2023, 10:28
- OS, Lazarus, FPC: MacOS 26 mit M3 (Lazarus 3.6 FPC 3.3.1)
- CPU-Target: aarch64-darwin-cocoa
Re: RTF to HTML
Wie gewünscht als Anlage zum einen meine einfache RTF-Datei sowie die HTML-Ausgabe. Da ich nur *.pas auswählen konnte, habe ich die Dateiendungen umbenannt. Dies müsstest du bitte wieder rückgängig machen.
Der von Fliegermichl beschriebene Ansatz kann ggf. ein Workaround sein, indem ich im Nachgang in der RTF-Datei nach Zeilen suche, die außer dem Return nichts enthalten und dies durch ein Shift-Return ersetze. Eleganter wäre natürlich, wenn der Parser das gleich erledigen würde.
Ich bin gespannt, ob wp_xyz das Problem intern lösen kann
Der von Fliegermichl beschriebene Ansatz kann ggf. ein Workaround sein, indem ich im Nachgang in der RTF-Datei nach Zeilen suche, die außer dem Return nichts enthalten und dies durch ein Shift-Return ersetze. Eleganter wäre natürlich, wenn der Parser das gleich erledigen würde.
Ich bin gespannt, ob wp_xyz das Problem intern lösen kann

- Dateianhänge
-
- rtf.pas
- Bitte .pas in .rtf umbenennen
- (681 Bytes) 176-mal heruntergeladen
Re: RTF to HTML
Weiß nicht, was das Problem ist...
Im Screenshot siehst du links die Datei von WordPad wiedergegeben und rechts den Output von rtf2html in Firefox. Ich hatte in WordPad deine Datei um die "lange Zeile" ergänzt, um zu sehen, wie der Zeilenumbruch innerhalb eines Absatzes dargestellt wird. Sooo schlecht ist das nun auch wieder nicht...
Ein Unterschied ist der andere Font, aber du hast in deiner Datei einen "HelveticaNeue", den es bei mir nicht gibt, und da setzt Firefox (und genauso Chrome und Edge) einen Standard-Font ein.
Was noch ein Problem war, ist, dass das letzte Wort "Dag" in deiner Original-Datei nicht im HTML erschienen ist. Nach der Änderung in Wordpad konnte ich dann sehen, dass deine Datei mit "Dag}" endet, die von WordPad aber mit "Dag\par}". rtf2html hat wegen des fehlenden \par nicht erkannt, dass da noch Text auf Halde liegt und diesen unterschlagen. Ich habe eine Stelle gefunden, wo man das im Programm einbauen kann (--> https://github.com/wp-xyz/rtf2html), und nun müsste es gehen (hoffentlich ohne Nebenwirkungen).
Im Screenshot siehst du links die Datei von WordPad wiedergegeben und rechts den Output von rtf2html in Firefox. Ich hatte in WordPad deine Datei um die "lange Zeile" ergänzt, um zu sehen, wie der Zeilenumbruch innerhalb eines Absatzes dargestellt wird. Sooo schlecht ist das nun auch wieder nicht...
Ein Unterschied ist der andere Font, aber du hast in deiner Datei einen "HelveticaNeue", den es bei mir nicht gibt, und da setzt Firefox (und genauso Chrome und Edge) einen Standard-Font ein.
Was noch ein Problem war, ist, dass das letzte Wort "Dag" in deiner Original-Datei nicht im HTML erschienen ist. Nach der Änderung in Wordpad konnte ich dann sehen, dass deine Datei mit "Dag}" endet, die von WordPad aber mit "Dag\par}". rtf2html hat wegen des fehlenden \par nicht erkannt, dass da noch Text auf Halde liegt und diesen unterschlagen. Ich habe eine Stelle gefunden, wo man das im Programm einbauen kann (--> https://github.com/wp-xyz/rtf2html), und nun müsste es gehen (hoffentlich ohne Nebenwirkungen).
- Dateianhänge
-
- rtf2html.png (108.56 KiB) 190 mal betrachtet
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1697
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: RTF to HTML
Wenn man nur mit der Entertaste eine neue Zeile einfügt, erscheint einfach ein leerer Paragraph \par in der rtf Datei. Bei Shift+Enter erscheint ein \line. Damit müsste doch was anzufangen sein.
Edit: Ich habe mal in urtf2html.pas in der Procedure DoSpecialChar im Case Block bei rtfPar vor dem AddText eingefügt:
Scheint einwandfrei zu funktionieren.
Edit: Ich habe mal in urtf2html.pas in der Procedure DoSpecialChar im Case Block bei rtfPar vor dem AddText eingefügt:
Code: Alles auswählen
if (fCurrText = '') then fCurrText += '<br />';
Re: RTF to HTML
Ich verstehe immer noch nicht, worum es eigentlich geht...
Wenn ich mit WordPad ein rtf mit mehreren Zeilen erstelle, die mit ENTER getrennt sind, und wenn ich bei einer Zeile SHIFT+ENTER drücke, sehen die beiden Stellen unterschiedlich aus. ENTER erzeugt einen neuen Absatz, der einen größeren Abstand zum vorigen Absatz erhält. SHIFT+ENTER dagegen beginnt nur eine neue Zeile im selben Absatz, der Zeilenabstand ändert sich nicht. Meiner Meinung nach ist das Verhalten völlig in Ordnung und wird genauso in allen Textverarbeitungsprogrammen so gehandhabt, die ich kenne. Ist es das, was dich stört? Und selbst wenn: das hat nichts mit dem rtf2html-Tool zu tun. Wenn ich den so erzeugten Text hiermit nach html konvertiere, wird die html-Datei von Firefox genauso angezeigt wie die rtf-Datei von WordPad. Mehr soll das Tool nicht leisten.
Im Screenshot ist links rtf (WordPad) und rechts html (Firefox).
Wenn ich mit WordPad ein rtf mit mehreren Zeilen erstelle, die mit ENTER getrennt sind, und wenn ich bei einer Zeile SHIFT+ENTER drücke, sehen die beiden Stellen unterschiedlich aus. ENTER erzeugt einen neuen Absatz, der einen größeren Abstand zum vorigen Absatz erhält. SHIFT+ENTER dagegen beginnt nur eine neue Zeile im selben Absatz, der Zeilenabstand ändert sich nicht. Meiner Meinung nach ist das Verhalten völlig in Ordnung und wird genauso in allen Textverarbeitungsprogrammen so gehandhabt, die ich kenne. Ist es das, was dich stört? Und selbst wenn: das hat nichts mit dem rtf2html-Tool zu tun. Wenn ich den so erzeugten Text hiermit nach html konvertiere, wird die html-Datei von Firefox genauso angezeigt wie die rtf-Datei von WordPad. Mehr soll das Tool nicht leisten.
Im Screenshot ist links rtf (WordPad) und rechts html (Firefox).
- Dateianhänge
-
NewParagraph_NewLine.rtf
- (321 Bytes) 127-mal heruntergeladen
-
- ENTER_vs_SHIFT-ENTER.png (12.66 KiB) 144 mal betrachtet
Re: RTF to HTML
Hab's nicht angeschaut und will mich auch nicht einmischen.
Kann es vielleicht sein, dass das Missverständnis daher kommt, dass HTML mehrere leere Paragraphs hintereinander ignoriert (ohne weitere CSS Angaben)?
z.B. Dieses Bsp. gibt nicht den gleichen vertikalen Abstand für den letzten Absatz.

Kann es vielleicht sein, dass das Missverständnis daher kommt, dass HTML mehrere leere Paragraphs hintereinander ignoriert (ohne weitere CSS Angaben)?
z.B. Dieses Bsp. gibt nicht den gleichen vertikalen Abstand für den letzten Absatz.
Code: Alles auswählen
<p>testa</p>
<p>testa</p>
<p> </p>
<p> </p>
<p>testa</p>
<p>testb</p>
<p>testb</p>
<p> </p>
<p> </p>
<p>testb</p>
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1697
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: RTF to HTML
Ich habe ein kleines Dokument in Wordpad gemacht. Nach dem Zeilenumbruch nach 2 habe ich extra nochmal Enter gedrückt, um eine weitere leere Zeile zu bekommen.
Bei dem Export ohne das zusätzliche <br /> wird das ignoriert.
Es geht also nur um zusätzliche Leerzeilen ohne eigenen Inhalt.
Bei dem Export ohne das zusätzliche <br /> wird das ignoriert.
Es geht also nur um zusätzliche Leerzeilen ohne eigenen Inhalt.
Re: RTF to HTML
Ja, das geht in diese Richtung. Du brauchst aber kein "<BR>", ein " " innerhalb eines leeren Paragraphs reicht und zeigt auch nichts an. Das wäre semantisch korrekter.
Re: RTF to HTML
Kann ich nicht bestätigen (im Screenshot: rtf links, html rechts). Verwendest du dieselbe Version des rtf2html-Programms wie ich? Die, die ich einmal im Forum gepostet habe, ist nicht up-to-date. Aktuell ist die auf meinem github (Link ein paar Posts weiter oben)
- Dateianhänge
-
- 2-Leerzeilen.png (4 KiB) 118 mal betrachtet
-
2-Leerzeilen.rtf
- (228 Bytes) 210-mal heruntergeladen
-
- Beiträge: 6
- Registriert: Mi 4. Okt 2023, 10:28
- OS, Lazarus, FPC: MacOS 26 mit M3 (Lazarus 3.6 FPC 3.3.1)
- CPU-Target: aarch64-darwin-cocoa
Re: RTF to HTML
Vielen Dank für eure Beiträge! Fliegermichl hatte das gleiche Problem wie ich. Aber mit der neuen Version des Parsers von wp_xyz aus seinem Github-Repository funktioniert es perfekt
! Großes Kino wp_xyz! Vielen Dank!
