Page 1 of 1

Rtf to Pdf poca calidad y descuadrado

Posted: Mon Jan 04, 2021 10:31 am
by Ramón J.
Hola a todos

He incluido una rutina que he visto en el foro para convertir en pdf archivos rtf utilizando la clase richEdi5. En este caso tiene un logo en color, el nombre de la empresa y la dirección, pero he observado que en el pdf generado el logo sale pixelado y en general sale todo desplazado hacia la derecha y hacia abajo. ¿Hay que hacer algún ajuste más?

Aquí os dejo el en lace descarga del zip que contiene el prg, el archivo rtf de ejemplo y el pdf generado.

https://mega.nz/file/hso1XYBD#hxys4DT-j ... 2jnB0rZjXA

Un saludo

Re: Rtf to Pdf poca calidad y descuadrado

Posted: Mon Jan 04, 2021 1:07 pm
by karinha
Intenta asi:

Code: Select all

#include "fivewin.ch"
#include "Constant.ch"
#include "RichEdit.ch"

//-----------INFORME A PDF---------------------

FUNCTION infotopdf()

   LOCAL oBar, oWnd
   LOCAL cRtf, cPdf, lOpen, cFile
   LOCAL hDLL := LoadLibrary( "Riched20.dll" )

   cFile := "modelo.RTF"

   cRtf := cfile

   DEFINE WINDOW oWnd TITLE "RTF to PDF" MDI

   DEFINE BUTTONBAR oBar OF oWnd SIZE 100, 32 2010

   DEFINE BUTTON OF oBar PROMPT "Generar PDF" ;
      ACTION RTFTOPDF( cRtf, cPdf, lOpen  )

   oWnd:oWndClient:bPainted := ;
      { || oWnd:oWndClient:DrawImage( "c:\fwh\bitmaps\fivetech.bmp", ;
           { NIL, NIL, -10, -10 }, .f., nil, nil, nil, "BR" ) }

   ACTIVATE WINDOW oWnd CENTERED

   FreeLibrary( hDLL )

RETURN nil

FUNCTION RTFTOPDF( cRTF, cPDF, lOpen )

   LOCAL oWnd, oRtf, cTxt := ""

   IF Empty( cRtf ) .OR. .NOT. File( cRTF ) .OR. ;
      Lower( cFileExt( cRtf ) ) != "rtf"

      MsgInfo( "No localizo el .RTF", "Atencion" )

      RETURN( .F. )

   ENDIF
   
   DEFAULT cPDF := cRTF, lOpen := .T.

   cPDF  := cFileSetExt( cPDF, "pdf" )

   FErase( cPDF )

   DEFINE WINDOW oWnd

   @ 0, 0 RICHEDIT oRtf VAR cTxt OF oWnd FILE cRTF

   oWnd:oClient := oRtf

   ACTIVATE WINDOW oWnd HIDDEN ON INIT ;
      ( oRtf:SaveToPDF( cFileNoExt( cPdf ), cPDF, lOpen ), oWnd:End() )

RETURN File( cPDF )
 
Saludos.

Re: Rtf to Pdf poca calidad y descuadrado

Posted: Mon Jan 04, 2021 6:20 pm
by Ramón J.
Gracias, João, por contestar

He probado lo que me has indicado y el resultado es el siguiente:

El archivo rtf;
Image

El archivo pdf:
Image

Como aclaración decirte que la plantilla rtf la he creado con LibreOffice, que no sé si tendrá algo que ver, pero como podrás observar en el pdf no aparece el encabezado que está formado por una tabla con tres columnas, y además el texto, que es arial, no es fiel al original.

No sé qué puede ser. Tengo Windows 10 y FWH18.04

Un saludo

Re: Rtf to Pdf poca calidad y descuadrado

Posted: Mon Jan 04, 2021 6:41 pm
by cnavarro
Por favor, indícame en la imagen que adjunto qué es a lo que te refieres.
Image

Re: Rtf to Pdf poca calidad y descuadrado

Posted: Mon Jan 04, 2021 7:52 pm
by Ramón J.
Hola, CNavarro.

