Waldo,
Cita:
Empezado por Waldo
...Tengo un problema con la impresión de un documento PDF...curiosamente funciona en una pc y en la otra no...ya descarte que este asociado con un programa lector de PDF...también e descubierto que solo imprime una vez, y una vez que se creo el proceso, ya no se puede ejecutar ni siquiera Acrobat Reader por separado sin antes terminar el proceso...
|
Revisa este código:
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ShellAPI;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
const
Copies : Integer = 10;
var
MsgErr : String;
openDialog : TOpenDialog;
i, CodErr : Integer;
begin
openDialog := TOpenDialog.Create(self);
openDialog.InitialDir := GetCurrentDir;
openDialog.Options := [ofFileMustExist];
openDialog.Filter := 'PDF Files|*.pdf';
openDialog.FilterIndex := 1;
if openDialog.Execute then
begin
MsgErr := EmptyStr;
for i := 1 to Copies do
begin
CodErr := ShellExecute(Application.Handle,'print',PChar(openDialog.FileName),nil,nil,SW_MINIMIZE);
case CodErr of
0 : MsgErr := 'The operating system is out of memory or resources.';
2 : MsgErr := 'file not found';
3 : MsgErr := 'path not found';
5 : MsgErr := 'access denied';
8 : MsgErr := 'not enough memory';
10 : MsgErr := 'Wrong Windows version';
11 : MsgErr := 'The .EXE file is invalid (non-Win32 .EXE or error in .EXE image)';
12 : MsgErr := 'Application was designed for a different operating system';
13 : MsgErr := 'Application was designed for MS-DOS 4.0';
15 : MsgErr := 'Attempt to load a real-mode program';
16 : MsgErr := 'Attempt to load a second instance of an application with non-readonly data segments.';
19 : MsgErr := 'Attempt to load a compressed application file.';
20 : MsgErr := 'Dynamic-link library (DLL) file failure.';
26 : MsgErr := 'sharing violation';
27 : MsgErr := 'filename association incomplete or invalid';
28 : MsgErr := 'DDE request timed out';
29 : MsgErr := 'DDE transaction failed';
30 : MsgErr := 'DDE busy';
31 : MsgErr := 'no application associated with the given filename extension';
32 : MsgErr := 'dynamic-link library not found';
end;
if MsgErr <> EmptyStr then
raise Exception.Create(MsgErr);
end;
end;
end;
end.
El código anterior
permite seleccionar un archivo PDF e imprimirlo 10 veces seguidas por medio del API ShellExecute, funcionando correctamente en todos los casos de prueba con Delphi 7 sobre Windows 7 Professional x32 y Adobe Acrobat Reader versión 11.0.04.63.
Pregunto:
1- ¿Que versión de
Windows y
Delphi esta utilizando la aplicación en cuestión?.
2- ¿El código se ejecuta
en el hilo principal o en un hilo secundario?.
3- ¿
Que tiene de diferente el PC en cuestión del PC en el cual si funciona la aplicación?.
4- ¿
Haz hecho pruebas de la aplicación en modo Debug?
Te sugiero:
1- Probar en el PC en cuestión
el código sugerido anteriormente para determinar
si es un problema del PC o de la aplicación, si funciona es conveniente revisar la aplicación para determinar que parte de la misma puede estar causando el problema.
2-
Desinstalar la actual versión de
Acrobat Reader PDF del PC en cuestión.
3-
Instalar la última versión de
Acrobat Reader PDF y realizar nuevamente las pruebas de impresión.
4- En caso de que el programa vuelva a fallar
después de ejecutar los puntos anteriores sería conveniente cargar Windows en
Modo Diagnostico con el Antivirus Deshabilitado y probar el programa nuevamente, si funciona
hay que entrar en un proceso de pruebas (Ensayo y Error) para descartar que programa o servicio esta causando la falla reportada, en caso contrario hay que considerar revisar la instalación de Windows, te sugiero en
Modo Diagnostico con el Antivirus Deshabilitado usar el comando
SFC /Scannow para reparar los archivos del SO que así lo requieran y realizar nuevamente las pruebas de impresión.
Espero sea útil
Nelson.