Imprimir texto enriquecido variable

User avatar
TOTOVIOTTI
Posts: 430
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina
Has thanked: 5 times

Imprimir texto enriquecido variable

Post by TOTOVIOTTI »

Hola Amigos!
Estoy necesitando imprimir con TPrinter, un texto variable, que pueda contener palabras
remarcadas en negritas o con diferentes tamaños de fonts, o itálica o subrayado.
Es posible realizarlo?
O bien, que alternativa debería utilizar....

Muchas gracias!!!
Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
User avatar
cmsoft
Posts: 1297
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina
Been thanked: 2 times

Re: Imprimir texto enriquecido variable

Post by cmsoft »

Con Tprinter puedes hacerlo, pero tenes que poner cada linea que tenga un font distinto en un Say distinto, indicando en cada caso que font quieres utilizar.
Tambien puedes usar la clase RichEdi5 que tiene esas funcionalidades.
Con Tprinter

Code: Select all | Expand



PRINT oRep NAME "Formu" PREVIEW MODAL
      *oRep:SetLandscape()
      nRow = oRep:nVertRes() / 160
      nCol = oRep:nHorzRes() / 70
      DEFINE FONT oFont1 NAME "COURIER NEW" SIZE -nRow*0.85,nCol*1.5
      DEFINE FONT oFont2 NAME "COURIER NEW" SIZE -nRow*1.00,nCol*2.0 BOLD
      PAGE
        oRep:SayImage(0,0,"FORMU.JPG",oRep:nHorzRes(),oRep:nVertRes())
        oRep:Say(nRow*24,nCol*40,+STR(aVar[01],10),oFont1)
        oRep:Say(nRow*28,nCol*40,DTOC(aVar[2]),oFont1)
        oRep:Say(nRow*32,nCol*40,DTOC(aVar[4])+ " - " + aVar[5],oFont1)

        oRep:Say(nRow*36,nCol*40,STR(aVar[6],10,2),oFont1)
        oRep:Say(nRow*40,nCol*40,STR(aVar[7],10,2),oFont1)
        oRep:Say(nRow*44,nCol*40,STR(aVar[6]+aVar[7],10,2),oFont2)        
...        
      ENDPAGE
   ENDPRINT
oFont1:End()
oFont2:End()
 
User avatar
TOTOVIOTTI
Posts: 430
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina
Has thanked: 5 times

Re: Imprimir texto enriquecido variable

Post by TOTOVIOTTI »

Hola!
Si si... así es como hago... pero no lo puedo justificar ni nada.. cuando son longitudes variables de textos, no queda
bien.
Alguien me puede indicar si con la clase Richedit5 puedo lograr lo que necesito?
Muchas gracias!
Roberto
Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
User avatar
cmsoft
Posts: 1297
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina
Been thanked: 2 times

Re: Imprimir texto enriquecido variable

Post by cmsoft »

Si lo que queres es armar un texto con formato, basandote en una plantilla con formato , que dicho formato se lo puedas dar con un editor de texto tipo Word (WordPad en mi caso) y luego cambiar los datos variables en tiempo de ejecucion, lo que puedes hacer es un clasico merge.
En mi caso, le paso como parametros a mi funcion, el nombre del texto que quiero tomar como base, y una query con un solo registro que contiene los campos variables
Esta es mi funcion

Code: Select all | Expand