A ti te ha salido bien le pdf. Como le comentaba a João y como podrás observas en las imágenes que arriba he insertado, el pdf que me genera del rtf que tomo como base no parece en nada . ¿Has insertado alguna rutina especial en el código de João? De todas maneras, en la imagen que me adjuntas el encabezado sale desplazado un poco hacia abajo, añade más margen en la derecha y el párrafo tiene más líneas.

Image

La imagen de la izquierda es el pdf que has adjuntado y el de la derecha el la previsualización con el LIbreOffice.

Por cierto -este ya es otro tema-, no he podido compilar testrtf5 que se encuentra en samples ya que Fivedit me arroja el siguiente error:

Image

Re: Rtf to Pdf poca calidad y descuadrado

Posted: Mon Jan 04, 2021 9:40 pm
by cnavarro
Ramón, para que pueda linkar correctamente ( es un problema de versiones ), pon esto al final del prg

Code: Select all

FUNCTION OleUIInsertObject()

RETURN NIL
 

Re: Rtf to Pdf poca calidad y descuadrado

Posted: Wed Jan 06, 2021 11:05 am
by Ramón J.
Muchas gracias, C. Navarro. Intentaré buscar otras alternativas. Abriré otro tema, porque la creación de pdf desde rtf me lleva de cabeza.

Re: Rtf to Pdf poca calidad y descuadrado

Posted: Wed Jan 06, 2021 1:18 pm
by cnavarro
Creo que el problema es:
1.- Qué aplicación genera el RTF
2.- Versión de Fw que utilizas
Esta apreciación es por lo que yo obtengo al generar el PDF con la versión actual de Fw

Re: Rtf to Pdf poca calidad y descuadrado

Posted: Wed Jan 06, 2021 8:11 pm
by Ramón J.
Hola, C. Navarro.

Uso FWH FWH18.04 y Windows 10.

El RTF lo genera el propio FWH. El procedimiento es el siguiente:

Creo un plantilla con LibreOffice en la que únicamente aparece el logotipo, la dirección y poco más y la guardo en formato RTF. A partir de ahí se empieza a introducir texto en el propio archivo RTF creado y se guarda. Básicamente el procedimiento es el siguiente:

Code: Select all

Function creainforme(nRecnoDoc, cnumero, cnombre, obrwregdoc) 

local ctextbase, cplantilla, ctxtfile, cbase
Local cRaiz:="\COMPARTIDO\REGSAT\WINSAT\DOCUMENTAL"
Local cnum, cnom, CarpetaSAT, nlibro, libro, fecha, dfecha,clasedoc,cClasedoc
Local aFiles, aDir, apunte
Local cFolder 
local cFile:=strzero(nRecnoDoc,8)+".RTF"
local cFichero:="\COMPARTIDO\REGSAT\WINSAT\RTFINT\"+strzero(nRecnoDoc,8)+".RTF"

 
nlibro   = REG->NUM_LIB
dFecha   = REG->FECHA
clasedoc  =REG->CLASE_DOC

cNum:=Cnumero
cNom:=cnombre 
CarpetaSAT:=alltrim(cnum)+"-"+alltrim(cnom)
libro:=strzero(nlibro,6)
fecha:=strzero(day(dfecha),2)+strzero(month(dfecha),2)+str(year(dfecha),4)
apunte:=libro+"-"+fecha+"-"+alltrim(clasedoc)
cFolder:=cRaiz+"\"+CarpetaSAT+"\"+Libro+"\"+fecha+"\"+Clasedoc+"\"

