Exemple #1
0
        public ServicePrintMonitor()
        {
            Log.Info("-- Se levanta el Servicio para Monitorizar el Servicio de Impresión --");
            InitializeComponent();

            Log.Info("-- Nos suscribimos a los eventos de impresión --");
            EventMonitorPrinting.PrintingEven();

            // Descomentar para suscribirnos a los eventos de creación de ficheros de spool
            Log.Info("Nos suscribimos a los eventos de creación de ficheros de Spool");
            WatchIO.FileEvent(LocalPrinting.PathPrintSpool());

            // Definimos un Timer para lanzar una tarea de forma periodica.
            Tiempo          = new Timer();
            Tiempo.Interval = 3600000; // 1 hora
                                       //Tiempo.Interval = 10000; // 10 sg

            //Tiempo.Elapsed += new ElapsedEventHandler(Metodo_delegado a ejecutar);
            //Tiempo.Elapsed += new ElapsedEventHandler(Programa.PruebaServicio);
            //Tiempo.Elapsed += new ElapsedEventHandler(Programa.Inicio);

            // Tarea periodica: Comprobar que estamos suscritos a los eventos de impresión
            Log.Info("Lanzamos EventMonitorPrinting.IsAliveEvents() de forma periódica");
            Tiempo.Elapsed += new ElapsedEventHandler(EventMonitorPrinting.IsAliveEvents);

            // Descomentar para la suscripción a los eventos de creación de ficheros de spool
            Tiempo.Elapsed += new ElapsedEventHandler(WatchIO.IsAliveEvents);

            //Fecha = DateTime.Now.ToShortDateString().Replace("/", "-");
        }
