FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour La previsualizaci贸n de un reporte se puede envar por mail?
Posts: 346
Joined: Mon Oct 05, 2009 03:35 PM
La previsualizaci贸n de un reporte se puede envar por mail?
Posted: Thu May 06, 2010 05:45 PM

Hola:

amigos del foro, pues eso, cuando genero un reporte y lo pre-visualizo, es posible realizar la impresi贸n, que en vez sea enviado a la impresora, se env铆e a Outlook y se pegue como texto en en cuerpo de un correo y pueda ser enviado?

es la idea de un cliente ya que me mencion贸 que el gasto de una hoja impresa ayudar铆a a que un 谩rbol viviera un poco mas en esta tierra y le encuentro toda la raz贸n.

Saludos desde Chile.

:D:D

SkyPe: armando.lagunas@hotmail.com

Mail: armando.lagunas@gmail.com
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: La previsualizaci贸n de un reporte se puede envar por mail?
Posted: Thu May 06, 2010 05:51 PM

Tocayo:

Directamente v铆a c贸digo me parece que no es posible, yo lo hago a trav茅s de una impresora virtual que te crea el archivo PDF, lo pone en el adjunto de tu correo y abre tu correo predeterminado, listo para enviarse, o bien, tambien lo puedes mandar a la impresora para
que se imprima el papel.

Por cierto, se llama PDFFactory.

Saludos

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
Re: La previsualizaci贸n de un reporte se puede envar por mail?
Posted: Thu May 06, 2010 06:23 PM

Armando (Gato), lo que te dice Armando (rat贸n) es lo correcto. Hay una posible soluci贸n que aunque laboriosa, quizas pueda servirte si el cliente merece el esfuerzo:

1) Tienes que poner un bot贸n en el preview para enviar por email. Al pulsar este bot贸n, llama a una funcion y al volver de esta funcion finaliza el previo.

2) En la funci贸n que hemos llamado en el punto anterior, preparas en c贸difo HTML el contenido del report y finaliza enviando el email con el texto HTML.

Un saludo



Manuel
Posts: 326
Joined: Sun Oct 09, 2005 05:22 PM
Re: La previsualizaci贸n de un reporte se puede envar por mail?
Posted: Fri May 07, 2010 04:01 AM
En mi caso uso este c贸digo para generar archivos PDF y enviar los documentos por correo:

Tambi茅n he realizado cambios a TPrinter para generar el PDF sin pasar por la vista previa y hacer lo que se desee con el archivo generado.

oPrn:=PrintBegin(cName,.F.,lPrv,,.T.,lPdf,cFile)

Descargas: http://www.despachoarteaga.com.mx/Print2Pdf.zip

Code (fw): Select all Collapse
// --- Cambios a RPreview para trabajar con Image2PDF

// ---
     DEFINE BUTTON RESOURCE "Acrobat" OF oBar ;
          MESSAGE "Generar archivo tipo PDF"  ;
          ACTION  SavePDF( oDevice, .f. ) ;
          TOOLTIP "Generar archivo PDF"

     DEFINE BUTTON RESOURCE "Email" OF oBar ;
          MESSAGE "Enviar archivo PDF por correo"  ;
          ACTION  SavePDF( oDevice, .t. ) ;
          TOOLTIP "Enviar por correo"

// ---
               MENUITEM "Generar PDF" ACTION SavePDF( oDevice, .f. ) ;
                    MESSAGE "Generar archivo tipo PDF" RESOURCE "Acrobat"

               MENUITEM "Enviar por correo" ACTION SavePDF( oDevice, .t. ) ;
                    MESSAGE "Enviar archivo PDF por correo" RESOURCE "Email"



