Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   OleAutomation con Acrobat Profesional (https://www.clubdelphi.com/foros/showthread.php?t=49547)

apicito 24-10-2007 12:19:22

OleAutomation con Acrobat Profesional
 
Estoy tratando de automatizar la gestión de impresos en formato PDF desde mi aplicación. Básicamente hago lo siguiente: Abro en un olecontainer un formulario pdf, lo cubro y lo guardo en una base de datos, para poder abrirlo en otras ocasiones.
Mi problema es que cuando cierro el olecontainer la aplicación acrobat tarda unos segundos en descargarse, por lo que si intento abrir un nuevo documento me lo abre como no editable (En ganulado gris). Busco un sistema que me permita controlar si ya se cerro la aplicación Acrobat.

apicito 30-10-2007 10:26:05

Bueno. He conseguido abrir pdfs embebidos en mi formulario
Código Delphi [-]
  Clase:='AcrobatSDIWindow';
  Extension:='pdf';
  OleDoc:= TOleContainer.Create(self);
  OleDoc.Parent:=PDoc;
  OleDoc.Align:=alClient;
  OleDoc.AutoActivate:=aaManual;
  OleDoc.AutoVerbMenu:=True;
  OleDoc.Iconic:=False;
  Stream:=TMemoryStream.Create;
  Stream.Position:=0;
  TBlobField(QueryTra.FieldByName('EXPTRA_TEXTO')).SaveToStream(Stream);
  Stream.Position:=0;
  if fileExists(ExtractFilePath(ParamStr(0))+'vacio.pdf') then
    OleDoc.CreateObjectFromFile(ExtractFilePath(ParamStr(0))+'vacio.pdf',false)
  else begin
    Showmessage('No Existe '+ExtractFilePath(ParamStr(0))+'vacio.pdf. Debe crearse.');
    Close;
    Exit;
  end;
  h := FindWindow(PChar(Clase), nil);
  if (h <> null) then begin
    windows.EnableMenuItem(GetMenu(h), SC_CLOSE, MF_GRAYED);
    Windows.SetParent(h, PDoc.Handle);
    windows.SetWindowLong( h, GWL_STYLE,WS_DLGFRAME ) ;
    ShowWindow(h, SW_MAXIMIZE  );
  end;
  OleDoc.LoadFromStream(Stream);
  Stream.Free;
  OleDoc.DoVerb(ovPrimary);
  OleDoc.Enabled:=True;
  OleDoc.SetFocus;
y grabarlos desde un boton de mi formulario:
Código Delphi [-]
procedure GrabaCampo;
var
  Stream: TMemoryStream;
begin
  Stream:=TMemoryStream.Create;
  Stream.Position:=0;
  OleDoc.SaveToStream(Stream);
  Stream.Position:=0;  
  TBlobField(QueryTra.FieldByName('EXPTRA_TEXTO')).LoadFromStream(Stream);
  Stream.Free;
  OleDoc.Modified:=false;
  OleDoc.UpdateControlState;
  OleDoc.Close;
  OleDoc.Free;
end;
A pesar de que graba correctamente las modificaiones, me lanza un error de que Acrobat a detectado un error y ha tenido que cerrarse al hacer el close. Ademas de un mensaje de: La memoria nose puede "read".
Esto solo sucede si modifico algún dato en el formulario, sino cierra correctamente.


La franja horaria es GMT +2. Ahora son las 18:15: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