RTF to HTML

Rund um die LCL und andere Komponenten
wp_xyz
Beiträge: 5304
Registriert: Fr 8. Apr 2011, 09:01

Re: RTF to HTML

Beitrag von wp_xyz »

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.

Benutzeravatar
theo
Beiträge: 11027
Registriert: Mo 11. Sep 2006, 19:01

Re: RTF to HTML

Beitrag von theo »

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.
Was mir an RichMemo nicht gefällt ist, dass es kein natives Pascal Control 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.

Soner
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

Beitrag von Soner »

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 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.
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.

Moinsen
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

Beitrag von Moinsen »

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.
Hallo wp_wyz,
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.

wp_xyz
Beiträge: 5304
Registriert: Fr 8. Apr 2011, 09:01

Re: RTF to HTML

Beitrag von wp_xyz »

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?

Benutzeravatar
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

Beitrag von fliegermichl »

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.

Moinsen
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

Beitrag von Moinsen »

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 :)
Dateianhänge
rtf.pas
Bitte .pas in .rtf umbenennen
(681 Bytes) 176-mal heruntergeladen

wp_xyz
Beiträge: 5304
Registriert: Fr 8. Apr 2011, 09:01

Re: RTF to HTML

Beitrag von wp_xyz »

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).
Dateianhänge
rtf2html.png
rtf2html.png (108.56 KiB) 190 mal betrachtet

Benutzeravatar
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

Beitrag von fliegermichl »

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:

Code: Alles auswählen

        if (fCurrText = '') then fCurrText += '<br />';
Scheint einwandfrei zu funktionieren.

wp_xyz
Beiträge: 5304
Registriert: Fr 8. Apr 2011, 09:01

Re: RTF to HTML

Beitrag von wp_xyz »

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).
Dateianhänge
NewParagraph_NewLine.rtf
(321 Bytes) 127-mal heruntergeladen
ENTER_vs_SHIFT-ENTER.png
ENTER_vs_SHIFT-ENTER.png (12.66 KiB) 144 mal betrachtet

Benutzeravatar
theo
Beiträge: 11027
Registriert: Mo 11. Sep 2006, 19:01

Re: RTF to HTML

Beitrag von theo »

Hab's nicht angeschaut und will mich auch nicht einmischen. :wink:
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>&nbsp;</p>
<p>&nbsp;</p>
<p>testb</p>

Benutzeravatar
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

Beitrag von fliegermichl »

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.

Dokument in Wordpad
Dokument in Wordpad
wordpad.png (2.83 KiB) 128 mal betrachtet
HTML Export ohne eingefügtes &lt;br /&gt; bei leerem Paragraph
HTML Export ohne eingefügtes <br /> bei leerem Paragraph
htmlexport_ohne_br.png (1.54 KiB) 128 mal betrachtet
HTML Export mit eingefügtem &lt;br /&gt; bei leerem Paragraph
HTML Export mit eingefügtem <br /> bei leerem Paragraph
htmlexport_mit_br.png (1.43 KiB) 128 mal betrachtet

Es geht also nur um zusätzliche Leerzeilen ohne eigenen Inhalt.

Benutzeravatar
theo
Beiträge: 11027
Registriert: Mo 11. Sep 2006, 19:01

Re: RTF to HTML

Beitrag von theo »

Ja, das geht in diese Richtung. Du brauchst aber kein "<BR>", ein "&nbsp;" innerhalb eines leeren Paragraphs reicht und zeigt auch nichts an. Das wäre semantisch korrekter.

wp_xyz
Beiträge: 5304
Registriert: Fr 8. Apr 2011, 09:01

Re: RTF to HTML

Beitrag von wp_xyz »

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
2-Leerzeilen.png (4 KiB) 118 mal betrachtet
2-Leerzeilen.rtf
(228 Bytes) 210-mal heruntergeladen

Moinsen
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

Beitrag von Moinsen »

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 :D ! Großes Kino wp_xyz! Vielen Dank!

Antworten