Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Consultar un Archivo PDF en una Forma (https://www.clubdelphi.com/foros/showthread.php?t=86259)

adls65 07-07-2014 20:57:13

Consultar un Archivo PDF en una Forma
 
Hola, como puedo hacer una consulta de un Archivo PDF dentro de mi aplicacion (solo abrir el archivo PDF, no modificar) en una forma independiente, encontre aqui mismo en el CLUB lo siguiente:

ShellExecute(nombre_del_form.Handle,nil,PChar('c:\archivo.pdf'),'','',SW_SHOWNORMAL);

y si funciona , pero me abre el PDF como si lo ejecutara desde windows, normal.

Tengo DELPHI 6 y el Sistema Operativo WIN 7 PRO.

Muchas Gracias.

ecfisa 07-07-2014 21:12:13

Hola adls65.

Busca en los foros por el componente TAcroPDF que realiza justamente lo que deseas.

Aquí los pasos para agregarlo: Use Adobe Acrobat (PDF) Files in a Delphi Application

Saludos :)

radenf 08-07-2014 00:43:55

Estimados adls65 y ecfisa:

El componente TAcroPDF ya no tiene soporte para aplicaciones de 32 bits y genera un AccessViolation con la última versión de Adobe Reader.
Yo no recomiendo utilizarlo hasta que Adobe solucione el problema de compatibilidad y al parecer no pretenden hacerlo.
De hecho el código que muestra adls65 es el adecuado para visualizar archivos PDF, ya que es la API de Windows quien se encarga de lidiar con el visor PDF determinado del sistema.
Para más información en estos links:

http://helpx.adobe.com/acrobat/kb/vb...sue-11007.html

https://forums.adobe.com/message/6400765#6400765

Saludos

ecfisa 08-07-2014 02:13:15

Hola radenf.

No estaba al tanto, gracias por el dato ^\||/

Saludos :)

ecfisa 08-07-2014 02:31:53

Hola.

Leyendo los enlaces que amablemente nos facilitó radenf, vi la sugerencia de reemplazar por un TWebBrowser para mostrar el archivo .pdf dentro de un form. Y pude comprobar que lo hace correctamente en Win 32 y Adobe Reader v 11.0.07.79.

Saludos :)

nlsgarcia 08-07-2014 08:26:42

adls65,

Cita:

Empezado por adls65
...como puedo hacer una consulta de un Archivo PDF dentro de mi aplicación...

Revisa este código:
Código Delphi [-]
 unit Unit1;
 
 interface
 
 uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, StdCtrls, OleCtrls, SHDocVw;
 
 type
   TForm1 = class(TForm)
     WebBrowser1: TWebBrowser;
     Button1: TButton;
     Button2: TButton;
     procedure Button1Click(Sender: TObject);
     procedure Button2Click(Sender: TObject);
   private
     { Private declarations }
   public
     { Public declarations }
   end;
 
 var
   Form1: TForm1;
 
 implementation
 
 {$R *.dfm}
 
 // Load PDF Files
 procedure TForm1.Button1Click(Sender: TObject);
 var
    openDialog : TOpenDialog;    // Open dialog variable
 begin
    openDialog := TOpenDialog.Create(self);
    openDialog.InitialDir := GetCurrentDir;
    openDialog.Options := [ofFileMustExist];
    openDialog.Filter := 'PDF files|*.pdf';
    openDialog.FilterIndex := 1;
    if openDialog.Execute then
       WebBrowser1.Navigate('file://' + openDialog.FileName);
 end;
 
 // UnLoad PDF Files
 procedure TForm1.Button2Click(Sender: TObject);
 begin
    WebBrowser1.Stop;
 end;
 
 end.
El código anterior en Delphi7 sobre Windows 7 x32, visualiza archivos PDF en el componente TWebBrowser como se muestra en la siguiente imagen:



Revisa esta información:
Espero sea útil :)

Nelson.

adls65 08-07-2014 20:49:57

Agradecimiento
 
Quiero agradecer a radenf, ecfisa y nlsgarcia por sus amables comentarios asi como de tomarse el tiempo para ayudarme, la opcion de nlsgarcia me funciono exactamente para mis necesidades.

Muchas gracias al CLUB y a uds principalmente.

radenf 12-07-2014 13:07:49

Cita:

Empezado por ecfisa (Mensaje 478808)
Leyendo los enlaces que amablemente nos facilitó radenf, vi la sugerencia de reemplazar por un TWebBrowser para mostrar el archivo .pdf dentro de un form. Y pude comprobar que lo hace correctamente en Win 32 y Adobe Reader v 11.0.07.79.

En Windows7 64 bits el uso del WebBrowser con el código de nlsgarcia no me funciona con la última versión de Adobe Reader y congela la aplicación.
Saludos

ecfisa 12-07-2014 14:01:28

Cita:

Empezado por radenf (Mensaje 478906)
En Windows7 64 bits el uso del WebBrowser con el código de nlsgarcia no me funciona con la última versión de Adobe Reader y congela la aplicación.
Saludos

Hola radenf.

No tuve oportunidad de probarlo en W 64 bits, pero ya enterado de tu prueba, la solución para ambas plataformas debe ser ShellExcecute como comentaste anteriormente.

Saludos :)

radenf 12-07-2014 15:34:49

Cita:

Empezado por ecfisa (Mensaje 478907)

No tuve oportunidad de probarlo en W 64 bits, pero ya enterado de tu prueba, la solución para ambas plataformas debe ser ShellExcecute como comentaste anteriormente.

