Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: pippo am 06.08.15 - 12:58:53

Titel: Convert Richtext to HTML
Beitrag von: pippo am 06.08.15 - 12:58:53
Hallo,
wir müssen die Inhalte von Notes-Richtext Feldern in HTML exportieren.

nun habe ich folgende DB RT2HTML mit Code gefunden

dabei wird folgendes verwendet...
'** HERE'S THE TRICK: you have to open the temporary doc
   '** as a uidoc, and then save and close it.
   '** This will convert all the rich text in our MIME field back to
   '** MIME format (which is why the field had to exist as a valid
   '** MIME field on a valid form in the first place, so Notes will
   '** know to convert it back)
   noteID = RefreshDocFields(newDoc)

das funktioniert auch, sofern es wirklich nur einfacher Text ist
aber wer hat denn schon nur einfachen Text
vielfach wird das gar nicht als HTML konvertiert, sondern bleibt als BASE64 hängen
ein Decode davon liefert dann HTML, der auch nicht immer korrekt ist
vielfach macht er einfach KÄSE...

weiterer Ansatz: DXL mit RegExr, es gibt auch eine Klasse dazu
<item name='RichTextField'><richtext>
<pardef id='1'/>
<p><font style='bold' name='Verdana' pitch='variable' truetype='true'
familyid='20'/>pippo 1 heidi</p>
<p><font name='Verdana' pitch='variable' truetype='true' familyid='20'/>Pippo 2 heidi</p>
<p><font style='bold' name='Verdana' pitch='variable' truetype='true'
familyid='20'/>pippo 3 heidi</p>
<p><font style='bold' name='Verdana' pitch='variable' truetype='true'
familyid='20'/></p>
<table widthtype='fitmargins' refwidth='14.0208in'><tablecolumn width='50%'/><tablecolumn
width='50%'/>
<tablerow>
<tablecell>
<pardef id='2' keepwithnext='true' ke

nun müßte man sich das herausfizeln und umschreiben was man braucht
ist auch nicht ganz ohne und fehleranfällig...

wer hatte denn schon diese Anforderung?
oder gibt es gar ein Tool dafür zu kaufen

Schönen TAG



Titel: Re: Convert Richtext to HTML
Beitrag von: Driri am 06.08.15 - 13:03:57
Hast Du schon mal versucht, die DB im Browser zu öffnen und das Dokument von dort als HTML-Seite zu speichern ?

Wenn das Ergebnis ausreicht, ließe sich so eine Aufgabe ggf. auch mit Site Grabbern (glaube so hießen solche Tools) automatisieren. Die gibt es teilweise auch als Browser-Plugins, zumindest für Firefox und Chrome habe ich so etwas schon gesehen.
Titel: Re: Convert Richtext to HTML
Beitrag von: pippo am 06.08.15 - 13:21:40
Hallo,
habe nun weiter gestöbert und folgendes gefunden

hat das schon mal jemand verwendet?

Function GetHtmlFromField(doc As NotesDocument, fieldname As String) As String
    Dim obj
    Set obj = CreateObject("Microsoft.XMLHTTP")
    obj.open "GET", "http://www.metz.dk/shops/tilbud.nsf/0/" + doc.Universalid + "/" + fieldname + "?openfield&charset=utf-8", False, "", ""
    obj.send("")

    Dim html As String
    html = Trim$(obj.responseText)

    GetHtmlFromField = html
End Function
Titel: Re: Convert Richtext to HTML
Beitrag von: Mitch am 06.08.15 - 13:38:51
Wenn du nur die eine Richtung brauchst, dann würde ich den von Driri genannten URL-Ansatz verwenden. Also genau das, was dein letztes Beispiel macht. Wenn du Nicht-Windows-Systeme unterstützen musst, dann nimm Java statt dem MS-Object.

Das klappt relativ gut.

Problematisch wird es, wenn das auch wieder zurück muss. Also RT als HTML auslesen, extern verarbeiten und wieder zurück in RT umwandeln. Davon sollte man um jeden Preis die Finger lassen. :)

Gruß,

Mitch
Titel: Re: Convert Richtext to HTML
Beitrag von: pippo am 06.08.15 - 15:27:14
Hallo,
die Function GetHtmlFromField... funktioniert tatsächlich, kaum zu glauben, auch mit komplexem Text...
sogar die Abschnitte werden gemacht, mit JS...

zum Test hab ich das NotesDoc im Browser angezeit, und Quellcode verglichen
einziger Unterschied: die Abschnitte mit JS...

zurück von HTML nach Notes brauchen wir nicht, da wir Notes abbauen, schade eigentlich  :'(

schön war die Zeit..


Titel: Re: Convert Richtext to HTML
Beitrag von: Thomas Schulte am 14.08.15 - 07:38:17
Ja. Um das aber wirklich sicher zu machen solltst du keinen String verwenden um die Response auszulesen. Sondern einen Stream. Wegen der 64K Grenze. Sonst ist dein Text irgendwann einmal abgeschnitten.