Rtf to Pdf poca calidad y descuadrado

Post Reply
Ramón J.
Posts: 79
Joined: Mon Feb 13, 2006 8:23 pm

Rtf to Pdf poca calidad y descuadrado

Post 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
FWH 20.12 BCC7
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Rtf to Pdf poca calidad y descuadrado

Post 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.
João Santos - São Paulo - Brasil
Ramón J.
Posts: 79
Joined: Mon Feb 13, 2006 8:23 pm

Re: Rtf to Pdf poca calidad y descuadrado

Post 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
FWH 20.12 BCC7
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Rtf to Pdf poca calidad y descuadrado

Post by cnavarro »

Por favor, indícame en la imagen que adjunto qué es a lo que te refieres.
Image
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Ramón J.
Posts: 79
Joined: Mon Feb 13, 2006 8:23 pm

Re: Rtf to Pdf poca calidad y descuadrado

Post 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
FWH 20.12 BCC7
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Rtf to Pdf poca calidad y descuadrado

Post 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
 
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Ramón J.
Posts: 79
Joined: Mon Feb 13, 2006 8:23 pm

Re: Rtf to Pdf poca calidad y descuadrado

Post 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.
FWH 20.12 BCC7
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Rtf to Pdf poca calidad y descuadrado

Post 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
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Ramón J.
Posts: 79
Joined: Mon Feb 13, 2006 8:23 pm

Re: Rtf to Pdf poca calidad y descuadrado

Post 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
FWH 20.12 BCC7
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Rtf to Pdf poca calidad y descuadrado

Post by karinha »

João Santos - São Paulo - Brasil
Post Reply