APORTE. Exportar a PDF
Posted: Wed Jan 05, 2011 3:05 pm
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() )
Crear la funcion ReporExtend().. o cualquier otro nombre que le quieran poner
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...
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
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
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) })
Code: Select all
Function ReportExtend( oPreview, oBar )
Define Button of oBar;
Resource "SPDF";
Tooltip "Exportar a PDF";
Action REP2PDF(oPreview)
Return Nil
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
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.
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