Imprimir texto enriquecido variable
- 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
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!!!
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!!!
- 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
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
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()
- 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
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
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
- 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
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
En el texto .rtf las variables estan encerradas entre < >, pero vos podes usar lo que quieras.
Espero te sirva
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
- 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
Hola!
Siii, creo que me sirve.. solo que no sé que envías en "Merge(oRs,cDocu)", que seria
el "oRs"?
Muchas gracias!
Roberto
Siii, creo que me sirve.. solo que no sé que envías en "Merge(oRs,cDocu)", que seria
el "oRs"?
Muchas gracias!
Roberto
- 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
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.
- 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
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
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
- 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
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é)
Asegurate que el documento base tenga un salto de pagina al final del documento para que te lo haga en hojas separadas.
Saludos
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
- 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
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
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
Re: Imprimir texto enriquecido variable
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
Le pasa el control a MS-WORD
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.
Adhemar C.
- 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
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
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
Re: Imprimir texto enriquecido variable
Es exactamente lo que necesitas.
Solo debes guardar el documento con el nombre del alumno.
Solo debes guardar el documento con el nombre del alumno.
Saludos,
Adhemar C.
Adhemar C.
- 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
Adhemar,
necesito un único documento con TODOS los alumnos. Quizá no me expresé correctamente.
Gracias!
Roberto
necesito un único documento con TODOS los alumnos. Quizá no me expresé correctamente.
Gracias!
Roberto
- joseluisysturiz
- Posts: 2064
- Joined: Fri Jan 06, 2006 9:28 pm
- Location: Guatire - Caracas - Venezuela
- Contact:
Re: Imprimir texto enriquecido variable
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!
Gracias a mi Dios ante todo!
- 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
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...
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...