clase tpdf

clase tpdf

Postby surGom » Tue Jun 14, 2011 9:13 pm

Hice un programa utilizando la clase y la verdad me gusto, y una vez que le tome la mano y con la ayuda que hace un tiempo hizo the full con el asunto de las filas pude realizar un informe de cuentas corrientes en pdf. Lo que no logro hacer es que me alinie las columnas de los importes y no le encontre la vuelta si alguien la utiliza me podría ayudar. Queda muy bien salvo el detalle comentado
Les envío el código que utilizé por si a alguien le interesa.

Code: Select all  Expand view  RUN

function creapdfcc(aCcli,nclia,lprove,cNapea,cMail)
local dresult :=  DEHASTA()
local cImpdos
local oprn
local nsaldo := 0
local nvalor := 0
local z := 0
 local cPath := "E:\fivehme\" + alltrim(cNapea) +".pdf"
 local oPdf
 local ntotal := 0
  n  := 2.9


 opdf := tpdf():new(cPath)
 TITULO(oPdf)

for z = 1 to len(aCCli)
      if aCCli[z,1] <= dresult[1]
          nsaldo := aCcli[z,5]
      nvalor := z +1
      else
          exit
      endif
next
titulo1(oPdf ,cnapea,dresult)
 if !empty(nsaldo)
      oPdf:Pdfatsay(("
Saldo al: " + dtoc(dresult[1])),cm2dpi(n+=.4 ),cmAncho(3.4))
      oPdf:Pdfatsay(transform(nsaldo,'@E 9,999,999.99'),cm2dpi(n),cmAncho(19))
 endif

iif(empty(nvalor), nvalor := 1, nvalor)
 for z = nvalor to len(aCCli)
       oPdf:Pdfatsay(transform(aCcli[z,1],"
@d"),cm2dpi(n+.4),cmAncho(1))
       oPdf:Pdfatsay(substr(oemtoansi(aCcli[z,2]),1,22) ,cm2dpi(n+.4),cmAncho( 3.4))  
  
      if !empty(aCcli[z,3])
              oPdf:Pdfatsay(transform(aCcli[z,3],"
@e 999,999.99") ,cm2dpi(n+=.4 ),cmAncho(9 ),.T. )  
       else
              oPdf:Pdfatsay( transform(aCcli[z,4],"
@e 999,999.99"),cm2dpi(n+=.4 ),cmAncho(14 ),.T.  )    
       endif
     oPdf:Pdfatsay(transform(aCcli[z,5],'@E 9,999,999.99'),cm2dpi(n ),cmAncho(19),.T. )                
      //       oPdf:Pdfatsay(StrZero1(aCcli[z,5],12),cm2dpi(n ),cmAncho(19),.T. )  no funciona así
 
       if n >=  25.4  .or. z = len(aCcli) .or. aCcli[z,1] > dresult[2]
            oPdf:Pdfatsay(replicate("
_",115),cm2dpi( n+=.4 ),10,.T.)    
        oPdf:Pdfatsay(("
Estado de cta. cte. al " + transform(aCcli[z,1],"@d")),cm2dpi( n+=.4 ),cmAncho(3.4),.T.)
            oPdf:Pdfatsay(transform(aCcli[z,5],'@E 9,999,999.99'),cm2dpi(n ),cmAncho(19))
            oPdf:Pdfatsay(replicate("
_",115),cm2dpi( n+=.4 ),10,.T.)  
       if  aCcli[z,1] > dresult[2]
            exit
       endif
       IF z != len(aCcli)
           opdf:Pdfclosepage()
           opdf:Pdfnewpage("
A4","P")
               n := 2.2
               titulo1(oPdf, cNapea,dresult)
           oPdf:Pdfatsay(("
Estado de cta. cte. al " + transform(aCcli[z,1],"@d")),cm2dpi( n+=.4 ),cmAncho(3.4),.T. )            
               oPdf:Pdfatsay(transform(aCcli[z,5],'@E 9,999,999.99'),cm2dpi(n ),cmAncho(19),.t.)
           endif
       endif*/
    next  


 opdf:Pdfclosepage()
 opdf:pdfclose()
 msginfo("
Archivo creado con éxito","Aviso del sistema")

 if !empty(cmail)
    correo(cMail,,("
Enviamos resumen de cuenta desde " + transform(dresult[1],"@d") + " hasta " +  transform(dresult[1],"@d") ),"Resumen de cuenta", alltrim(cPath ) )
endif
return .t.
/*******************************************************************************/
STATIC FUNCTION titulo(oPdf)
 opdf:Pdfnewpage("
A4","P")

opdf:Pdfimage("
e:\tpdf\logoc1.jpg", cm2dpi(2.5), 0,85,66)
oPdf:Pdfsetfont( "
TIMES",   BOLD, 10)
opdf:Pdfatsay("
QUÍMICA MEGA SA",cm2dpi( .7 ),100,.T.)
oPdf:Pdfsetfont( "
TIMES",NORMAL, 10)
oPdf:Pdfatsay("
Matanza 1456/58",cm2dpi( 1.2 ),100,.T.)
oPdf:Pdfatsay("
Avellaneda-Pcia Bs As",cm2dpi( 1.6 ),100,.T.)
oPdf:Pdfatsay("
T.E.: 4289-2700(Rotativas)",cm2dpi( 2.0 ),100,.T.)
oPdf:Pdfatsay(replicate("
_",115),cm2dpi( 2.5 ),10,.T.)
return nil
/*******************************************************************************/
static function titulo1(oPdf, cNapea,dresult)
local ctitu := "
RESUMEN DE CUENTA CORRIENTE"
local cDesde := "
Desde el:  " + dtoc(dresult[1])
local cHasta :=  "
Hasta el:  "  + dtoc(dresult[2])

oPdf:Pdfatsay(ctitu,cm2dpi(n+=.1 ),210)
oPdf:Pdfatsay(cNapea ,cm2dpi(n +=.4),10 )
oPdf:Pdfatsay(cDesde ,cm2dpi(n +=.4), 10)
oPdf:Pdfatsay(cHasta ,cm2dpi(n +=.4),10 )
oPdf:Pdfatsay(replicate("
_",115),cm2dpi(n ),10)
return nil

/*******************************************************************************/
surGom
 
Posts: 640
Joined: Wed Oct 19, 2005 12:03 pm

Re: clase tpdf

Postby ruben Dario » Wed Jun 15, 2011 1:02 pm

Mu gustaria hacer una prueba, tu tienes la clase completa para hacer el ejemplo.
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
User avatar
ruben Dario
 
Posts: 1070
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Re: clase tpdf

Postby surGom » Wed Jun 15, 2011 2:05 pm

Ruben pdflib.lib esta en la versión de xharbour la puedes usar. Acá te envío el link que en su momento publicó Manuel Mercado
http://www.box.net/shared/qfbeha7cb7, aca está la clase yo lo que hice fue bajarla y compilarla. Pero como te dijhe usando la librería que está en las lib de xharbour y usando los ch que bajes del link que te envíe la podes usar, sin compilarla.

Esta buena para esos informes en los que tenés que enviar resumenes de cta. Te los hace instantaneamente. Yo lo utilizó para generar el estado de cta de los clientes y automáticamente los envía por mail. El único problema que no pude resolver es en las columnas numéricas que me las encolumne del lado derecho, por defecto lo hace centrada, y no le encontré la vuelta. Sería interesante resolver eso y quedaría un pdf limpito. Si me mandas tu mail te envío como queda el archivo.

Espero te sea útil y puedas resolver la alineación de las columnas

Gracias
surGom
 
Posts: 640
Joined: Wed Oct 19, 2005 12:03 pm

Re: clase tpdf

Postby leondefrancia » Wed Jun 15, 2011 2:35 pm

Buenos días surGom, observo en el código que luego de generar el pdf lo envías por mail.

if !empty(cmail)
correo(cMail,,("Enviamos resumen de cuenta desde " + transform(dresult[1],"@d") + " hasta " + transform(dresult[1],"@d") ),"Resumen de cuenta", alltrim(cPath ) )
endif


Mi consulta es como lo haces, porque llevo algún tiempo lidiando con ese inconveniente. Verás, genero el pdf a través de PDFCreator pero a la hora de enviarlo como adjunto el correo llega truncado, por lo que al abrirlo dice archivo corrupto, he probado varias sugerencias todas sin éxito.
Desde ya muchas gracias.
Libreria: FWH/FWHX 9.11 25/November/2009
Harbour: Harbour 2.0.0 Beta2
Compilador: Borland C++ 5.5.1 versión 32 bits
Editor de Recursos: UEstudio 10.0
Gestor de B.D: A.D.A ( Advantage Data Architect )
S.O: Windows XP
leondefrancia
 
Posts: 33
Joined: Tue Jun 08, 2010 3:34 pm
Location: Rosario, Santa Fe. Argentina

Re: clase tpdf

Postby surGom » Wed Jun 15, 2011 2:44 pm

Así queda el ejemplo que envíe, lo único feo es la aileación

Image

y otra hoja
Image
surGom
 
Posts: 640
Joined: Wed Oct 19, 2005 12:03 pm

Re: clase tpdf

Postby surGom » Wed Jun 15, 2011 3:03 pm

León este enlace lo envío Karinha http://www.fivewin.com.br/exibedicas.asp?id=1063, y es lo que utilizo para enviar los mail. Envío las facturas electrónicas generadas y los listados solicitados. También utilizé el blat (hasta la ayuda de Karinha) y los archivos llegan lo mas bien.
Te aclaro que para la factura electrónica uso el pdfwriter ya que quiero que vean la factura generada y los obligo a guardar el documento manualmente, y luego la envían por mail en lotes.
En el caso de los otros pdf al crearlo por código es rapidísimo y al poner
correo(cMail,,("Enviamos resumen de cuenta desde " + transform(dresult[1],"@d") + " hasta " + transform(dresult[1],"@d") ),"Resumen de cuenta", alltrim(cPath ) )
Es instantáneo

Muestra un diálogo similar al redactar correo del outlook, dónde podes agregar comentarios y enviarlo

Espero te sirva de ayuda.
surGom
 
Posts: 640
Joined: Wed Oct 19, 2005 12:03 pm

Re: clase tpdf

Postby leondefrancia » Fri Jun 17, 2011 4:27 pm

Muchisimas gracias, había probado CDOSYS y me sucedía lo mismo, vi que en la función no utiliza el parámetro de timeout, así que probé lo mismo y santo remedio!
Nuevamente muchas gracias!
Libreria: FWH/FWHX 9.11 25/November/2009
Harbour: Harbour 2.0.0 Beta2
Compilador: Borland C++ 5.5.1 versión 32 bits
Editor de Recursos: UEstudio 10.0
Gestor de B.D: A.D.A ( Advantage Data Architect )
S.O: Windows XP
leondefrancia
 
Posts: 33
Joined: Tue Jun 08, 2010 3:34 pm
Location: Rosario, Santa Fe. Argentina

Re: clase tpdf

Postby surGom » Thu Jun 23, 2011 1:01 pm

Disculpen que vuelva sobre el tema, pero no logro hacer la alineación de las columnas numéricas, lo que vi es que si edito el pdf con el notepad, las columnas estan correctas :

Code: Select all  Expand view  RUN
BT 27.42 700.27 Td (19/01/2011) Tj ET
BT 93.23 700.27 Td (Factura     1-00083526) Tj ET
BT 246.78 700.27 Td (   22.599,56) Tj ET
BT 520.98 700.27 Td (  118.854,02) Tj ET
BT 27.42 688.93 Td (09/02/2011) Tj ET
BT 93.23 688.93 Td (Recibo         69684  ) Tj ET
BT 383.88 688.93 Td (   93.570,77) Tj ET
BT 520.98 688.93 Td (   25.283,25) Tj ET
BT 27.42 677.59 Td (09/02/2011) Tj ET
BT 93.23 677.59 Td (Recibo         69999  ) Tj ET


Si utilizó strzero se ubican correctamente pero es horrible la imagen. No encuentro en dónde de los códigos fuentes está la formula para que lo pueda alinear de alguna forma.Modifiqué strzero para que me reemplace por blancos los espacios pero igual los centra. Hay alguna forma de engañar para que me respete los blancos y quede expresado como mas arriba

Gracias
surGom
 
Posts: 640
Joined: Wed Oct 19, 2005 12:03 pm

Re: clase tpdf

Postby surGom » Fri Jun 24, 2011 7:50 pm

Bueno lo resolvi gracias a Claudio H que esta suscripto en xharbour spanish portuguese, usando el tipo de letra Courier que es de ancho fijo el listado queda perfecto.
Como puedo saber que fuentes son de ancho fijo

Luis
surGom
 
Posts: 640
Joined: Wed Oct 19, 2005 12:03 pm

Re: clase tpdf

Postby Manuel Valdenebro » Wed Jan 18, 2012 12:07 pm

Luis,

Veo que en tu ejemplo usas la funcion cmAncho. Me imagino que es para calcular el ancho en centimetros, complementaria de la funcion de TheFull para el alto.

¿Podrias publicar aqui esa funcion cmancho? ¿Simplemente ( nCM * 72 / 2.54 ) ?

Muchas gracias
Un saludo

Manuel
User avatar
Manuel Valdenebro
 
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Re: clase tpdf

Postby karinha » Thu Aug 27, 2015 2:48 pm

Gracias, mui bueno ejemplo.

Code: Select all  Expand view  RUN

function cm2dpi( nCM, page, lHeight )
   Local nHeight,nDpi := 72
   Local nRes

   if empty( lHeight )
      lHeight := .T.
   endif

   if lHeight
      nHeight := 842.0
      nRes := nHeight - ( nCM * nDpi / 2.54 )
   else
      nRes := ( nCM * nDpi / 2.54 )
   endif

return nRes
 


Gracias, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7831
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: SantaCroya and 23 guests