[vfp] Mostrar archivo PDF en un form

2,645 views
Skip to first unread message

Irlandes 1960

unread,
Mar 17, 2011, 10:54:59 PM3/17/11
to publice...@googlegroups.com
Hola a todos. Tengo en un programa un ingreso de gastos asociados a una operacion de puerto, hasta ahi todo bien
El tema es que mi cliente escanea los comprobantes de gastos y va armando con ellos un archivo digital, que esta a disposicion de su cliente mediante otra aplicacion, y a mi se me ocurrio la mala idea de permitirle asociar el nombre del archivo de la imagen del gasto al registro del gasto en mi sistema, con la idea de que con un simple click en una consulta, desplegar la imagen.
hasta ahi era un simple campito adicional en la tabla, con un boton de captura de un archivo, y en la consula con doble click llamar un image para que lo muestre, ya que yo suponia estaba todo en formatos jpg.
Pero la sorpresa es que los archivos estan en formato PDF
Y el objeto image no acepta mostrar el pdf.
¿Alguien me puede orientar de como desplegar el pdf en pantalla? posiblemente algun createobjet o alguna otra solucion.
se tambien que hay una forma de pedirle a windows que abra un archivo cualquiera con la aplicacion que ese tipo de archivo tiene asociado, y tambien podria ser una solucion, pero no recuerdo como era eso.
desde ya gracias

 

Guillermo MDQ

unread,
Mar 18, 2011, 1:19:40 AM3/18/11
to Comunidad de Visual Foxpro en Español
Esto te puede servir:

*/// En el metodo Init de un Form:

This.AddObject("owb","oleControl","Shell.Explorer.2")
This.oWb.Top = 0
This.oWb.Left = 0
This.oWb.Width = Thisform.Width
This.oWb.Height = Thisform.Height
This.oWb.Visible = .T.
This.oWb.Anchor = 240

This.AddProperty("cPDFFileName","")
This.AddProperty("nPdfLoadTimeout",30)

* Get PDF file name
Thisform.cPdfFileName = Getfile("pdf")

* Display the name in the textbox
This.Caption = Thisform.cPdfFileName
If Not Empty(Thisform.cPdfFileName)
* Display PDF
Thisform.ShowPdf()
Endif

*//// Crea un metodo ShowPDF con este codigo:

Local lnSeconds
* Clear Web browser control by loading blank page
Thisform.oWB.Object.Navigate2("About:Blank")
* Wait for load to complete
lnSeconds = Seconds()
Do While (Thisform.oWB.Object.Busy Or Thisform.oWB.Object.ReadyState
<> 4) ;
AND (Seconds() - lnSeconds) < This.nPdfLoadTimeout
DoEvents
Enddo

* Load PDF
Wait Window Nowait "Cargando PDF ..."
Thisform.oWB.Object.Navigate2(Thisform.cPdfFileName)
* Wait for PDF to load
lnSeconds = Seconds()
Do While (Thisform.oWB.Object.Busy Or Thisform.oWB.Object.ReadyState
<> 4) ;
AND (Seconds() - lnSeconds) < This.nPdfLoadTimeout
DoEvents
Enddo
Wait Clear


Saludos
Guillermo


Richard Silva

unread,
Mar 18, 2011, 6:52:25 AM3/18/11
to publice...@googlegroups.com
Hola,

Puedes pedirle a windows que abra el archivo con la aplicación asociada, es una solución más genérica y pudiera ser de mayor utilidad en otras áreas de la aplicación.

Si dominas un poco de Inglés:

Introducing ShellExecute() por Mike Lewis

http://www.ml-consult.co.uk/foxst-26.htm

En portalfox encontré esto:

http://www.portalfox.com/index.php?name=Sections&req=viewarticle&artid=78&allpages=1&theme=Printer


--
Saludos

Miguel Canchas

unread,
Mar 18, 2011, 9:30:16 AM3/18/11
to publice...@googlegroups.com

RUN /N Explorer.Exe c:\Teste1.pdf

 

LO pasaron hace un momento.

 

MK

Irlandes 1960

unread,
Mar 18, 2011, 9:46:57 AM3/18/11
to publice...@googlegroups.com
Muchas gracias.
Como primera solucion para salir del paso use el shell pasandole el nombre del archivo
loShell = CREATEOBJECT("Shell.Application")

loShell.ShellExecute(lcFile)

RELEASE loShell

Con mas tiempo voy a ver la solucion que me acerco el colega guillermo para que tenga un look mas vfp
gracias a todos, y larga vida al Zorro

elkin dario uribe torres

