PDA

Ver la Versión Completa : Pdf Acrobat 11


shoulder
22-07-2014, 23:40:06
Hola termine mi aplicacion que funciona bien en mi PC con delphi 7, acropdf y Acrobat XI, resulta que hoy cuando la llevo a la empresa cuando va al form del pdf (acrobat) me da error el programa. E
En la empresa tienen el acrobat 9, hay una forma de poner la dll del acrobat XI en el servidor en el directorio del programa?, ellos tienen windows 7 y 64 bits.
Gracias,

radenf
23-07-2014, 00:05:10
Estimado shoulder:

AcroPdf ya no soporta aplicaciones de 32 bits a partir de la version de Adobe Reader 11.0.07
Yo te aconsejo no utilizar dicho componente y optar por alguna de las opciones que se sugieren en este link (http://www.clubdelphi.com/foros/showthread.php?t=86259)

Saludos

MAXIUM
23-07-2014, 00:06:10
Entiendo que si y que hay que registrarla.

A mi me figuran en System32

shoulder
23-07-2014, 00:14:40
Gracias por las respuestas, el tema que yo queria tener el manejo del PDF para ocultar la toolbar, que me aconsejan instalar en mi maquina el adobe9 y usar acropdf, o desde el shelexecute abriendo dentro del form el pdf puedo tener algun control?.

shoulder
23-07-2014, 14:59:04
Lo solucione como me han dicho ustedes con el TBrowser y oculte la toolbar y la toolbar de navegacion gracias!!!.

archivo := archivo+'#toolbar=0&navpanes=0&scrollbar=0' ;
WebBrowser1.Navigate('file:///'+archivo);

nlsgarcia
23-07-2014, 18:21:35
shoulder,


...Lo solucione...con el TWebBrowser...oculte la toolbar y la toolbar de navegación...

^\||/

Te sugiero dejar activo el Scrollbar para facilitar la lectura del archivo PDF.

Revisa este código:

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 + '#toolbar=0&navpanes=0&scrollbar=1');
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, eliminando del View PDF el ToolBar, el Panel de Navegación y permitiendo el uso del ScrollBar.

Espero sea útil :)

Nelson.

shoulder
23-07-2014, 18:37:54
Gracias Nelson!!!, lo unico hay que tener en cuenta que en tiempo de compilacion no funciona, hay que ir directamente al exe generado.
tengo delphi 7 - Windows 7.

nlsgarcia
23-07-2014, 19:04:48
shoulder,


...hay que tener en cuenta que en tiempo de compilación no funciona, hay que ir directamente al exe generado...tengo Delphi 7...Windows 7...
:confused:

El código del Msg #6 funciona correctamente en modo Debug y en RunTime (Ejecutable) en Delphi7, Delphi 2010 y Delphi XE4 sobre Windows 7 Professional x32 y x64, en Tiempo de Compilación no da ningún tipo de error o mensaje de advertencia.

Espero sea útil :)

Nelson.

shoulder
23-07-2014, 19:35:58
Hola, en Debug o compilacion no me funciona, no me da error, simplemente no me trae el PDF, en Run Time funciona perfecto.

nlsgarcia
23-07-2014, 19:57:50
shoulder,


...en Debug o compilación no me funciona, no me da error, simplemente no me trae el PDF, en Run Time funciona perfecto...

:confused:

Pregunto:

1- ¿Que versión de Delphi 7 utilizas?.

2- ¿Que versión de Windows 7 utilizas?, ¿Es de 32 o 64 bits?.

3- ¿Estas usando el componente TWebBrowser de Delphi o otro componente?.

4- ¿Tienes la propiedad Silent del TWebBrowser en True?.

5- ¿Puedes publicar tu código?.

Espero sea útil :)

Nelson.

shoulder
23-07-2014, 21:05:36
Windows 7 32 bits - Delphi 7 Build 4.4.53
TWebBrowser el componente del ActiveX de Delphi

el codigo

archivo := archivo+'#toolbar=0&navpanes=0&scrollbar=1' ;
WebBrowser1.Silent := True;
WebBrowser1.Navigate('file:///'+archivo);

nlsgarcia
23-07-2014, 21:59:44
shoulder,

Al parecer debe haber algún tipo de problema en tu instalación de Delphi o archivos de proyecto :confused: , dado que efectivamente en Delphi 7 Enterprise Build 4.453 y Windows 7 Professional x32, el código del Msg #6 y Msg #11 funciona correctamente en Modo Debug, Runtime y no presenta ningún tipo de Error de Compilación.

Te sugiero:

1- Borrar todos los archivos de tu proyecto a excepción de los .dpr, .pas, .dfm y verificar si el comportamiento anómalo persiste.

2- Hacer un prueba aislada que solo involucre al código en cuestión y excluya otros componentes que pudieran presumiblemente provocar el comportamiento descrito.

