Page 2 of 2

Re: Consulta Sobre Plantilla Word o Rtf "URGENTE"

PostPosted: Thu Jun 23, 2022 3:39 pm
by remtec
Hola Cesar.

Como estas?

He buscado en internet y en el foro, algo parecido a insertar una imagen en RTF o DOC y nada que me ayude, lo mas problable que sea falta de conocimiento, pero que nadie antes haya tenido un requerimiento de este tipo, hummm...

Anoche pude dar con poder generar el QR en formato BMP, pero hasta ahi no mas!!

Que atento a alguna idea.

Saludos
Antonio.

Re: Consulta Sobre Plantilla Word o Rtf "URGENTE"

PostPosted: Thu Jun 23, 2022 4:43 pm
by cmsoft
Antonio, yo acá te había puesto la solucion para insertar un grafico en el rtf
cmsoft wrote:Antonio, creo que aca esta tu solucion.
En el rtf base tienes que poner donde quieres que ponga la imagen con //IMAGEN// para que pueda reemplazarla.
Como te comente, previamente debes generar el QR en formato bmp y grabarlo en disco
Code: Select all  Expand view

#include "FiveWin.ch"

function Main()
LOCAL oDlg

   DEFINE DIALOG oDlg TITLE "This is a dialog" SIZE 400, 200
   @ 4,  8 BUTTON "Ok" ACTION Merge("C:\FWH\samples\base.rtf","C:\FWH\samples\QR.bmp")
   ACTIVATE DIALOG oDlg CENTERED

return nil


*************************************************
** Armar documento rtf
*************************************************
PROCEDURE Merge(cBase,cImg)
LOCAL oWord , oDoc, cText , cDoc , cImgBase64

cDoc := cBase
cImgBase64 :=  StrToHex(hb_memoread( cImg ) )
cText := MEMOREAD(cDoc)
cText := STRTRAN(ctext,"//IMAGEN//",'{\pict\pngblip\picw1000\pich1000\picwgoal1000\pichgoal1000\bin '+cImgBase64+' }')

   if !GrabaArchivo( 'c:\fwh\samples\antonio_nuevo.rtf', cText )
      MsgAlert("Fallo crear documento, verifique que no este en uso" , "Alerta"  )          
      RETURN
   ENDIF
   if   (oWord := WinWordObj() ) == nil
        MsgAlert( "MS Word no instalado" ,  "Alerta" )        
        else
        oDoc = oWord:Documents:Open('c:\fwh21\samples\antonio_nuevo.rtf')
        if oDoc == nil
           MsgAlert("Fallo crear documento, verifique que no este en uso" , "Alerta"  )          
         endif
   endif  
   oDoc:Application:Visible := .t.
RETURN

*****************
** Grabar archivo
FUNCTION GrabaArchivo(cArchivo,cDato)
LOCAL Han, nBytes, nErr
Han := FCreate(cArchivo)
nBytes := FWRITE(Han,cDato,Len(cDato))
nErr := Ferror()
IF nErr <> 0
   MsgStop("Error " + STR(nErr)+CHR(10)+cArchivo,"Error")
ENDIF
LCLOSE(Han)
RETURN nBytes = Len(cDato)
 

Espero te sirva

Re: Consulta Sobre Plantilla Word o Rtf "URGENTE"

PostPosted: Mon Jun 27, 2022 3:51 am
by remtec
cmsoft wrote:Antonio, yo acá te había puesto la solucion para insertar un grafico en el rtf
cmsoft wrote:Antonio, creo que aca esta tu solucion.
En el rtf base tienes que poner donde quieres que ponga la imagen con //IMAGEN// para que pueda reemplazarla.
Como te comente, previamente debes generar el QR en formato bmp y grabarlo en disco
Code: Select all  Expand view

#include "FiveWin.ch"

function Main()
LOCAL oDlg

   DEFINE DIALOG oDlg TITLE "This is a dialog" SIZE 400, 200
   @ 4,  8 BUTTON "Ok" ACTION Merge("C:\FWH\samples\base.rtf","C:\FWH\samples\QR.bmp")
   ACTIVATE DIALOG oDlg CENTERED