unread,
Mar 18, 2011, 12:43:27 PM3/18/11
to publice...@googlegroups.com
Si lo que buscas es parecido a la imagen adjunta, solo utiliza el siguiente codigo donde en un formulario Vfp instancias el reader.

PARAMETERS LcArchivoVer

*********************************************************
PUBLIC oform1

oform1=NEWOBJECT("verpdf")

oform1.Show
oForm1.Olecontrol1.LoadFile(LcArchivoVer)
oForm1.refresh
RETURN


**************************************************
DEFINE CLASS verpdf AS form

   Height = 600
   Width = 800
   AutoCenter = .T.
   Caption = "Visualizar Archivos PDF"
   Icon = "c:\mi_icono.ico"
   Name = "verpdf"
   TitleBar = 1
   BorderStyle = 2
   Closable = .T.
   MaxButton = .F.
   MinButton = .F.
   ControlBox = .T.
   ShowWindow = 0
   WindowType = 0

   ADD OBJECT olecontrol1 AS olecontrol WITH ;
      OLECLASS = "AcroPDF.PDF.1" , ;
      Top = 12, ;
      Left = 12, ;
      Height = 576, ;
      Width = 776, ;
      Name = "Olecontrol1", ;
      Tag = "Noskin"

ENDDEFINE

******************************************************

Saludos


Elkin Uribe
Medellin - Colombia
visorpdfJpg.JPG

Mario Dal Degan

unread,
Mar 21, 2011, 8:43:37 AM3/21/11
to Comunidad de Visual Foxpro en Español
Elkin:
Probé tu código y funciona perfecto siempre y cuando lo haga desde un
prg. Ahora bien, si creo un formulario y le inserto el objeto OLE
indefectiblemente me da un error al momento de ejecutar. El error es
OLE error code 0x80004005.... etc. No logro comprender cuál es la
diferencia.
Saludos.

Mario Dal Degan

On 18 mar, 13:43, elkin dario uribe torres <eduribe2...@gmail.com>
wrote:
> El 18 de marzo de 2011 08:46, Irlandes 1960 <irlandes1...@gmail.com>escribió:
>
> > Muchas gracias.
> > Como primera solucion para salir del paso use el shell pasandole el nombre
> > del archivo
> > loShell = CREATEOBJECT("Shell.Application")
>
> > loShell.ShellExecute(lcFile)
>
> > RELEASE loShell
> > Con mas tiempo voy a ver la solucion que me acerco el colega guillermo para
> > que tenga un look mas vfp
> > gracias a todos, y larga vida al Zorro
>
> > El 18 de marzo de 2011 10:30, Miguel Canchas <mcanc...@ximesa.com>escribió:
>
> >   RUN /N Explorer.Exe c:\Teste1.pdf
>
> >> LO pasaron hace un momento.
>
> >> MK
>
> >> *De:* publice...@googlegroups.com [mailto:
> >> publice...@googlegroups.com] *En nombre de *Irlandes 1960
> >> *Enviado el:* jueves, 17 de marzo de 2011 09:55 p.m.
> >> *Para:* publice...@googlegroups.com
> >> *Asunto:* [vfp] Mostrar archivo PDF en un form
>
> >> Hola a todos. Tengo en un programa un ingreso de gastos asociados a una
> >> operacion de puerto, hasta ahi todo bien
>
> >> El tema es que mi cliente escanea los comprobantes de gastos y va armando
> >> con ellos un archivo digital, que esta a disposicion de su cliente mediante
> >> otra aplicacion, y a mi se me ocurrio la mala idea de permitirle asociar el
> >> nombre del archivo de la imagen del gasto al registro del gasto en mi
> >> sistema, con la idea de que con un simple click en una consulta, desplegar
> >> la imagen.
>
> >> hasta ahi era un simple campito adicional en la tabla, con un boton de
> >> captura de un archivo, y en la consula con doble click llamar un image para
> >> que lo muestre, ya que yo suponia estaba todo en formatos jpg.
>
> >> Pero la sorpresa es que los archivos estan en formato PDF
>
> >> Y el objeto image no acepta mostrar el pdf.
>
> >> ¿Alguien me puede orientar de como desplegar el pdf en pantalla?
> >> posiblemente algun createobjet o alguna otra solucion.
>
> >> se tambien que hay una forma de pedirle a windows que abra un archivo
> >> cualquiera con la aplicacion que ese tipo de archivo tiene asociado, y
> >> tambien podria ser una solucion, pero no recuerdo como era eso.
>
> >> desde ya gracias
>
>
>
>  visorpdfJpg.JPG
> 135 KVerDescargar
Reply all
Reply to author
Forward
0 new messages