3- Desactivar el antivirus (Poco probable en este caso en particular) y verificar si el comportamiento anómalo persiste.

4- Probar el código en cuestión en otra máquina con iguales características de Windows y Delphi.

5- En último recurso, reinstalar Delphi 7 por medio de la opción Repair.

Espero sea útil :)

Nelson.

shoulder
01-08-2014, 22:55:37
Hola hice lo que me explicaste, todo excelente , solo una tema....
tengo un form donde esta el webbrowser abro y activo archivo := archivo+'#toolbar=0&navpanes=0&scrollbar=1' ;
WebBrowser1.Navigate('file:///'+archivo);

hasta aqui todo bien, no me aparece el menu navegador del PDF. Pero... cierro el form (el form lo creo al momento de abrir la ventana) , abro otra vez la ventana y al pasar el mouse por encima del PDF que me aparece.. el maldito toolbar de navegacion del PDF...

Cierro el ejecutable del programa abro el webbrowser con el pdf no aparece el navegador, pero si cierro y abro el form sin salir del programa la seguna vez aparece...
Que estoy haciendo mal?.

nlsgarcia
02-08-2014, 05:05:19
shoulder,


...Hola hice lo que me explicastes...todo excelente... ^\||/

Pregunto : ¿Exactamente que fue lo que te funciono de lo sugerido en el Msg #12? :confused:


...tengo un form donde esta el webbrowser...abro...activo...cierro el form (el form lo creo al momento de abrir la ventana), abro otra vez la ventana y al pasar el mouse por encima del PDF...me aparece...el..toolbar de navegacion del PDF...¿Que estoy haciendo mal?...

:rolleyes:

Revisa este código:

// Load and Show Form2
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.CreateForm(TForm2, Form2);
Form2.Show;
end;

// Releases the Resources of Form2
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;

El código anterior en Delphi 7 bajo Windows 7 Professional x32, instancia y llama al formulario Form2 el cual contiene el componente TWebBrowser y libera los recursos asignados al formulario Form2 en el evento OnClose, de esta forma no se activara la barra de navegación del TWebBrowser entre distintas llamadas al formulario que lo contiene.

Nota: El formulario Form2 no debe estar en la lista de Auto-Create Forms de opciones del proyecto.

Espero sea útil :)

Nelson.

shoulder
05-08-2014, 03:12:56
Hola Gracias, funciono con el repair y con la sentencia que me diste no aparece mas la toolbar. Lo unico el webbrowser lo uso para mostrar los PDF que estan en el servidor y bajo intranet es un poco lento tarda hasta casi un minuto en abrir bajo la red comun es rapido 5 segundos. No encontre forma de acelerarlo.

Gracias por todo.

shoulder
05-08-2014, 21:20:28
Hola Lamentablemente hoy fui a la oficina y vi que un usuario abrio el form lo cerro y a la tercera abrio otro PDF y salio la maldita barra navegadora del Acrobat...sera la version del acrobat 11 que tiene esta falla?.

nlsgarcia
06-08-2014, 21:10:59
shoulder,


...Lamentablemente...vi que un usuario abrió el form lo cerro y a la tercera abrió otro PDF y salio...la...barra navegadora del Acrobat...

:rolleyes:

Te comento:

1- Realize pruebas en Delphi 7, Delphi 2010, Delphi XE6 y C# 2008 (Tiene un componente WebBrowser) y con el código propuesto en el Msg #14, la barra se presenta al llamar más de una vez un mismo documento, si son diferentes la barra nunca se visualiza.

2- Probé diferentes métodos y combinaciones de Open/Close documentos PDF con el componente TWebBrowser y la barra se visualiza siempre en la segunda llamada de un documento PDF cualquiera.

3- Prueba en tu aplicación esta función:

function ViewToolBarPDF(BrowserDisplayInReadMode : Boolean) : Boolean;
begin
try
with TRegistry.Create do
try
RootKey:= HKEY_CURRENT_USER;
if OpenKey('\Software\Adobe\Acrobat Reader\11.0\AVGeneral',False) then
begin
WriteInteger('bBrowserDisplayInReadMode', Integer(BrowserDisplayInReadMode));
CloseKey;
Result := True;
end
else
Result := False;
finally
Free;
end;
except
Result := False;
end;
end;

La función anterior en Delphi 7 bajo Windows 7 Professional x32, permite activar (True) y desactivar (False) la barra de herramientas de Acrobat Reader XI a nivel del Registro de Windows, dicha función esta basada en la siguiente información : Turning off Read Mode while viewing PDFs in your Browser (http://blogs.adobe.com/acrolaw/2011/11/turning-off-read-mode-while-viewing-pdfs-in-your-browser/)

Nota: En mi PC la función sugerida anteriormente, no tiene ningún efecto sobre el caso descrito, sin embargo te sugiero probarla.

Pregunto: ¿Cuando indicas que se visualiza la barra de herramientas en el documento PDF, a cual barra te refieres : Barra1 o Barra2?

Barra1:
http://i42.photobucket.com/albums/e305/nlsgarcia/ToolBarPDF-1_zpsfc3d7197.jpg

Barra2:
http://i42.photobucket.com/albums/e305/nlsgarcia/ToolBarPDF-2_zpsacadc5bd.jpg

Espero sea útil :)

