RichText : Formato RTF a HTML

308 views
Skip to first unread message

Luis Mata Figueroa

unread,
Jul 30, 2014, 11:43:25 AM7/30/14
to publice...@googlegroups.com
Buenas

Existe alguna manera de guardar texto enriquecido de RichText en formato
HTML, lo que estoy haciendo es guardar datos con texto enriquecido desde
VFP pero mostrarlos tal cual en la web.

En la BD se guarda asi:

{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 Arial;}}
{\colortbl ;\red255\green0\blue0;}
\viewkind4\uc1\pard\lang1033\b\fs52 Type your Rich Text here.
\par \b0\fs18
\par \cf1\b Hola\cf0\b0
\par }

Alguien conoce como??

Luis Mata

Carlos Miguel FARIAS

unread,
Jul 31, 2014, 8:15:35 AM7/31/14
to Grupo Fox
No se si habrá algún convertidor directo de tu formato RTF a HTML
En html hay varias formas de indicar propiedades de formato de texto, ya sea con tags específicos de html o mejor con hojas de estilo en CSS.
Luego las partes de texto con diferentes estilos las "envolves" por ejemplo en un <span class=tuclase>tu texto con un formato</span> y en el CSS creas tuclase {propiedades de formateo}. Luego el html deberá incluir una instrucción para cargar el archivo CSS con tus estilos.
Otra forma más burda sería algo asi como <span style="formato1; formato2; etc;">tu texto</span>
donde formato1, etc. representan alguna clausula de CSS de formateo.
Este último caso, es más fácil de generar, pero puede producir documentos más grandes, al no reaprovechar formatos idénticos en distintas partes del texto de origen.
Saludos: Miguel, La Pampa (RA)

Daniel Sánchez

unread,
Jul 31, 2014, 6:43:45 PM7/31/14
to Comunidad de Visual Foxpro en Español
Este código trabaja con el ocx de texto enriquecido mas conocido como richtext, como veras hace referencia al objeto ocx y cada uno de sus elementos, por eso lo uso con la barra de herramientas de  richtext, te adjunto el código y la clase que contiene el código para que lo puedas emplear junto con tu objeto ocx richtext