Es la única que a mí me funciona.
Otra opción que probé es utilizar un OleContainer, que abre casi cualquier archivo, pero desafortunadamente no logré redimensionar el archivo Pdf y la calidad de la visualización no terminó de gustarme.
Saludos

nlsgarcia 12-07-2014 19:56:48

radenf,

Cita:

Empezado por radenf
...En Windows 7 64 bits el uso del WebBrowser con el código de nlsgarcia no me funciona con la última versión de Adobe Reader y congela la aplicación...

Te comento:

1- El código propuesto en el Msg #6 no funciona correctamente en Delphi 7 bajo Windows 7 Professional x64 y Acrobat Reader 11.0.03

2- Si se compila el código propuesto en el Msg #6 en Delphi 7 bajo Windows 7 Professional x32 y se ejecuta en Windows 7 Professional x64 funciona correctamente.

3- El código propuesto en el Msg #6 funciona correctamente en Delphi 2010 bajo Windows 7 Professional x64 y Acrobat Reader 11.0.03

4- El código propuesto en el Msg #6 funciona correctamente en Delphi XE4 bajo Windows 7 Professional x64 y Acrobat Reader 11.0.03 si se compila en 32 Bits y no funciona correctamente si se compila en 64 Bits.

Pregunto:

1- ¿Puedes compilar en 32 Bits y ejecutar en 64 Bits el código propuesto en el Msg #6?.

2- ¿Que versión de Delphi utilizas?.

3- ¿Probastes el código propuesto en el Msg #10 del hilo
ActiveX AcroPdf no funciona?

Espero sea útil :)

Nelson.

radenf 12-07-2014 23:20:40

Estimado Nelson:

Los problemas que yo he detectado se producen sólo con la última versión de Adobe Reader 11.0.07, que es la que incluye AcroPdf.dll y AcroPdf64.dll y no con las versiones anteriores. Según la gente de Adobe el componente AcroPdf no sería capaz de seleccionar la dll adecuada y eso provocaría los fallos, situación que al parecer no piensan corregir, ya que no pretenden seguir dando soporte a sistemas de 32 bits.

Respondiendo tus preguntas:

1. Siempre compilo en 32 bits, con Delphi instalado sobre Windows7 Profesional de 64 bits (No tengo posibilidad de utilizar Windows de 32 bits).
2. Utilizo Delphi 2007.
3. Probé tu código propuesto en el Msg #10 del hilo ActiveX AcroPdf no funciona, pero no me gustó que el AcrobatReader se abriera dentro de un form.

Finalmente opté por utilizar el siguiente código, que me ha funcionado bien, sin importar la versión de Adobe Reader:

Código Delphi [-]
ShellExecute(Application.Handle,'', PChar(DBEditInforme.Text), nil,nil,SW_SHOW);

Muchas gracias por tus aportes y sugerencias.
Saludos

nlsgarcia 13-07-2014 03:01:39

radenf,

Cita:

Empezado por radenf
...Probé tu código propuesto en el Msg #10...pero no me gustó que el Acrobat Reader se abriera dentro de un form...

:D

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, AcroPDFLib_TLB, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    AcroPDF1: TAcroPDF;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
   if OpenDialog1.Execute then
      AcroPDF1.LoadFile(OpenDialog1.FileName);
end;

end.
El código anterior en Delphi 7 bajo Windows 7 Professional x32 y x64, permite visualizar un documento PDF por medio del componente TAcroPDF de Adobe Reader 11.0.07, sin embargo en Delphi 2010 y Delphi XE4 bajo Windows 7 Professional x32 y x64 da el siguiente error :



Según entiendo el mismo error se presenta en Delphi 2007, sin embargo es interesante el hecho de que en Delphi 7 el componente funciona correctamente según lo esperado.

Espero sea útil :)

Nelson.

radenf 13-07-2014 13:25:37

Muchas gracias Nelson.
Saludos

radenf 13-07-2014 14:03:58

Cita:

Empezado por radenf (Mensaje 478906)
En Windows7 64 bits el uso del WebBrowser con el código de nlsgarcia no me funciona con la última versión de Adobe Reader y congela la aplicación.
Saludos

Me corrijo.
Para que funcione el código, en el WebBrowser1 debe colocarse la propiedad Silent:= True;

Saludos

nlsgarcia 13-07-2014 16:58:39

radenf,

Cita:

Empezado por radenf
...Para que funcione el código, en el WebBrowser1 debe colocarse la propiedad Silent:= True...

^\||/

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, SHDocVw;

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Load PDF Files
procedure TForm1.Button1Click(Sender: TObject);
var
   openDialog : TOpenDialog;
begin
   openDialog := TOpenDialog.Create(self);
   openDialog.InitialDir := GetCurrentDir;
   openDialog.Options := [ofFileMustExist];
   openDialog.Filter := 'PDF files|*.pdf';
   openDialog.FilterIndex := 1;
   if openDialog.Execute then
   begin
      WebBrowser1.Silent := True;
      WebBrowser1.Navigate('file://' + openDialog.FileName);
   end;
end;

// UnLoad PDF Files
procedure TForm1.Button2Click(Sender: TObject);
begin
   WebBrowser1.Stop;
end;

end.
El código anterior en Delphi7, Delphi 2010 y Delphi XE4 sobre Windows 7 Professional x32 y x64, visualiza archivos PDF en el componente TWebBrowser.

Nota del Msg #13 : El componente TAcroPDF de Adobe Reader 11.0.07, funciona en Delphi 7 solo si es ejecutado directamente desde el ejecutable, en modo Debug no funciona.

Espero sea útil :)

Nelson.


La franja horaria es GMT +2. Ahora son las 02:32:57.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi