Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Pdf Acrobat 11 (https://www.clubdelphi.com/foros/showthread.php?t=86336)

shoulder 07-08-2014 21:01:10

Adobe
 
Nelson me quede pensando..no hay forma que muestre el PDF como una imagen y ahi lo protejo?. Sigo buscandoi por todos los foros y hablan del mismo problema.

nlsgarcia 07-08-2014 21:18:06

shoulder,

Cita:

Empezado por shoulder
...no hay forma que muestre el PDF como una imagen y ahi lo protejo...

:rolleyes:

Estoy analizando otra solución, hasta ahora se adapta a tus requerimientos y mucho más, actualmente estoy trabajando en los detalles de implementación, cuando tenga algo más concreto lo publico lo más pronto posible :D

Pregunto : ¿Cual es el objetivo de la aplicación que requiere el View PDF?, ¿En que área y país se ubica la empresa(s) que utilizaran la aplicación? :confused:

Saludos,

Nelson.

shoulder 07-08-2014 21:56:57

Adobe
 
Hola Nelson estoy en Argentina, el tema es que firman digitalmente por ejemplo una nota se guarda en el servidor ese pdf y es solamente para visualizar la imagen por eso use el webbrowser que funciona excelente. El unico tema fue el famoso F8 que me comentaste y la Barra1 que permite copiar la nota. El ejemplo concreto es visualizar el PDF nada mas anulando todas las barras que en el principio funciona bien.

Gracias!!.

nlsgarcia 08-08-2014 09:41:02

shoulder,

Cita:

Empezado por shoulder
...El ejemplo concreto es visualizar el PDF nada mas anulando todas las barras...

:rolleyes:

Te comento:

1- Para evitar los problema mencionados en tu caso particular en el Msg #19 opte por una solución alternativa : Sumatra PDF.

Cita:

What is Sumatra PDF?

Sumatra PDF is a free PDF, eBook (ePub, Mobi), XPS, DjVu, CHM, Comic Book (CBZ and CBR) reader for Windows.


Sumatra PDF is powerful, small, portable and starts up very fast.


Simplicity of the user interface has a high priority
.
2- Sumatra PDF permite parametrizar las opciones de visualización y funcionamiento de la aplicación, por medio de los archivos de configuración sumatrapdfrestrict.ini y SumatraPDF-settings.txt.

3- Sumatra PDF puede ser instalado de forma convencional o ser usado en su versión portable, para el código del ejemplo se utilizo la opción portable.

4- Sumatra PDF puede ser utilizado como un plugin dentro de un componente contenedor (TPanel, TForm), por medio de la opción: -plugin

5- Sumatra PDF es muy rápido, en pruebas realizadas en local un documento PDF de 857 páginas se cargo completamente en 2 segundos.

Revisa este código
Código Delphi [-]
  unit Unit1;
  
  interface
  
  uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, Menus, ShellAPI, ExtCtrls, TlHelp32;
  
  type
    TForm1 = class(TForm)
      Panel1: TPanel;
      Button1: TButton;
      Button2: TButton;
      procedure Button1Click(Sender: TObject);
      procedure Button2Click(Sender: TObject);
      procedure FormCreate(Sender: TObject);
      procedure FormClose(Sender: TObject; var Action: TCloseAction);
    private
      { Private declarations }
    public
      { Public declarations }
    end;
  
  const
    TitleViewer : String = 'Viewer of Documents PDF';
  
  var
    Form1: TForm1;
    ProcessID : THandle;
  
  implementation
  
  {$R *.dfm}
  
  // Ejecuta un Proceso Externo
  function ShellExecuteApp(const CmdLine : String) : THandle;
  var
     PI : PROCESS_INFORMATION;
     SI : STARTUPINFO;
     RP : LongBool;
  
  begin;
  
     ZeroMemory(@PI, SizeOf(PI));
     ZeroMemory(@SI, SizeOf(SI));
  
     SI.cb := SizeOf(SI);
  
     RP := CreateProcess(nil, PChar(CmdLine), nil, nil, False,
                         NORMAL_PRIORITY_CLASS, nil, nil, SI, PI);
  
     WaitForSingleObject(PI.hProcess, 150);
  
     if Integer(RP) <> 0 then
     begin
        CloseHandle(PI.hThread);
        CloseHandle(PI.hProcess);
        Result := PI.dwProcessID;
     end
     else
        Result := 0;
  
  end;
  
  // Finaliza un Proceso por su ProcessID
  function TerminateProcessByID(ProcessID: Cardinal): Boolean;
  var
     Process : THandle;
  
  begin
  
     Process := OpenProcess(PROCESS_TERMINATE,False,ProcessID);
  
     if Process > 0 then
     try
        Result := TerminateProcess(Process,0);
     finally
        CloseHandle(Process);
     end
     else
        Result := False;
  
  end;
  
  // Inicialización de ProcessID
  procedure TForm1.FormCreate(Sender: TObject);
  begin
     ProcessID := 0;
  end;
  
  // Visualiza un Documento PDF en un TPanel con SumatraPDF
  procedure TForm1.Button1Click(Sender: TObject);
  var
     CmdLine : String;
     openDialog : TOpenDialog;
     Msg : String;
  
  begin
  
     if (ProcessID = 0) then
     begin
  
        openDialog := TOpenDialog.Create(self);
        openDialog.InitialDir := GetCurrentDir;
        openDialog.Options := [ofFileMustExist];
        openDialog.Filter := 'PDF files|*.pdf';
        openDialog.FilterIndex := 1;
  
        if openDialog.Execute then
        begin
  
           CmdLine := ExtractFilePath(Application.ExeName) + 'SumatraPDF.exe'
                      + ' -plugin '
                      + IntToStr(Panel1.Handle)
                      + ' '
                      + '"' + openDialog.FileName + '"';
  
           ProcessID := ShellExecuteApp(CmdLine);
  
           if ProcessID = 0 then
           begin
              Msg := 'Error de Inicialización de View PDF';
              MessageBox(Handle, PChar(Msg), PChar('Error'), MB_OK + MB_ICONERROR);
           end
           else
              Caption := TitleViewer + ' : ' + ExtractFileName(openDialog.FileName);
  
        end
        else
        begin
           Msg := 'No Se Selecciono Ningún Archivo PDF a Visualizar';
           MessageBox(Handle, PChar(Msg), PChar('Information'), MB_OK + MB_ICONINFORMATION);
        end;
  
     end
     else
     begin
        Msg := 'Existe un Documento Activo en el View PDF';
        MessageBox(Handle, PChar(Msg), PChar('Information'), MB_OK + MB_ICONINFORMATION);
     end;
  
  end;
  
  // Finaliza Visualización un Documento PDF en un TPanel con SumatraPDF
  procedure TForm1.Button2Click(Sender: TObject);
  begin
     if (ProcessID > 0) then
     begin
        TerminateProcessByID(ProcessID);
        ProcessID := 0;
        Caption := TitleViewer;
     end;
  end;
  
  // Cierra y Libera los Recursos del Formmulario
  procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  begin
     Action := caFree;
  end;
  
  end.
El código anterior en Delphi 7 bajo Windows 7 Professional x32, permite visualizar documentos PDF por medio de Sumatra PDF en modo plugin dentro de un componente TPanel, con las opciones de salvar e imprimir documentos PDF inhabilitadas, como se muestra en la siguiente imagen:



El código del ejemplo con la versión portable de Sumatra PDF, esta disponible en: Viewer of Documents PDF with SumatraPDF.rar

Revisa la siguiente información:
Nota: Te sugiero usar la versión portable de Sumatra PDF, la cual podrás distribuir con tu aplicación junto con los archivos de configuración (Puedes usar los del ejemplo) ó hacer la instalación (Copia) en el Servidor de dicha versión, todo depende del número de usuarios que utilicen tu aplicación.

Espero sea útil :)

Nelson.

shoulder 08-08-2014 14:48:13

Sumatra
 
Realmente fantastico, lo estaba viendo y analizando cumple todas las expectativas, estaba viendo como se ven las firmas digitales, en el INI ver como hago que muestre el panel de firmas digitales. Realmente lo que hiciste muchisimos usuarios lo estaban buscando en la red.

Felicitaciones.

radenf 08-08-2014 21:33:17

Excelente Nelson.
Un gran aporte, que sin duda muchos apreciaremos.

Saludos

pacopenin 11-08-2014 19:47:34

Buena contribución. Gracias. ^\||/


La franja horaria es GMT +2. Ahora son las 12:35:37.

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