Local LCHTML As String, LCCOLOR As String, LCSHARP As String, LCALIGN As String, LCFONT As String, LCTMPCOLOR As String, LCTMPLINK As String, LCCHARSET As String, LCCODEASCII As String, LCCURCHAR As String, LCCURHIGHLIGHTCOLOR As String
Local LNORIGSTART As Integer, LNORIGLENGTH As Integer, LNCHARINDEX As Integer, LNALIGN As Integer, LNFONTSIZE As Integer, LINDEX As Integer, LNENDLINK As Integer, LNSTARTLINK As Integer, LNRTFCOLORS As Integer, LNCURHIGHLIGHTINDEX As Integer, LNDANGLINGSPAN As Integer
Local LLBOLD As LOGICAL, LLITALIC As LOGICAL, LLUNDERLINE As LOGICAL, LLWARNUSER As LOGICAL, LLSTRIKED As LOGICAL, LLBULLET As LOGICAL, LLHIGHLIGHT As LOGICAL, LLSTYLECHANGE As LOGICAL, LLSUBSCRIPT As LOGICAL, LLSUPERSCRIPT As LOGICAL
Local LOOCX As OleControl
Local LACOLORTBL[1]
LLWARNUSER = .T.
LCCURHIGHLIGHTCOLOR = ""
LNDANGLINGSPAN = 0
LOOCX = This.OOLERTF
If Len(LOOCX.Text)>0
LCSHARP = "#"
LNORIGSTART = 0
LNGORIGLENGTH = Len(LOOCX.Text)
LOOCX.SelStart = 0
LOOCX.SelLength = 1
LCHTML = ""
LCCOLOR = Right("000000"+Substr(Transform(LOOCX.SELCOLOR, "@0"), 3), 6)
LCCOLOR = Right(LCCOLOR, 2)+Substr(LCCOLOR, 3, 2)+Left(LCCOLOR, 2)
LLBOLD = LOOCX.SELBOLD
LLITALIC = LOOCX.SELITALIC
LLUNDERLINE = LOOCX.SELUNDERLINE
LLSTRIKED = LOOCX.SELSTRIKETHRU
LLSUBSCRIPT = LOOCX.SELCHAROFFSET<0
LLSUPERSCRIPT = LOOCX.SELCHAROFFSET>0
LLBULLET = .F.
LLHIGHLIGHT = Atc('\highlight', LOOCX.SELRTF)>0
LCFONT = LOOCX.SELFONTNAME
LNFONTSIZE = LOOCX.SELFONTSIZE
LNALIGN = LOOCX.SELALIGNMENT
LCALIGN = Icase(LOOCX.SELALIGNMENT=0, 'Left', LOOCX.SELALIGNMENT=1, 'Right', LOOCX.SELALIGNMENT=2, 'Center', 'Left')
LCHTML = LCHTML+'<div align="'+LCALIGN+'">'
LCHTML = LCHTML+'<span style="font-family: '+LCFONT+'; font-size: '+Transform(LNFONTSIZE)+'pt; color: '+LCSHARP+Left(LCCOLOR, 6)+'">'
LCHTML = LCHTML+Iif(LLBOLD, '<b>', "")+Iif(LLITALIC, '<i>', "")+Iif(LLUNDERLINE, '<u>', "")+Iif(LLSTRIKED, '<del>', "")
LNCHARINDEX = 0
Do While LNCHARINDEX<=Len(LOOCX.Text)
LNCHARINDEX = LNCHARINDEX+1
LOOCX.SelStart = LNCHARINDEX-1
LOOCX.SelLength = 1
If Len(LOOCX.SelText)>0
If Asc(LOOCX.SelText)=32 .And. LLWARNUSER
If Atc(LOOCX.SELRTF, "\pict\")>0
If LLWARNUSER
Messagebox("Warning! Images are ignored!!!", 48, "Warning")
Endif
Endif
Endif
Endif
LCTMPCOLOR = Right("000000"+Substr(Transform(LOOCX.SELCOLOR, "@0"), 3), 6)
LCTMPCOLOR = Right(LCTMPCOLOR, 2)+Substr(LCTMPCOLOR, 3, 2)+Left(LCTMPCOLOR, 2)
LLSTYLECHANGE = LCTMPCOLOR<>LCCOLOR .Or. LOOCX.SELFONTNAME<>LCFONT .Or. LOOCX.SELFONTSIZE<>LNFONTSIZE .Or. LOOCX.SELALIGNMENT<>LNALIGN
If LOOCX.SELCHAROFFSET>=0
If LLSUBSCRIPT
LCHTML = LCHTML+"</sub>"
Endif
Endif
If LOOCX.SELCHAROFFSET<=0
If LLSUPERSCRIPT
LCHTML = LCHTML+"</sup>"
Endif
Endif
If LOOCX.SELSTRIKETHRU<>LLSTRIKED
If LLSTRIKED
LCHTML = LCHTML+'</del>'
Endif
Endif
If LOOCX.SELUNDERLINE<>LLUNDERLINE
If LLUNDERLINE
LCHTML = LCHTML+"</u>"
Endif
Endif
If LOOCX.SELITALIC<>LLITALIC
If LLITALIC
LCHTML = LCHTML+"</i>"
Endif
Endif
If LOOCX.SELBOLD<>LLBOLD
If LLBOLD
LCHTML = LCHTML+"</b>"
Endif
Endif
If  .Not. LLSTYLECHANGE
If LLHIGHLIGHT .And. Atc('\highlight', LOOCX.SELRTF)>0
LNCURHIGHLIGHTINDEX = Val(Strextract(LOOCX.SELRTF, '\highlight', ' '))
LNRTFCOLORS = This._GET_COLORTBL(Strextract(LOOCX.SELRTF, '{\colortbl ;', '}', 1), @LACOLORTBL)
If  .Not. LCCURHIGHLIGHTCOLOR=LACOLORTBL(LNCURHIGHLIGHTINDEX, 2)
LCHTML = LCHTML+Iif( .Not. Empty(LCCURHIGHLIGHTCOLOR), '</span>', "")
LLHIGHLIGHT = .F.
Endif
Endif
If LLHIGHLIGHT<>(Atc('\highlight', LOOCX.SELRTF)>0)
If  .Not. LLHIGHLIGHT
LNCURHIGHLIGHTINDEX = Val(Strextract(LOOCX.SELRTF, '\highlight', ' '))
LNRTFCOLORS = This._GET_COLORTBL(Strextract(LOOCX.SELRTF, '{\colortbl ;', '}', 1), @LACOLORTBL)
If LNCURHIGHLIGHTINDEX>0 .And. LNCURHIGHLIGHTINDEX<=LNRTFCOLORS
LCHTML = LCHTML+'<span style="background-color: '+LACOLORTBL(LNCURHIGHLIGHTINDEX, 1)+'">'
LCCURHIGHLIGHTCOLOR = LACOLORTBL(LNCURHIGHLIGHTINDEX, 2)
Endif
LLHIGHLIGHT = .T.
Endif
If LLHIGHLIGHT .And. Atc('\highlight', LOOCX.SELRTF)=0
LCHTML = LCHTML+'</span>'+Replicate('</span>', LNDANGLINGSPAN)
LLHIGHLIGHT = .F.
LNDANGLINGSPAN = 0
Endif
Endif
Else
If LLBOLD .And. LOOCX.SELBOLD
LCHTML = LCHTML+"</b>"
LLBOLD = .F.
Endif
If LLITALIC .And. LOOCX.SELITALIC
LCHTML = LCHTML+"</i>"
LLITALIC = .F.
Endif
If LLUNDERLINE .And. LOOCX.SELUNDERLINE
LCHTML = LCHTML+"</u>"
LLUNDERLINE = .F.
Endif
If LLSTRIKED .And. LOOCX.SELSTRIKETHRU
LCHTML = LCHTML+'</del>'
LLSTRIKED = .F.
Endif
LCHTML = LCHTML+Iif(LLHIGHLIGHT, "", "</span>")
LNDANGLINGSPAN = LNDANGLINGSPAN+Iif(LLHIGHLIGHT, 1, 0)
If LOOCX.SELALIGNMENT<>LNALIGN
LCALIGN = Icase(LOOCX.SELALIGNMENT=0, 'Left', LOOCX.SELALIGNMENT=1, 'Right', LOOCX.SELALIGNMENT=2, 'Center', 'Left')
LCHTML = LCHTML+'</div><div align="'+LCALIGN+'">'
Endif
LCHTML = LCHTML+'<span style="font-family: '+LOOCX.SELFONTNAME+'; font-size: '+Transform(LOOCX.SELFONTSIZE)+'pt; color: '+LCSHARP+LCTMPCOLOR+'">'
If LLHIGHLIGHT .And. Atc('\highlight', LOOCX.SELRTF)>0
LNCURHIGHLIGHTINDEX = Val(Strextract(LOOCX.SELRTF, '\highlight', ' '))
LNRTFCOLORS = This._GET_COLORTBL(Strextract(LOOCX.SELRTF, '{\colortbl ;', '}', 1), @LACOLORTBL)
If  .Not. LCCURHIGHLIGHTCOLOR=LACOLORTBL(LNCURHIGHLIGHTINDEX, 2)
LCHTML = LCHTML+Iif( .Not. Empty(LCCURHIGHLIGHTCOLOR), '</span>', "")
LLHIGHLIGHT = .F.
Endif
Endif
If LLHIGHLIGHT<>(Atc('\highlight', LOOCX.SELRTF)>0)
If  .Not. LLHIGHLIGHT
LNCURHIGHLIGHTINDEX = Val(Strextract(LOOCX.SELRTF, '\highlight', ' '))
LNRTFCOLORS = This._GET_COLORTBL(Strextract(LOOCX.SELRTF, '{\colortbl ;', '}', 1), @LACOLORTBL)
If LNCURHIGHLIGHTINDEX>0 .And. LNCURHIGHLIGHTINDEX<=LNRTFCOLORS
LCHTML = LCHTML+'<span style="background-color: '+LACOLORTBL(LNCURHIGHLIGHTINDEX, 1)+'">'
LCCURHIGHLIGHTCOLOR = LACOLORTBL(LNCURHIGHLIGHTINDEX, 2)
Endif
LLHIGHLIGHT = .T.
Endif
If LLHIGHLIGHT .And. Atc('\highlight', LOOCX.SELRTF)=0
LCHTML = LCHTML+'</span>'
LLHIGHLIGHT = .F.
Endif
Endif
Endif
If  .Not. LLBULLET .And. LOOCX.SELBULLET
LCHTML = LCHTML+'<li>'
LLBULLET = LOOCX.SELBULLET
Else
If LLBULLET .And.  .Not. LOOCX.SELBULLET
LLBULLET = LOOCX.SELBULLET
Endif
Endif
If LOOCX.SelText=Chr(10) .Or. Len(LOOCX.SelText)=0
LCHTML = LCHTML+"<br />"+Chr(13)+Chr(10)
LLBULLET = .F.
LNCHARINDEX = LNCHARINDEX+1
Endif
If LOOCX.SELBOLD<>LLBOLD
If LOOCX.SELBOLD
LCHTML = LCHTML+"<b>"
Endif
Endif
If LOOCX.SELITALIC<>LLITALIC
If LOOCX.SELITALIC
LCHTML = LCHTML+"<i>"
Endif
Endif
If LOOCX.SELUNDERLINE<>LLUNDERLINE
If LOOCX.SELUNDERLINE
LCHTML = LCHTML+"<u>"
Endif
Endif
If LOOCX.SELSTRIKETHRU<>LLSTRIKED
If LOOCX.SELSTRIKETHRU
LCHTML = LCHTML+'<del>'
Endif
Endif
If LLSUBSCRIPT<>(LOOCX.SELCHAROFFSET<0)
If LOOCX.SELCHAROFFSET<0
LCHTML = LCHTML+"<sub>"
Endif
Endif
If LLSUPERSCRIPT<>(LOOCX.SELCHAROFFSET>0)
If LOOCX.SELCHAROFFSET>0
LCHTML = LCHTML+"<sup>"
Endif
Endif
If Len(LOOCX.SelText)>0
If Atc("\ul\", LOOCX.SELRTF)>0 .And. Atc(Substr(LOOCX.Text, LNCHARINDEX+1), ">")>0
If Atc(Substr(LOOCX.Text, LNCHARINDEX+1), ">")<Atc(Substr(LOOCX.TEXTRTF, LNCHARINDEX+1), "\ulnone")
LNENDLINK = Atc(Substr(LOOCX.Text, LNCHARINDEX+1), ">")
LNSTARTLINK = Atc(Substr(LOOCX.Text, LNCHARINDEX+1), "<")
For LINDEX = LNCHARINDEX To LNENDLINK
LOOCX.SelStart = (LINDEX-1)
LOOCX.SelLength = 1
If Atc("\ul\", LOOCX.SELRTF)<=0
Exit
Endif
Endfor
LOOCX.SelStart = (LNCHARINDEX-1)
LOOCX.SelLength = 1
If LINDEX=LNLOOP
LCTMPLINK = Substr(LOOCX.Text, LNCHARINDEX, LNENDLINK-LNCHARINDEX)
LCTMPLINK = Substr(LCTMPLINK, Atc("<", LCTMPLINK)+1)
LCHTML = LCHTML+'<a href="'+LCTMPLINK+'" target = "_blank">'+Substr(LOOCX.Text, LNCHARINDEX, LNSTARTLINK-LNCHARINDEX)+'</a>'
Endif
Endif
Else
If LOOCX.SelText="?" .And. Atc(" ?}", LOOCX.SELRTF)=0
If Atc("\'", LOOCX.SELRTF)>0
LCCODEASCII = Strextract(LOOCX.SELRTF, "\'", ")", 1)
LCCODEASCII = "&h0"+LCCODEASCII
Else
LCCODEASCII = Substr(LOOCX.SELRTF, Atc("?}", LOOCX.SELRTF)-5, 5)
Endif
LCHTML = LCHTML+"&#"+Transform(Val(LCCODEASCII))+";"
LNCHARINDEX = LNCHARINDEX+1
Else
LCCURCHAR = LOOCX.SelText
Do Case
Case LCCURCHAR="<"
LCHTML = LCHTML + [&lt;]
Case LCCURCHAR=">"
LCHTML = LCHTML + [&gt;]
Case LCCURCHAR='"'
LCHTML = LCHTML + [&quot;]
Case Inlist(LCCURCHAR, Chr(13), Chr(10))
Case LCCURCHAR=" "
If Right(LCHTML, 1)=" "
LCHTML = Left(LCHTML, Len(LCHTML) - 1) + "&nbsp;&nbsp;"
Else
If Right(LCHTML, 6) = "&nbsp;" Or LOOCX.SelStart < 1
LCHTML = LCHTML + "&nbsp;"
Else
LCHTML = LCHTML+" "
Endif
Endif
Otherwise
LCHTML = LCHTML+LCCURCHAR
Endcase
Endif
Endif
Endif
LCCOLOR = Right("000000"+Substr(Transform(LOOCX.SELCOLOR, "@0"), 3), 6)
LCCOLOR = Right(LCCOLOR, 2)+Substr(LCCOLOR, 3, 2)+Left(LCCOLOR, 2)
LLBOLD = LOOCX.SELBOLD
LLITALIC = LOOCX.SELITALIC
LLUNDERLINE = LOOCX.SELUNDERLINE
LLSTRIKED = LOOCX.SELSTRIKETHRU
LLSUBSCRIPT = LOOCX.SELCHAROFFSET<0
LLSUPERSCRIPT = LOOCX.SELCHAROFFSET>0
LCFONT = LOOCX.SELFONTNAME
LNFONTSIZE = LOOCX.SELFONTSIZE
LNALIGN = LOOCX.SELALIGNMENT
LCALIGN = Icase(LOOCX.SELALIGNMENT=0, 'Left', LOOCX.SELALIGNMENT=1, 'Right', LOOCX.SELALIGNMENT=2, 'Center', 'Left')
This.AFTER_CHARACTER(LNCHARINDEX)
Enddo
LCHTML = LCHTML+Iif(LLSTRIKED, '</del>', "")+Iif(LLBOLD, "</b>", "")+Iif(LLITALIC, "</i>", "")+Iif(LLUNDERLINE, "</u>", "")
LCHTML = LCHTML+'</span></div>'
LOOCX.SelStart = LNORIGSTART
LOOCX.SelLength = LNORIGLENGTH
Else
LCHTML = ""
Endif
Return LCHTML

Imágenes integradas 1
en este caso lo uso para enviar correos con cdo, el texto enriquecido lo paso a htlm y llega casi tal cual, obviamente que no puede insertar imágenes en el resultado htlm, pero por lo demás tu texto sera 95-99% igual.

Saludos

--
Daniel Sánchez Escobar
Investigación y Desarrollo
Reset Software & Sistemas
Móvil +051-949398047
Trujillo - Perú
rtfcontrols.rar

Daniel Sánchez

unread,
Jul 31, 2014, 6:45:40 PM7/31/14
to Comunidad de Visual Foxpro en Español
Un detalle que me falto aclarar, el código presentado lo ubique en una de esas tantas búsquedas que uno va haciendo por google hasta que lo encuentra, toma su tiempo, y hay que tener paciencia y buen humor.

Saludos

Luis Mata Figueroa

unread,
Jul 31, 2014, 6:46:29 PM7/31/14
to publice...@googlegroups.com
Gracias Douglas lo voy a probar..

Luis Mata

Daniel Sánchez

unread,
Jul 31, 2014, 6:47:13 PM7/31/14
to Comunidad de Visual Foxpro en Español
Luis Mata siempre me confundes con Douglas.

Saludos

Luis Mata Figueroa

unread,
Jul 31, 2014, 6:47:30 PM7/31/14
to publice...@googlegroups.com
Disculpa por cambiarte el nombre, gracias Daniel.

Luis Mata
Reply all
Reply to author
Forward
0 new messages