Page 1 of 1

APORTE. Exportar a PDF

Posted: Wed Jan 05, 2011 3:05 pm
by Adolfo
Fivewinners.

Aqui una forma INDOLORA de exportar desde el PREVIEW de la TPrinter o de la TReport directamente a PDF sin modificar las clases

Pasos.
Al inicio de nuestro sistema ( ojala al inicio de la Function MAIN() )

Code: Select all

RPrevUserBtns({|oPreview,oBar| ReportExtend(oPreview,oBar) })
Crear la funcion ReporExtend().. o cualquier otro nombre que le quieran poner

Code: Select all

Function ReportExtend( oPreview, oBar )

  Define Button of oBar;
         Resource "SPDF";
         Tooltip "Exportar a PDF";
         Action REP2PDF(oPreview)

Return Nil
EL ICONO 'SPDF', es un icono propio, en mi caso una copia del icono del ADOBE ACROBAT READER, que deben agregar manualmente al PREV32.DLL

Y esta funcion hace la magia...

Code: Select all

Function REP2PDF(oPreview)
Local cString
Local cDdestino
Local cFile:="PDF" + StrTran(TIME(),":","") + ".pdf"
Local cDir:=cGetdir32("Elija Directorio para PDF") + "\"
Local x:=0
Local cTexto:=""

cDestino:=cDir + cFile

If Len(oPreview:oDevice:aMeta) = 1
   cString:="nConvert -o " + cDestino + " -quiet -out pdf -c 5 " + oPreview:oDevice:aMeta[1]
Else
   If File("listaemf.txt")
      Delete File listaemf.txt
   Endif

   For x=1 To Len(oPreview:oDevice:aMeta)
       cTexto:=cTexto + oPreview:oDevice:aMeta[x] + CRLF
   Next
   MemoWrit("listaemf.txt",cTexto )

   cString:="nConvert -multi -o " + cDestino + " -quiet -out pdf -c 5 -l listaemf.txt"
Endif

MsgRun("Espere","Exportando a PDF", {|| WAITRUN(cString,0 ) } )

Return Nil
NO AGREGA EL BOTON A LA BARRA DEL PREVIEW SI APPISTHEMED() RETORNA .T.
EL RPREVIEW ACTUAL NO CONSIDERA LOS bUserBtns PARA AGREGARLOS A LA REBAR ( Antonio.. aqui un BUG )

Por lo tanto
Tambien en el Main.PRG agregar

Code: Select all

Function IsAppThemed()
Return .F.
Solicita el lugar donde grabar el PDF
EL nombre del archivo creado es PDFHHMMSS ( Donde HHMMSS es lo devuelto por TIME() ), pueden modificarlo para crear sus propios nombres automaticamente.
Se requiere del archivo nConvert en el mismo directorio del ejecutable, que pueden descargar aqui

http://www.xnview.com/en/download_nc.html

Requiere de su compra o registro, pero lo pueden descargar sin problemas para "probar"
Funciona solamente con el TReport y TPrinter ORIGINALES, no las pude probar con ninguna de las clases modificadas por otros.

Esta rutina esta probada con FWH 905 en adelante, pero si tienen alguna anterior solo deben meterle mano al rPreview para agregar "manualmente" el boton al Preview, y llamar a la rutina de exportacion..

Espero les sea de utilidad.
Personalmente busque varias soluciones, pero esta solo requiere que copie el nConvert.exe junto con mi ejecutable y nada mas, sin instalar Impresoras virtuales ni nada, absolutamente transparente al usuario.

Saludos.
Desde Chile
Adolfo

Re: APORTE. Exportar a PDF

Posted: Thu Jan 06, 2011 4:06 pm
by nageswaragunupudi
Very good example demonstrating the extend capability of rpreview.prg.

Only one suggestion:
EL ICONO 'SPDF', es un icono propio, en mi caso una copia del icono del ADOBE ACROBAT READER, que deben agregar manualmente al PREV32.DLL
It is not necessary to add the resource to PREV32.DLL. The resource can be in our own rc file or dll.
RPreview code is written to refer to our resources ( not prev32.dll ) to use the user defined buttons. The very intention of the code is not to modify any of the libraries or resources provided by FWH.

Re: APORTE. Exportar a PDF

