Page 2 of 2

Re: Imprimir texto enriquecido variable

PostPosted: Fri Nov 17, 2017 4:32 am
by cmsoft
Roberto, aca te dejo el codigo para lo que necesitas, lo unico que le hice un poco de trampa al RTF
Lo que hago es tomar el texto del rtf y le saco el principio y fin de archivo (que lo mire con un editor como el Sublime) donde conte los caracteres que habia en el encabezado y en el fin de archivo. Luego si use el formato que te habia pasado.
Te lo pase a dbf porque entendi que era lo que estabas usando
Code: Select all  Expand view

#include "FiveWin.Ch"

FUNCTION Main()
use clientes
Merge('clientes','TEST1')
RETURN nil
*************************************************
** Armar documento rtf
*************************************************
PROCEDURE Merge(oRs,cDocu)
LOCAL oWord , oDoc, cText := "", cDoc , i, cTextBase, cIniArchivo,cFinArchivo
IF !FILE(hb_CurDrive()+":\"+curdir()+"\"+ALLTRIM(cDocu)+".rtf")
   MsgStop("
El archivo base no existe"+chr(10)+cDoc,"Error")
   RETURN  
ENDIF
cTextBase := MEMOREAD(hb_CurDrive()+"
:\"+curdir()+"\"+ALLTRIM(cDocu)+".rtf") // Leo el RTF
cIniArchivo := LEFT(cTextBase,87+86) // Guardo el encabezado
cFinArchivo := RIGHT(cTextBase,4)    // Guardo el fin de archivo
cTextBase := SUBSTR(cTextBase,87+86,LEN(cTextBase)-87-87-3) // Obtengo el texto RTF sin encabezado ni fin de archivo
DO WHILE !(oRs)->(EOF())
    cText := cText + cTextBase // Voy agregando a cText el texto sin encabezado ni fin
    FOR i := 1 TO (oRs)->(FCount())
        IF VALTYPE((oRs)->(Fieldget(i))) == "
C"
           cText := STRTRAN(ctext,"
<"+(oRs)->(FieldName(i))+">",ALLTRIM((oRs)->(Fieldget(i)))) // Reemplazo los campos, yo reemplazo todos, pero podes decir ue campos reemplazar
        ENDIF
    NEXT i
    (oRs)->(DBSkip())
ENDDO
cText := cIniArchivo + cText + cFinArchivo // Al texto con los reemplazos le pego el inicio y fin de archivo
memowrit( hb_CurDrive()+"
:\"+curdir()+"\"+ALLTRIM(cDocu)+" RESULTADO.rtf", cText ) // Grabo el nuevo texto en un solo archivo
   if   (oWord := WinWordObj() ) == nil
        MsgAlert( "
MS Word no instalado" ,  "Alerta" )        
        else
        oDoc = oWord:Documents:Open(hb_CurDrive()+"
:\"+curdir()+"\"+ALLTRIM(cDocu)+" RESULTADO.RTF")  // Lo abro con Word
        if oDoc == nil
           MsgAlert("
Fallo crear documento, verifique que no este en uso" , "Alerta"  )          
         endif
   endif  
   oDoc:Application:Visible := .t.
RETURN


Es medio medio, pero para lo que vos necesitas te va a servir.
Saludos
PD: Soy Cesar

Re: Imprimir texto enriquecido variable

PostPosted: Fri Nov 17, 2017 1:12 pm
by acuellar
Gracias Cesar

Funciona perfecto.

Re: Imprimir texto enriquecido variable

PostPosted: Fri Nov 17, 2017 8:47 pm
by TOTOVIOTTI
Genio Ídolo Crack!
Muchas gracias!!!!!!!!!!!!!!!!!!!!!!!!!!!

Roberto