IF FILE("\COMPARTIDO\REGSAT\WINSAT\RTFINT\"+strzero(nRecnoDoc,8)+".RTF") .AND. FILE("\COMPARTIDO\REGSAT\WINSAT\RTFINT\"+cfichero)
MsgAlert("Ya existe el fichero."+CRLF+;
"Puede modificarlo en edición", "Archivo ya existe")
endif

ctextbase:= MEMOREAD("\COMPARTIDO\REGSAT\WINSAT\plantillas\informe.rtf")   //ESTA ES LA PLANTILLA RTF                   
 
IF !FILE("\COMPARTIDO\REGSAT\WINSAT\plantillas\informe.rtf")
MsgStop("El archivo base no existe","Error")
RETURN nil 
ENDIF

cFichero:=strzero(nRecnoDoc,8)+".RTF"

memoread("\COMPARTIDO\REGSAT\WINSAT\plantillas\informe.rtf")

cTxtFile:=MemoRead("\COMPARTIDO\REGSAT\WINSAT\plantillas\informe.rtf") 

memowrit("\COMPARTIDO\REGSAT\WINSAT\RTFINT\"+cfichero, cTxtFile,.f.  )
memowrit("\COMPARTIDO\REGSAT\WINSAT\DOCUMENTAL\"+CarpetaSAT+"\"+"DIARIO"+"\"+apunte+"\"+"i"+cfichero, cTxtFile,.f.  )

if reg->(flock())
reg->fecha_ni:=date()
reg->fileint:=Cfichero
reg->(dbunlock())
oBrwregdoc:refresh()
endif
  
Msginfo("Se ha creado fichero "+cfichero)
obrwregdoc:refresh()

//opendoc(nRecnoDoc, cFichero, oBrwregdoc)
RETURN nil

Como verás lo que hago es que ,tomando como plantilla un documento RTF en blanco (únicamente con el logotipo y la dirección), creo el RTF renombrándolo con el numero del recno() en la subcarpeta de la empresa que también se crea, lo abro, se introduce el texto y se guarda. Ni siguiera utilizo campos MEMO porque muchas veces el texto es muy extenso y además incluye tablas. Además, no tengo confianza con _ MEMO para _.

Luego con la siguiente función creo los PDF, pero el resultado no es un reflejo muy fiel al fichero RTF creado:

Code: Select all

Function infotopdf (nRecnoDoc, cnumero, cnombre, obrwregdoc)

local oWnd, oBar                                                                           
local cRtf, cPdf, lOpen, cFile
local cFichero, ctextbase, cplantilla, ctxtfile, cbase
Local cRaiz:="\COMPARTIDO\REGSAT\WINSAT\DOCUMENTAL"
Local cnum, cnom, CarpetaSAT, nlibro, libro, fecha, dfecha,clasedoc,cClasedoc
Local aFiles, aDir
Local cFolder, apunte 
LOCAL hDLL := LoadLibrary( "Riched20.dll" )

cFile:=strzero(nRecnoDoc,8)+".RTF"
cFichero:="\COMPARTIDO\REGSAT\WINSAT\RTFINT\"+strzero(nRecnoDoc,8)+".RTF"   
 

IF !FILE("\COMPARTIDO\REGSAT\WINSAT\RTFINT\"+strzero(nRecnoDoc,8)+".RTF")
//MsgNoYes( "El archivo existe. Se va a eliminar el existente y crear uno nuevo. ¿Desea continuar?","Aviso")
MsgAlert("No existe el fichero"+cfichero)
return .f.
endif

nlibro     = REG->NUM_LIB
dFecha   = REG->FECHA
clasedoc  =REG->CLASE_DOC

cNum:=Cnumero
cNom:=cnombre 
CarpetaSAT:=alltrim(cnum)+"-"+alltrim(cnom)
libro:=strzero(nlibro,6)
fecha:=strzero(day(dfecha),2)+strzero(month(dfecha),2)+str(year(dfecha),4)
apunte:=libro+"-"+fecha+"-"+alltrim(clasedoc)
cFolder:=cRaiz+"\"+CarpetaSAT+"\"+Libro+"\"+fecha+"\"+Clasedoc+"\"+cfile
cRtf:="\COMPARTIDO\REGSAT\WINSAT\DOCUMENTAL\"+CarpetaSAT+"\"+"DIARIO"+"\"+apunte+"\"+"i"+cfile
 

  DEFINE WINDOW oWnd TITLE "PDF"
   DEFINE BUTTONBAR oBar OF oWnd SIZE 100,32 2010
   DEFINE BUTTON OF oBar PROMPT "Generar PDF" ;
      ACTION RTFTOPDF(cRtf, cPdf, lOpen  )
   ACTIVATE WINDOW oWnd CENTERED


return nil

Re: Rtf to Pdf poca calidad y descuadrado

Posted: Thu Jan 07, 2021 12:48 am
by karinha