Nelson.

shoulder
07-08-2014, 03:29:38
Hola primero de todo gracias por tu ayuda, probe la funcion y sigue todo igual la Barra 1 aparece a veces en la tercera vez que abro el documento o segunda es aleatorio.
Estoy pensando si no es una tonteria, no me convendria abrir primero un pdf de 1K en blanco y despues el verdadero asi nunca se repiten la misma secuencia de pdf?.

Gracias.

nlsgarcia
07-08-2014, 07:24:20
shoulder,


...Estoy pensando si no es una tonteria...

:rolleyes:

Te comento lo que no ha funcionado para eliminar el ToolBar del documento PDF:

1- Pruebas del WebBrowser en Delphi 7, Delphi 2010, Delphi XE6 y C# 2008 bajo Windows 7 Professional x32 y Adobe Acrobat Reader XI.

2- Pruebas del WebBrowser en Delphi 7 bajo Windows XP professional x32 con Adobe Acrobat X Pro.

3- Modificar la variable de visualización del Toolbar bBrowserDisplayInReadMode a False en el registro de Windows.

4- Realizar un KillTask a los procesos AdobeARM.exe y AcroRd32.exe que estuvieran activos durante el uso del WebBrowser.

5- Hacer un Copyfile del archivo a consultar a uno temporal que sería usado y eliminado después de la consulta.

6- Uso de la API DeleteUrlCacheEntry para eliminar el PDF consultado previamente del cache del WebBrowser.

7- Crear un archivo Blank.pdf que sería llamado al finalizar la consulta del PDF.

8- Uso del método WebBrowser1.ControlInterface.ExecWB para enviar comandos al WebBrowser.

9- Uso del método WebBrowser1.Navigate2 con los flags := navNoReadFromCache or navNoWriteToCache or navNoHistory.

En resumen: sin importar el lenguaje (Delphi ó C#), la versión de Adobe Acrobat (Reader XI ó Pro X), el SO (Windows XP Professional x32 ó Windows 7 Professional x32), los métodos que se usen en el WebBrowser (Navigate, Navigate2, ControlInterface.ExecWB), el uso de archivos temporales y modificadores de consulta del PDF, el ToolBar PDF siempre se visualiza en sucesivas llamadas del documento :cool:

Pregunto: ¿Por que es tan importante que no se visualice el ToolBar PDF?, ¿Que problema(s) ocasiona que se visualize? :confused:

Las preguntas anteriores son críticas dado que aunque se usen los modificadores de consulta del PDF: #toolbar=0&navpanes=0&scrollbar=1 en la llamada del WebBrowser, la barra se puede activar con F8 luego de que se haga el primer movimiento de scroll del documento o se llame al documento más de una vez, con el agravante de que el componente WebBrowser no permite interceptar las teclas pulsadas a pesar de estar establecido KeyPreview := True.

Conclusión: Así funciona aparentemente el componente WebBrowser :rolleyes:

Espero sea útil :)

Nelson.

shoulder
07-08-2014, 15:57:57
Hola Nelson el problema es que una persona puede grabarse un documento, mientras tengan Acrobat 9 esta todo bien, pero si me instalan el XI aparece la barra 1, se hace una copia del documento en su PC.
Este es un tema de seguridad que falla entre Delphi y Acrobat.

Y ahi no se como solucionarlo.

shoulder
07-08-2014, 21:01:10
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,


...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
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,


...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.


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

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:

http://i42.photobucket.com/albums/e305/nlsgarcia/ViewerSumatraPDF-3_zps941a103e.jpg (http://s42.photobucket.com/user/nlsgarcia/media/ViewerSumatraPDF-3_zps941a103e.jpg.html)

El código del ejemplo con la versión portable de Sumatra PDF, esta disponible en: Viewer of Documents PDF with SumatraPDF.rar (http://terawiki.clubdelphi.com/Delphi/Ejemplos/Varios/?download=Viewer+of+Documents+PDF+with+SumatraPDF.rar)

Revisa la siguiente información:

1- Sumatra PDF (http://blog.kowalczyk.info/software/sumatrapdf/free-pdf-reader.html)

2- SumatraPDF command line options (https://code.google.com/p/sumatrapdf/wiki/CommandLineArguments)

3- Archivo de Configuración : sumatrapdfrestrict.ini (https://code.google.com/p/sumatrapdf/source/browse/trunk/docs/sumatrapdfrestrict.ini)


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
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. ^\||/