FUNCTION SavePDF(oDevice,lEmail)
   LOCAL error, hLibImg2PDF
   LOCAL imageFilename:=" "
   LOCAL cPdfFilename
   LOCAL nI, iErr:=0
   LOCAL aFiles:={}, cTemp, oMail, cMail, cNick
   LOCAL oDlg, oFont, oEml[4], aEml[4], lCont:=.f.
   cPdfFileName:=cUTem+"\"+Left(cNSys,2)+"_Temp\"+oDevice:cDocument+".Pdf"
   IF !File("Image2PDF.Dll")
      MsgAlert("No existe DLL para generar PDFs.","Precauci贸n!")
      RETURN (NIL)
   ENDIF
   aFiles:=oDevice:aMeta
   hLibImg2PDF:=LoadLib32("Image2PDF.Dll")
   IF ValType(aFiles)=="A"
      I2PDF_License("LICENCIA")
      iErr:=IPMeta()              // Flag that his is a meta file
      iErr:=IPSize()              // Reset the size
      iErr:=IPMetaAdjustText()
      iErr:=IPSetDPI(0)           // Set DPI to the default for PDF's.  It works better
      FOR nI:=1 TO Len(aFiles)    // Build the pages using the array of temp files
         CursorWait()
         imageFilename:=aFiles[nI]
         iErr:=IPAddImg(imageFilename)
      NEXT nI
      CursorWait()
      iErr:=IPMakePDF(cPdfFileName,0,error,40)   // Create the PDF.
   ENDIF
   FreeLib32(hLibImg2PDF)
   CursorArrow()
   IF !File(cPdfFileName)
      MsgInfo("No se gener贸 el archivo PDF.","Informaci贸n!")
   ELSE
      IF !lEmail
         ShellExecute(,"Open",cPdfFileName,"",".\",.T.)
      ELSE
         aEml[1]:=""
         aEml[2]:=AllTrim(Control->NomEmp)
         aEml[3]:=oDevice:cDocument+".Pdf"
         aEml[4]:="Adjunto informaci贸n de... "
         DEFINE FONT oFont NAME "MS Sans Serif" SIZE 0,-10
         DEFINE DIALOG oDlg RESOURCE "Email" FONT oFont
         REDEFINE GET oEml[1] VAR aEml[1] ID 101 MEMO OF oDlg VALID !Empty(aEml[1])
         oEml[1]:bGotFocus:={|| oEml[1]:SetSel(0,0)}
         REDEFINE GET oEml[2] VAR aEml[2] ID 102 MEMO OF oDlg VALID !Empty(aEml[2])
         oEml[2]:bGotFocus:={|| oEml[2]:SetSel(0,0)}
         REDEFINE GET oEml[3] VAR aEml[3] ID 103 MEMO OF oDlg VALID !Empty(aEml[3])
         oEml[3]:bGotFocus:={|| oEml[3]:SetSel(0,0)}
         REDEFINE GET oEml[4] VAR aEml[4] ID 104 MEMO OF oDlg VALID !Empty(aEml[4])
         oEml[4]:bGotFocus:={|| oEml[4]:SetSel(0,0)}
         REDEFINE BUTTON ID 110 OF oDlg ACTION (lCont:=.T.,oDlg:End())
         REDEFINE BUTTON ID 120 OF oDlg ACTION (lCont:=.F.,oDlg:End()) CANCEL
         ACTIVATE DIALOG oDlg
         IF lCont
            cNick:=Substr(aEml[1],1,AT("@",aEml[1])-1)
            DEFINE MAIL oMail  ;
               SUBJECT aEml[2] ;
               TO cNick,aEml[1] FILES cPdfFileName,cPdfFileName TEXT aEml[4]
            ACTIVATE MAIL oMail
         ENDIF
         oFont:End()
      ENDIF
   ENDIF
RETURN (NIL)

//--- Wrappers para Image2PDF ---------------------------------------------------------------//


   DLL32 STATIC FUNCTION I2PDF_License( code AS LPSTR) AS LONG;
   PASCAL FROM "I2PDF_License" LIB "IMAGE2PDF.dll"

   DLL32 STATIC FUNCTION IPMeta( ) AS LONG;
   PASCAL FROM "I2PDF_MetaToNativePDF" LIB "Image2PDF.dll"

   DLL32 STATIC FUNCTION IPMetaAdjustText() AS LONG;
   PASCAL FROM "I2PDF_MetaTextFitBoundingRect" LIB "Image2PDF.dll"

   DLL32 STATIC FUNCTION IPSize( ) AS LONG;
   PASCAL FROM "I2PDF_UseEMFDeviceSize" LIB "Image2PDF.DLL"

   DLL32 STATIC FUNCTION IPAddImg( cImage AS LPSTR ) AS LONG;
   PASCAL FROM "I2PDF_AddImage" LIB "Image2PDF.dll"

   DLL32 STATIC FUNCTION IPSetDpi( nDpi AS LONG ) AS LONG;
   PASCAL FROM "I2PDF_SetDPI" LIB "Image2PDF.dll"

   DLL32 STATIC FUNCTION IPMakePDF( cOutFile AS LPSTR, nOptions AS LONG, cErrTxt AS LPSTR, nMaxESize AS LONG ) AS LONG;
   PASCAL FROM "I2PDF_MakePDF" LIB "Image2PDF.dll"

   DLL32  FUNCTION COPYFILE( cExistName AS LPSTR, cNewName AS LPSTR, nFailIfExist AS LONG ) AS BOOL;
   PASCAL FROM "CopyFileA" LIB "kernel32.dll"

   DLL32 FUNCTION xI2PDF_BatesFormat( format AS LPSTR ) AS LONG;
   PASCAL FROM "I2PDF_BatesFormat" LIB "Image2PDF.dll"

   DLL32 FUNCTION xI2PDF_BatesLocation( verticalPosition AS LONG, horizontalPosition AS LONG, orientation AS LONG, margin AS LONG) AS LONG;
   PASCAL FROM "I2PDF_BatesLocation" LIB "Image2PDF.dll"

   DLL32 FUNCTION xI2PDF_BatesFont_Int( iSize AS LONG, FontID AS LPSTR, fillRed AS LONG, fillGreen AS LONG, fillBlue AS LONG, iStyle AS LONG, otherRed AS LONG, otherGreen AS LONG, otherBlue AS LONG) AS LONG;
   PASCAL FROM "I2PDF_BatesFont_Int" LIB "Image2PDF.dll"

   DLL32 FUNCTION xI2PDF_BatesBackground_Int( shape AS LONG, bkRed AS LONG, bkGreen AS LONG, bkBlue AS LONG, borderRed AS LONG, borderGreen AS LONG, borderBlue AS LONG  ) AS LONG;
   PASCAL FROM "I2PDF_BatesBackground_Int" LIB "Image2PDF.dll"

//-------------------------------------------------------------------------------------------//
Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
Re: La previsualizaci贸n de un reporte se puede envar por mail?
Posted: Fri May 07, 2010 08:34 PM

Armando,

En la clase Rpreview, busca el metodo ::printprv(). Alla es donde se borra los metafiles ->DeleteEnhMetafile( hMeta ). Puedes tratarlo como quiera, p.e. hacer una copia a una carpeta, enviarlos, ... y borrarlos luego claro :-)

Ciao.
C.

Salutacions, saludos, regards

"...programar es f谩cil, hacer programas es dif铆cil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 346
Joined: Mon Oct 05, 2009 03:35 PM
Re: La previsualizaci贸n de un reporte se puede envar por mail?
Posted: Sat May 08, 2010 04:07 AM

ok gracias por sus consejos, lo voy a implementar y cuando lo tenga funcionando les comento.

Saludos desde Chile.

SkyPe: armando.lagunas@hotmail.com

Mail: armando.lagunas@gmail.com
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: La previsualizaci贸n de un reporte se puede envar por mail?
Posted: Sun Mar 06, 2011 08:24 PM

El link esta roto, sera que alguien lo puede re-subir o informar de donde descargarlo, gracias.

Dios no est谩 muerto...



Gracias a mi Dios ante todo!

Continue the discussion