Posted: Thu Jan 06, 2011 6:45 pm
by Adolfo
It is not necessary to add the resource to PREV32.DLL. The resource can be in our own rc file or dll.
RPreview code is written to refer to our resources ( not prev32.dll ) to use the user defined buttons. The very intention of the code is not to modify any of the libraries or resources provided by FWH.
Very good example demonstrating the extend capability of rpreview.prg.

Only one suggestion:
EL ICONO 'SPDF', es un icono propio, en mi caso una copia del icono del ADOBE ACROBAT READER, que deben agregar manualmente al PREV32.DLL
It is not necessary to add the resource to PREV32.DLL. The resource can be in our own rc file or dll.
RPreview code is written to refer to our resources ( not prev32.dll ) to use the user defined buttons. The very intention of the code is not to modify any of the libraries or resources provided by FWH.
Rao...
Good to know

Re: APORTE. Exportar a PDF

Posted: Thu Jan 06, 2011 7:13 pm
by sysctrl2
muy buena aportacion Adolfo, gracias,

tengo abierto el PDF final con el acrobat reader, y quiero buscar un dato dentro del PDF,
y no funciona, es porque la conversion es desde una imagen ?

saludos..

Re: APORTE. Exportar a PDF

Posted: Thu Jan 06, 2011 8:01 pm
by Adolfo
Yes .. es un pdf a partir del archivo emf, una imagen...


Saludos

Re: APORTE. Exportar a PDF

Posted: Sat Jan 08, 2011 4:07 am
by persi
Excelente adolfo funciona perfecto cuando lo hago desde el programa principal, pero cuando quiero ponerlo en el rpreview no funciona; dime que varibles mandarle a la la funcion REP2PDF(.....).

Re: APORTE. Exportar a PDF

Posted: Sat Jan 08, 2011 7:46 pm
by mgsoft
Hola:

Añade esta función

Code: Select all

Function PDFSAVE(aFiles)
Local cString
Local cDestino
Local cFile:="PDF" + StrTran(TIME(),":","") + ".pdf"

Local x:=0
Local cTexto:=""


cDestino := cGetFile("Exportar Informe (*.pdf) | *.pdf |","Guardar como...", NIL, nil, .T., .T. )



If Len(aFiles) = 1
   cString:="nConvert -o " + cDestino + " -quiet -out pdf -c 5 " + aFiles[1]
Else
   If File("listaemf.txt")
      Delete File listaemf.txt
   Endif

   For x=1 To Len(aFiles)
       cTexto:=cTexto + aFiles[x] + CRLF
   Next
   MemoWrit("listaemf.txt",cTexto )

   cString:="nConvert -multi -o " + cDestino + " -quiet -out pdf -c 5 -l listaemf.txt"
Endif

MsgRun("Espere","Exportando a PDF", {|| WAITRUN(cString,0 ) } )


MsgAlert("El fichero "+ AllTrim(cDestino) +".PDF ha sido creado correctamente.", " Exportar PDF ")

Return Nil

Y en rpreview.prg

En el MENU oMenu

//PDF
If oDevice:aMeta != NIl
MENUITEM "Exportar a PDF" ACTION PDFSave( oDevice:aMeta ) RESOURCE "SAVE"
SEPARATOR
EndIf
//

Re: APORTE. Exportar a PDF

Posted: Sat Jan 08, 2011 11:52 pm
by Adolfo
Persi..

Si tienes un rPreview modificado. la opcion que te dio MgSoft es la correcta.

Saludos

Re: APORTE. Exportar a PDF

Posted: Mon Jan 17, 2011 11:23 am
by Manuel Valdenebro
Adolfo wrote:Fivewinners.

Al inicio de nuestro sistema ( ojala al inicio de la Function MAIN() )

Code: Select all

RPrevUserBtns({|oPreview,oBar| ReportExtend(oPreview,oBar) })
Crear la funcion ReporExtend().. o cualquier otro nombre que le quieran poner
¿RPrevUserBtns es un método nuevo de la clase Preview?

Re: APORTE. Exportar a PDF

Posted: Mon Jan 17, 2011 11:42 am
by Adolfo
Manuel...

Esta presente desde FWH9.05 (Mayo 2009)

Saludos

Re: APORTE. Exportar a PDF

Posted: Mon Jan 17, 2011 4:25 pm
by Manuel Valdenebro
Adolfo wrote:Manuel...

Esta presente desde FWH9.05 (Mayo 2009)

Saludos

Gracias Adolfo.