Ver Mensaje Individual
  #2  
Antiguo 28-12-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Reputación: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
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
    { Private declarations }
  public
    { Public declarations }
  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.

Última edición por nlsgarcia fecha: 28-12-2013 a las 17:56:39.
Responder Con Cita