Imprimir texto enriquecido variable

Imprimir texto enriquecido variable

Postby TOTOVIOTTI » Mon Nov 13, 2017 9:41 pm

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.edu.ar
User avatar
TOTOVIOTTI
 
Posts: 387
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Re: Imprimir texto enriquecido variable

Postby cmsoft » Mon Nov 13, 2017 11:31 pm

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 view


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
cmsoft
 
Posts: 1185
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Imprimir texto enriquecido variable

Postby TOTOVIOTTI » Tue Nov 14, 2017 11:15 am

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.edu.ar
User avatar
TOTOVIOTTI
 
Posts: 387
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Re: Imprimir texto enriquecido variable

Postby cmsoft » Tue Nov 14, 2017 11:38 am

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 view

*************************************************
** 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
cmsoft
 
Posts: 1185
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Imprimir texto enriquecido variable

Postby TOTOVIOTTI » Tue Nov 14, 2017 7:06 pm

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.edu.ar
User avatar
TOTOVIOTTI
 
Posts: 387
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Re: Imprimir texto enriquecido variable

Postby cmsoft » Tue Nov 14, 2017 10:48 pm

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
cmsoft
 
Posts: 1185
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Imprimir texto enriquecido variable

Postby TOTOVIOTTI » Wed Nov 15, 2017 12:14 pm

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.edu.ar
User avatar
TOTOVIOTTI
 
Posts: 387
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Re: Imprimir texto enriquecido variable

Postby cmsoft » Wed Nov 15, 2017 7:35 pm

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 view
*************************************************
** 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
cmsoft
 
Posts: 1185
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Imprimir texto enriquecido variable

Postby TOTOVIOTTI » Thu Nov 16, 2017 11:59 am

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.edu.ar
User avatar
TOTOVIOTTI
 
Posts: 387
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Re: Imprimir texto enriquecido variable

Postby acuellar » Thu Nov 16, 2017 1:04 pm

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 view

 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
acuellar
 
Posts: 1589
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Imprimir texto enriquecido variable

Postby TOTOVIOTTI » Thu Nov 16, 2017 1:52 pm

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.edu.ar
User avatar
TOTOVIOTTI
 
Posts: 387
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Re: Imprimir texto enriquecido variable

Postby acuellar » Thu Nov 16, 2017 2:11 pm

Es exactamente lo que necesitas.

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

Adhemar C.
User avatar
acuellar
 
Posts: 1589
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Imprimir texto enriquecido variable

Postby TOTOVIOTTI » Thu Nov 16, 2017 2:24 pm

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.edu.ar
User avatar
TOTOVIOTTI
 
Posts: 387
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Re: Imprimir texto enriquecido variable

Postby joseluisysturiz » Thu Nov 16, 2017 2:50 pm

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
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: Imprimir texto enriquecido variable

Postby TOTOVIOTTI » Thu Nov 16, 2017 6:57 pm

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.edu.ar
User avatar
TOTOVIOTTI
 
Posts: 387
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 8 guests