return nil


*************************************************
** Armar documento rtf
*************************************************
PROCEDURE Merge(cBase,cImg)
LOCAL oWord , oDoc, cText , cDoc , cImgBase64

cDoc := cBase
cImgBase64 :=  StrToHex(hb_memoread( cImg ) )
cText := MEMOREAD(cDoc)
cText := STRTRAN(ctext,"//IMAGEN//",'{\pict\pngblip\picw1000\pich1000\picwgoal1000\pichgoal1000\bin '+cImgBase64+' }')

   if !GrabaArchivo( 'c:\fwh\samples\antonio_nuevo.rtf', cText )
      MsgAlert("Fallo crear documento, verifique que no este en uso" , "Alerta"  )          
      RETURN
   ENDIF
   if   (oWord := WinWordObj() ) == nil
        MsgAlert( "MS Word no instalado" ,  "Alerta" )        
        else
        oDoc = oWord:Documents:Open('c:\fwh21\samples\antonio_nuevo.rtf')
        if oDoc == nil
           MsgAlert("Fallo crear documento, verifique que no este en uso" , "Alerta"  )          
         endif
   endif  
   oDoc:Application:Visible := .t.
RETURN

*****************
** Grabar archivo
FUNCTION GrabaArchivo(cArchivo,cDato)
LOCAL Han, nBytes, nErr
Han := FCreate(cArchivo)
nBytes := FWRITE(Han,cDato,Len(cDato))
nErr := Ferror()
IF nErr <> 0
   MsgStop("Error " + STR(nErr)+CHR(10)+cArchivo,"Error")
ENDIF
LCLOSE(Han)
RETURN nBytes = Len(cDato)
 

Espero te sirva


Hola Amigo Cesar.

Disculpa no haber respondido antes.

Ya había considerado esta opción, luche todo 2 días con insertar el código QR, como resultado, al insertar el QR, se desformaba el RTF generado, ya que era el Qr, mas la imagen de la firma, cuando pensé que ya estaba avanzado, se presento el problema que Windows se bloqueaba, indicándome que la plantilla de RTF se encontraba abierta, lo que me obligaba a resetear el equipo, así con estos problemas, mas la presión por la insistencia del cliente, me vi en la obligación de abortar esta solución e intentar otra opción. Por este motivo no quise seguir solicitando ayuda, el tiempo lo tenia en mi contra, ahora tendré que ver como justifico ante el cliente que la solución que le daré, es diferente a la que me planteo, ya que fue el cliente quien me plateo el uso de RTF.

Saludos.

Antonio

Re: Consulta Sobre Plantilla Word o Rtf "URGENTE"

PostPosted: Mon Jun 27, 2022 1:51 pm
by cmsoft
Antonio:
Intuyo que habría que formatear el documento de tal manera que después no se desconfigure.
Si queres contunuar con esa opción comparteme el documento y puedo mirarlo.

Re: Consulta Sobre Plantilla Word o Rtf "URGENTE"

PostPosted: Tue Jun 28, 2022 11:05 pm
by remtec
Hola Cesar.

Como estas?

Muchas gracias por toda tu ayuda.

Hoy he hablado con mi cliente, le argumente que usar una plantilla RTF o Word, como parte del sistema guardada en una carpeta, queda expuesta a que alguien la pueda modificar o eliminar, afectando el funcionamiento del sistema. Lo extraño fuera de que cada cierta apertura, se bloqueaba quedando abierta y no dejando ser usada por el sistema, esto me ocurrió en Windows 10, no encontré un patrón de secuencia donde y porque se quedaba abierta la plantilla, por lo demás, hasta ese momento, solo había un usuario usándola, no me imagino, si simultáneamente era usada por mas de un usuario.

Como puedes ver, invertí demasiado tiempo frente al cliente y termine usando otra forma diferente a la solicitada para responder, con esto, vi una larga distancia y complejidad, frente a otras herramientas y eso nos deja expuesto a perder opciones de desarrollo, el cliente quiere soluciones y no complicaciones, la gran verdad, el cliente siempre tendrá la razón.

Saludos

Antonio.