Exemple #2
0
        /** \brief Análisis del trabajo de Impresión.
         * \return No devuelve nada.
         * \details
         * Se guardan en B.D las propiedades del trabajo de impresión obtenidas a través de las API de impresión, del namespace
         * System.Printing y del análisis de los ficheros de Spool correspondientes al trabajo de impresión.
         */
        private void AnalizePrintJob() // string Printer, string JobId)
        {
            // Objeto para permitir una espera en caso de que el fichero de spool este abierto
            ElapsedTime TiempoEspera;
            // Fichero de spool que se tiene que analizar
            FileInfo MiFileInfo;

            // Estructura utilizada para guardar los trabajos de impresión
            STRUCT_PRINT_JOB PrintJob = new STRUCT_PRINT_JOB();

            this.ID_JOBNAME = "";
            this.N_JOB      = Convert.ToInt32(this.JobId);
            this.ID_PRINTER = this.Printer;

            // La impresora ¿es un plotter?
            if (Util.ContieneTexto(this.Printer, "Plotter"))
            {
                PrintJob.ID_ISPLOTTER = "S";
            }
            else
            {
                PrintJob.ID_ISPLOTTER = "N";
            }


            bool AnalizedSpool = false;

            //Se recuperan los primeros detalles del trabajo de impresión
            PrintJob.N_JOB      = this.N_JOB;
            PrintJob.ID_PRINTER = this.ID_PRINTER;

            /// - Propiedades obtenidas a través del namespace System.Printing
            try
            {
                // Recuperamos las propiedades
                LocalPrinting.DetailsPrint(PrintJob.ID_PRINTER, this.JobId, ref PrintJob);
                this.ID_JOBNAME = PrintJob.ID_JOBNAME;
                this.F_PRINTJOB = PrintJob.F_PRINTJOB;


                Log.Info("  -- Se extraen las propiedades utilizando System.Printing --");
                // Generamos log
                LogPrintJob(ref PrintJob);
                // Guardamos en B.D
                SavePrintJob(ref PrintJob);
            }
            catch (Exception e)
            {
                Log.Fatal("Error extrayendo propiedades a través de System.Printing");
                Log.Fatal(e);
            }

            /// - Propiedades obtenidas a través de las APIs de impresión
            LimpiaStrucPrintJob(ref PrintJob);
            PrintJob.ID_JOBNAME = ID_JOBNAME;
            try
            {
                // Recuperamos las propiedades
                ApiImpresion MiApiImpresion = new ApiImpresion();
                MiApiImpresion.Analize(this.Printer, (uint)Convert.ToInt32(this.JobId), ref PrintJob);

                // Guardamos en B.D las propiedades obtenidas
                Log.Info("  -- Se extraen las propiedades utilizando las API de impresión. --");
                LogPrintJob(ref PrintJob);
                SavePrintJob(ref PrintJob);
                /// Enviamos información del trabajo de impresión via email
                LogPrintJobMail(ref PrintJob);
            }
            catch (Exception e)
            {
                Log.Fatal("No se puede analizar el trabajo de impresión: " + this.JobId + " a través de las APIs de winspool.drv.");
                Log.Fatal(e);
            } //try

            /// Para el analisis de ficheros de Spool, antes de empezar, nos aseguramos de que el fichero no está bloqueado
            // Establecemos un tiempo de espera
            TiempoEspera = new ElapsedTime();
            // Fichero de spool que se tiene que analizar
            MiFileInfo = new FileInfo(LocalPrinting.PathPrintSpool() + @"\" + this.JobId.PadLeft(5, '0') + ".SPL");
            while ((!TiempoEspera.OverElapsedTime()) & WatchIO.IsFileLocked(MiFileInfo))
            {
                // Se da tiempo a que se libere el archivo de Spool
                System.Threading.Thread.Sleep(10);
            }

            /// - Propiedades obtenidas a través del análisis del fichero de Spool con lenguaje EMF
            LimpiaStrucPrintJob(ref PrintJob);
            PrintJob.ID_JOBNAME = ID_JOBNAME;
            if (PrintJob.N_JOBSIZE > 0)
            {
                try
                {
                    Log.Debug("Analizamos si es lenguaje EMF");
                    // Se comenta la siguiente línea al desactivar la suscripción a los eventos del sistema de archivos de la clase WatchIO
                    EmfSpool MyEmfSpool = new EmfSpool(LocalPrinting.PathPrintSpool() + @"\" + this.JobId.PadLeft(5, '0') + ".SPL");
                    MyEmfSpool.Analize(ref PrintJob);
                    AnalizedSpool = true;
                    Log.Info("Establecemos como fuente del análisis: EMF");
                    PrintJob.ID_FUENTE = "EMF";
                    Log.Info("  -- Se extraen las propiedades utilizando analisis EMF. --");
                    LogPrintJob(ref PrintJob);
                    SavePrintJob(ref PrintJob);
                    /// Enviamos información del trabajo de impresión via email
                    LogPrintJobMail(ref PrintJob);
                }
                catch (Exception e)
                {
                    Log.Info("El trabajo de impresión: " + this.JobId + " no utiliza lenguaje EMF.");
                    Log.Fatal(e);
                }//try
            }

            /// - Propiedades obtenidas a través del análisis del fichero de Spool con lenguaje JPL.
            LimpiaStrucPrintJob(ref PrintJob);
            PrintJob.ID_JOBNAME = ID_JOBNAME;
            if ((!AnalizedSpool) && (PrintJob.N_JOBSIZE > 0))
            {
                try
                {
                    Log.Debug("Analizamos si es lenguaje JPL");
                    // Se comentan las siguientes 2 líneas al desactivar la suscripción a los eventos del sistema de archivos de la clase WatchIO
                    Log.Debug(LocalPrinting.PathPrintSpool() + @"\" + @"\" + this.JobId.PadLeft(5, '0') + ".SPL");
                    JPLSpool MyJPLSpool = new JPLSpool(LocalPrinting.PathPrintSpool() + @"\" + this.JobId.PadLeft(5, '0') + ".SPL");

                    MyJPLSpool.Analize(ref PrintJob);
                    AnalizedSpool = true;
                    Log.Info("  -- Se extraen las propiedades utilizando analisis JPL. --");
                    LogPrintJob(ref PrintJob);
                    SavePrintJob(ref PrintJob);
                    /// Enviamos información del trabajo de impresión via email
                    LogPrintJobMail(ref PrintJob);
                }
                catch (Exception e)
                {
                    Log.Info("No se puede analizar el trabajo de impresión: " + this.JobId + " mediante análisis JPL.");
                    Log.Fatal(e);
                } //try
            }     //if

            Log.Debug("Trabajo de impresión: " + this.JobId + "en impresora " + this.Printer + " analizado con éxito");
        } //AnalizeSpool()