Hola compañeros de Delphi, tengo exactamente este mismo problema, no soy capaz de imprimir un pdf con el componente de acrobat (TAcroPdf).
He utilizado Print, PrintAll, ... todo, vaya, y ésto no imprime.
He comprobado que si meto el componente en un Form, el "Print" funciona correctamente. Iba a tirar por el camino, un tanto chapucero, siguiente:
Como quién se encarga de imprimir es un objeto instanciado(instado según el DRAE) de una clase declarada por mí, iba a ponerle una propiedad del tipo TAcroPdf, y asignarla antes de llamar al procedimiento que se encarga de imprimir.
Pues nada, no me imprime tampoco.
Tengo el "Rad Studio X2 Delphi" y el adobe acrobat 10.0.
El código sería más o menos esto:
Código Delphi
[-]
TMiClase = class
private
FPdf: TAcroPdf;
FNombreDoc: String;
procedure Ejecutar(const Accion: String);
public
property NombreDoc: String read FNombreDoc;
property Pdf: TAcroPdf read FPdf write FPdf;
procedure visualizar;
procedure Imprimir;
constructor Create(Id: String);
end;
Código Delphi
[-]
constructor TMiClase.Create(Id: String);
begin
inherited Create;
FNombreDoc := 'Fichero.pdf';
end;
procedure TMiClase.Ejecutar(const Accion: String);
var
ExecInfo : TShellExecuteInfo;
Fichero: TFichero;
ExitCode: DWord;
begin
Fichero := TFichero.Create(ExtractFilePath(Application.ExeName),
NombreDoc, 'documento.pdf');
try
Application.ProcessMessages;
Fichero.Descodificar;
if Accion = 'print' then
begin
Pdf.LoadFile(WideString(Fichero.Temporal));
Pdf.Print;
end
else begin
ExecInfo.cbSize := SizeOf(ExecInfo);
ExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
ExecInfo.Wnd := Handle;
ExecInfo.lpVerb := PWideChar(Accion);
ExecInfo.lpFile := pChar(Fichero.Temporal);
ExecInfo.lpParameters := nil;
ExecInfo.lpDirectory := nil;
ExecInfo.nShow := SW_SHOW;
ShellExecuteEx(@ExecInfo);
repeat
Application.ProcessMessages;
GetExitCodeProcess(ExecInfo.hProcess, ExitCode) ;
until (ExitCode <> STILL_ACTIVE);
end;
finally
Fichero.Free;
end;
end;
procedure TMiClase.Imprimir;
begin
Ejecutar('print');
end;
procedure TMiClase.visualizar;
begin
Ejecutar('open');
end;
Código Delphi
[-]
procedure TForm.actImprimirExecute(Sender: TObject);
var
MiObjeto: TMiClase;
begin
MiObjeto := TMiClase.Create('5');
try
MiObjeto.Pdf := AcroPdf1;
MiObjeto.Imprimir;
finally
MiObjeto.Free;
end;
end;
Evidentemente, he tenido que quitar código, política de empresa, pero a groso modo esto es lo que hago.