*************************************************
** Armar documento rtf
*************************************************
PROCEDURE Merge(oRs,cDocu)
LOCAL oWord , oDoc, cText , cDoc , i
cDoc := hb_CurDrive()+":\"+curdir()+"\"+ALLTRIM(cDocu)+".rtf"
cText := MEMOREAD(hb_CurDrive()+"
:\"+curdir()+"\"+ALLTRIM(cDocu)+".rtf")
IF !FILE(hb_CurDrive()+"
:\"+curdir()+"\"+ALLTRIM(cDocu)+".rtf")
   MsgStop("
El archivo base no existe"+chr(10)+cDoc,"Error")
   RETURN  
ENDIF
FOR i := 1 TO oRs:FCount()
    cText := STRTRAN(ctext,"
<"+oRs:FieldName(i)+">",ALLTRIM(oRs:Fieldget(i)))
NEXT i
   memowrit( hb_CurDrive()+"
:\"+curdir()+"\"+ALLTRIM(cDocu)+" "+oRs:legajo+".rtf", cText )
   if   (oWord := WinWordObj() ) == nil
        MsgAlert( "
MS Word no instalado" ,  "Alerta" )        
        else
        oDoc = oWord:Documents:Open(hb_CurDrive()+"
:\"+curdir()+"\"+ALLTRIM(cDocu)+" "+oRs:legajo+".rtf") // Legajo es un campo de mi Query
        if oDoc == nil
           MsgAlert("
Fallo crear documento, verifique que no este en uso" , "Alerta"  )          
         endif
   endif  
   oDoc:Application:Visible := .t.
RETURN

En el texto .rtf las variables estan encerradas entre < >, pero vos podes usar lo que quieras.
Espero te sirva
User avatar
TOTOVIOTTI
Posts: 430
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina
Has thanked: 5 times

Re: Imprimir texto enriquecido variable

Post by TOTOVIOTTI »

Hola!
Siii, creo que me sirve.. solo que no sé que envías en "Merge(oRs,cDocu)", que seria
el "oRs"?

Muchas gracias!
Roberto
Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
User avatar
cmsoft
Posts: 1297
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina
Been thanked: 2 times

Re: Imprimir texto enriquecido variable

Post by cmsoft »

oRs es una Query (porque para este caso particular uso dolphin con mysql) pero podria ser tambien un alias de una dbf, y utilizar las funciones de dbf para reemplazar los datos.
User avatar
TOTOVIOTTI
Posts: 430
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina
Has thanked: 5 times

Re: Imprimir texto enriquecido variable

Post by TOTOVIOTTI »

Excelente... me sirvió totalmente.... que pasa cuando querés hacer múltiples hojas del mismo
documento RTF?
Por ejemplo, tengo que rellenar los datos del documento (es un Certificado de Estudios) pero a la vez
de rellenarlo con los datos de un alumno, necesito hacerlo de un listado de alumnos. Se puede
generar un mismo archivo con varias hojas?

Mil gracias!
Roberto
Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
User avatar
cmsoft
Posts: 1297
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina
Been thanked: 2 times

Re: Imprimir texto enriquecido variable

Post by cmsoft »

Si, en ese caso, la query contendrá varios registros (o la tabla dbf) y vas a tener que ir grabando y cerrando cada .rtf antes de hacer el skip para leer el próximo registro. O bien tambien puedes imprimirlo y descartarlo. Ahi van a ser documentos independientes por cada alumno.
Si queres hacer un solo documento, tenes que grabar con memowrite al final.

Seria algo asi (no lo probé)

Code: Select all | Expand

*************************************************
** Armar documento rtf
*************************************************
PROCEDURE Merge(oRs,cDocu)
LOCAL oWord , oDoc, cText := "", cDoc , i
cDoc := hb_CurDrive()+":\"+curdir()+"\"+ALLTRIM(cDocu)+".rtf"
IF !FILE(hb_CurDrive()+"
:\"+curdir()+"\"+ALLTRIM(cDocu)+".rtf")
   MsgStop("
El archivo base no existe"+chr(10)+cDoc,"Error")
   RETURN  
ENDIF
DO WHILE !oRs:EOF()
    cText := cText + MEMOREAD(hb_CurDrive()+"
:\"+curdir()+"\"+ALLTRIM(cDocu)+".rtf")
    FOR i := 1 TO oRs:FCount()
        cText := STRTRAN(ctext,"
<"+oRs:FieldName(i)+">",ALLTRIM(oRs:Fieldget(i)))
    NEXT i
    oRs:Skip()
ENDDO
memowrit( hb_CurDrive()+"
:\"+curdir()+"\"+ALLTRIM(cDocu)+" "+oRs:legajo+".rtf", cText )
   if   (oWord := WinWordObj() ) == nil
        MsgAlert( "
MS Word no instalado" ,  "Alerta" )        
        else
        oDoc = oWord:Documents:Open(hb_CurDrive()+"
:\"+curdir()+"\"+ALLTRIM(cDocu)+" resultado.rtf")
        if oDoc == nil
           MsgAlert("
Fallo crear documento, verifique que no este en uso" , "Alerta"  )          
         endif
   endif  
   oDoc:Application:Visible := .t.
RETURN

Asegurate que el documento base tenga un salto de pagina al final del documento para que te lo haga en hojas separadas.
Saludos
User avatar
TOTOVIOTTI
Posts: 430
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina
Has thanked: 5 times

Re: Imprimir texto enriquecido variable

Post by TOTOVIOTTI »

Gracias amigo!
Esto lo intenté... pero me graba una sola hoja.
Como sería esto: "Asegurate que el documento base tenga un salto de pagina al final del documento para que te lo haga en hojas separadas."
Sería una hoja en blanco??
Gracias!
Roberto
Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
User avatar
acuellar
Posts: 1645
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Imprimir texto enriquecido variable

Post by acuellar »

TOTOVIOTTI

Lo que tiene que hacer es crear una plantilla en MS-WORD con texto enriquecido que desee, y los datos que va a cambiar los pone entre []
Ejemplo: NOMBRE: [NOM]
Lo guarda en formato RTF

Code: Select all | Expand


 oWord:=TOleAuto():New( "Word.Application" )

 cTxtFile:=MemoRead("C:\SISTEMAS\PLANTILLA.RTF")
 cTxtFile:= STRTRAN(cTxtFile, "[NOM]",AllTrim(oDBF:NOMBRE))

   memowrit("C:\SISTEMAS\CERTIFICADO.DOC", cTxtFile,.f.  )
   
    oWord:Documents:Open("C:\SISTEMAS\CERTIFICADO.DOC")

    oWord:Visible:= .T.//;oWnd:Minimize()
    oWord:= NIL
 


Le pasa el control a MS-WORD
Saludos,

Adhemar C.
User avatar
TOTOVIOTTI
Posts: 430
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina
Has thanked: 5 times

Re: Imprimir texto enriquecido variable

Post by TOTOVIOTTI »

Adhemar
eso está comprendido y funciona correctamente.
El tema es el siguiente: tengo un archivo maestro de UNA hoja, es un modelo de certificado para un alumno.
Y necesito replicar el archivo, tantas veces como alumnos tenga. O sea, en el nuevo archivo Word que quiero
generar, necesito que esté replicado varias veces el original con los datos de los respectivos alumnos.
Se entiende la idea?
Muchas gracias!!
Roberto
Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
User avatar
acuellar
Posts: 1645
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Imprimir texto enriquecido variable

Post by acuellar »

Es exactamente lo que necesitas.

Solo debes guardar el documento con el nombre del alumno.
Saludos,

Adhemar C.
User avatar
TOTOVIOTTI
Posts: 430
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina
Has thanked: 5 times

Re: Imprimir texto enriquecido variable

Post by TOTOVIOTTI »

Adhemar,
necesito un único documento con TODOS los alumnos. Quizá no me expresé correctamente.
Gracias!
Roberto
Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
User avatar
joseluisysturiz
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Re: Imprimir texto enriquecido variable

Post by joseluisysturiz »

TOTOVIOTTI wrote:Adhemar,
necesito un único documento con TODOS los alumnos. Quizá no me expresé correctamente.
Gracias!
Roberto

Saludos, si entiendo bien, lo que quieres es un libro, es decir una hoja por cada alumno en un solo archivo, para los REPLACE debes tener un archivo por cada alumno ya que la VAR a reemplazar seria la misma y lo que harias es repetir un nombre en todas las hojas, no se si entendi bien... Asi que lo correcto es guardar o crear un archivo por cada alumno, a menos que haya alguna forma de exportar o agregar los datos del archivo que usa Tword en un nuevo archivo pero sin las variables, es lo que se me ocurre, pero lo mas viable seria un archivo por alumno, saludos...
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
TOTOVIOTTI
Posts: 430
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina
Has thanked: 5 times

Re: Imprimir texto enriquecido variable

Post by TOTOVIOTTI »

Si José Luis..
lo que necesitaría es como un libro, ya veré entonces como lo puedo solucionar...
Muchas gracias a todos....
Roberto

PD: Me gustaba la opción de CMSoft (perdón que no sé tu nombre), pero no se puede ir "sumando"
el archivo con el Memoread... al menos yo no pude...
Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
Post Reply