示例#1
0
        private void MenuItem1Click(object sender, EventArgs e)
        {
            OpenFileDialog fileDialog = new OpenFileDialog();

            fileDialog.InitialDirectory = DeviceHandler.GetSpoolDirectory();
            fileDialog.Filter           = "Spool Shadow File (*.shd)|*.shd|Todos os arquivos (*.*)|*.*";
            // Exibe a caixa de seleção de arquivo e verifica o resultado da interação do usuário
            DialogResult openFileResult = fileDialog.ShowDialog();

            if (openFileResult == DialogResult.Cancel)
            {
                return;
            }

            String shadowFilename = fileDialog.FileName;

            if (File.Exists(shadowFilename))
            {
                SpooledJob      spooledJob = new SpooledJob(shadowFilename, this);
                String          jobName    = spooledJob.ShadowFile.PrinterName + ", " + spooledJob.ShadowFile.JobId.ToString();
                ManagedPrintJob managedJob = new ManagedPrintJob(jobName);
                String          jobInfo    = GetJobInfo(spooledJob, managedJob);
                jobInfoBox.Invoke(new PerformTextOutputDelegate(LogJobInfo), jobInfo);
            }
        }
        private void ProcessJobNotification(JobNotification jobNotification)
        {
            JobNotificationTypeEnum notificationType = jobNotification.NotificationType;
            String jobName = jobNotification.JobName;

            SpooledJob      spooledJob = spoolMonitor.FindSpooledJob(jobName);
            ManagedPrintJob managedJob = null;

            if (spooledJob != null)
            {
                managedJob = new ManagedPrintJob(jobName);
            }

            if (notificationType == JobNotificationTypeEnum.JobCreated)
            {
                //if (!managedJob.IsPaused())
                //    managedJob.Pause();
            }

            if (notificationType == JobNotificationTypeEnum.JobChanged)
            {
                // Verifica se terminou o spooling para então processar os dados do job
                if (!managedJob.IsSpooling() && !spooledJob.Processed)
                {
                    // spooledJob.CopyFiles(@"C:\tempSpool\" + jobName.Split(new char[] { ',' })[0]);
                    String jobInfo = PrintJobContext.GetJobInfo(spooledJob);
                    WriteToLog(jobInfo);
                    spooledJob.Processed = true;
                }
            }
        }
        /// <summary>
        /// Obtem informações do job em uma String
        /// </summary>
        public static String GetJobInfo(SpooledJob spooledJob)
        {
            if (spooledJob.ShadowFile == null) // Verifica se o arquivo de Shadow está disponível
            {
                return("?,?,?,?,?,?,?,?,?,?"); // Caso não esteja retorna uma indicação de que sua leitura falhou
            }
            Dictionary <String, Object> jobSummary = GetJobSummary(spooledJob);
            String jobTime  = DateFormat.Adjust((DateTime)jobSummary["jobTime"], true);
            String dataType = (String)jobSummary["dataType"];
            String jobSize  = (String)jobSummary["spoolFileSize"];

            String jobInfo = jobTime + "," + jobSummary["userName"] + "," + jobSummary["printerName"] + "," +
                             jobSummary["documentName"] + "," + jobSummary["pageCount"] + "," + jobSummary["copyCount"] + "," +
                             jobSummary["duplex"] + "," + "false" + "," + dataType + "," + jobSize;

            return(jobInfo);
        }
示例#4
0
        private void OpenSpoolFile(String spoolFilename)
        {
            String shadowFilename = Path.ChangeExtension(spoolFilename, ".SHD");

            if (!File.Exists(shadowFilename))
            {
                MessageBox.Show("Arquivo de shadow não encontrado.");
                return;
            }

            spooledJob = new SpooledJob(shadowFilename, this);
            if (spooledJob.ShadowFile == null)
            {
                MessageBox.Show("Não foi possível abrir o arquivo de shadow.");
                return;
            }

            if (!spooledJob.ShadowFile.DataType.ToUpper().Contains("EMF"))
            {
                MessageBox.Show("Formato de arquivo não suportado (RAW data in PCL5e, PCL XL, PostScript, etc).");
                return;
            }

            EMFSpoolFile spoolFile = (EMFSpoolFile)spooledJob.SpoolFile;

            if (spoolFile.MalformedFile)
            {
                MessageBox.Show("O arquivo de spool não é um arquivo EMF válido.");
                return;
            }

            goToAction.DropDownItems.Clear();
            for (int index = 1; index <= spooledJob.SpoolFile.Pages.Count; index++)
            {
                goToAction.DropDownItems.Add(index.ToString(), null, pageNumber_Click);
            }

            pagePicture.Visible = true;
            scale = 0.4f; // Inicia em 40% do tamanho original
            LoadPage(1);
        }
示例#5
0
        private String GetJobInfo(SpooledJob spooledJob, ManagedPrintJob managedJob)
        {
            Dictionary <String, Object> jobSummary = PrintJobContext.GetJobSummary(spooledJob);

            if (jobSummary == null)
            {
                return(String.Empty);
            }

            String jobInfo = "Print Job (" + managedJob.Name + " )   " +
                             "Status: " + (JobStatusEnum)managedJob.StatusMask + Environment.NewLine +
                             "Hora: " + DateFormat.Adjust((DateTime)jobSummary["jobTime"], true) + Environment.NewLine +
                             "UserName: "******"userName"] + Environment.NewLine +
                             "PrinterName: " + jobSummary["printerName"] + Environment.NewLine +
                             "DocumentName: " + '\"' + jobSummary["documentName"] + '\"' + Environment.NewLine +
                             "Page Count: " + jobSummary["pageCount"] + Environment.NewLine +
                             "Copy Count: " + jobSummary["copyCount"] + Environment.NewLine +
                             "Duplex: " + jobSummary["duplex"] + Environment.NewLine +
                             "Color: " + jobSummary["color"] + Environment.NewLine +
                             "File size: " + jobSummary["spoolFileSize"] + Environment.NewLine;

            return(jobInfo);
        }
        /// <summary>
        /// Obtem informações do job resumidas em um Dictionary
        /// </summary>
        public static Dictionary <String, Object> GetJobSummary(SpooledJob spooledJob)
        {
            if (spooledJob.ShadowFile == null) // Verifica se o arquivo de Shadow está disponível
            {
                return(null);                  // Caso não esteja retorna "null"
            }
            JobShadowFile shdw = spooledJob.ShadowFile;

            DateTime jobTime       = spooledJob.FileDate;
            int      pageCount     = shdw.PageCount;
            int      copyCount     = shdw.DevMode.Copies;
            Boolean  duplex        = shdw.DevMode.Duplex;
            Boolean  color         = shdw.DevMode.Color;
            int      spoolFileSize = shdw.SpoolFileSize;

            EMFSpoolFile spoolFile = null;
            Boolean      isEMF     = false;

            if (shdw.DataType.ToUpper().Contains("EMF"))
            {
                spoolFile = (EMFSpoolFile)spooledJob.SpoolFile;
                if (!spoolFile.MalformedFile)
                {
                    isEMF = true;                           // Verifica se o formato está OK
                }
            }

            if (isEMF)
            {   // Substitui as informações do SHD por outras mais precisas encontradas arquivo de Spool
                if (spoolFile.Pages != null)
                {
                    pageCount = spoolFile.Pages.Count;
                }
                if (spoolFile.DevModeRecord != null)
                {
                    copyCount = spoolFile.DevModeRecord.Copies;
                    duplex    = spoolFile.DevModeRecord.Duplex;
                    color     = spoolFile.DevModeRecord.Color;
                }
            }

            // Busca o tamanho exato do arquivo se ele já foi aberto para leitura
            if ((spoolFile != null) && (spoolFileSize != spoolFile.FileSize))
            {
                spoolFileSize = spoolFile.FileSize;
            }

            Dictionary <String, Object> jobSummary = new Dictionary <String, Object>();

            jobSummary.Add("jobTime", jobTime);
            jobSummary.Add("submitted", shdw.Submitted.ToString());
            jobSummary.Add("userName", shdw.UserName);
            jobSummary.Add("printerName", shdw.PrinterName);
            jobSummary.Add("documentName", shdw.DocumentName);
            jobSummary.Add("pageCount", pageCount);
            jobSummary.Add("copyCount", copyCount);
            jobSummary.Add("duplex", duplex);
            jobSummary.Add("color", color);
            jobSummary.Add("dataType", isEMF ? "EMF" : "RAW");
            jobSummary.Add("spoolFileSize", FormatFileSize(spoolFileSize));

            return(jobSummary);
        }
示例#7
0
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();

            openFileDialog.InitialDirectory = DeviceHandler.GetSpoolDirectory();
            openFileDialog.Filter           = "Spool Shadow File (*.shd)|*.shd|Todos os arquivos (*.*)|*.*";
            DialogResult dialogResult = openFileDialog.ShowDialog();

            if (dialogResult == DialogResult.Cancel)
            {
                return;
            }

            SpooledJob spooledJob = new SpooledJob(openFileDialog.FileName, this);
            Dictionary <String, Object> jobSummary = PrintJobContext.GetJobSummary(spooledJob);

            infoBox.Clear();
            infoBox.Text += "Documento: " + jobSummary["documentName"] + Environment.NewLine;
            infoBox.Text += "Hora: " + jobSummary["submitted"] + Environment.NewLine;
            infoBox.Text += "UserName: "******"userName"] + Environment.NewLine;
            infoBox.Text += "PrinterName: " + jobSummary["printerName"] + Environment.NewLine;
            infoBox.Text += "Número de cópias: " + jobSummary["copyCount"] + Environment.NewLine;
            infoBox.Text += "Número de páginas: " + jobSummary["pageCount"] + Environment.NewLine;


            /**************************************************************************************/
            /***********************            Extra job info              ***********************/
            /**************************************************************************************/
            infoBox.Text += Environment.NewLine;
            infoBox.Text += "Driver Name: " + spooledJob.ShadowFile.DriverName + Environment.NewLine;
            infoBox.Text += "Notify Name: " + spooledJob.ShadowFile.NotifyName + Environment.NewLine;
            infoBox.Text += "Print Processor: " + spooledJob.ShadowFile.PrintProcessor + Environment.NewLine;
            infoBox.Text += "Port: " + spooledJob.ShadowFile.Port + Environment.NewLine;
            infoBox.Text += "JobId: " + spooledJob.ShadowFile.JobId.ToString() + Environment.NewLine;
            infoBox.Text += "Data type: " + jobSummary["dataType"] + Environment.NewLine;
            infoBox.Text += "Spool fileSize: " + jobSummary["spoolFileSize"] + "(" + GetPrivateFieldValue(spooledJob.ShadowFile, "spoolFileSize") + " bytes)" + Environment.NewLine;

            /**************************************************************************************/
            /***********************             DevMode info               ***********************/
            /**************************************************************************************/
            infoBox.Text += Environment.NewLine;
            infoBox.Text += "Device Name: " + spooledJob.ShadowFile.DevMode.DeviceName + Environment.NewLine;
            infoBox.Text += "Form Name: " + spooledJob.ShadowFile.DevMode.FormName + Environment.NewLine;

            infoBox.Text += Environment.NewLine;
            infoBox.Text += "Número de páginas = " + spooledJob.SpoolFile.Pages.Count.ToString() + Environment.NewLine;

            // Encerra o método caso não seja um EMF
            if (!spooledJob.ShadowFile.DataType.ToUpper().Contains("EMF"))
            {
                return;
            }

            imgPageView.Image = ((EMFPage)spooledJob.SpoolFile.Pages[0]).Thumbnail;

            int index = 0;

            foreach (EMFPage page in spooledJob.SpoolFile.Pages)
            {
                index++;
                EMFReader.Save(page.PageImage, @"C:\page" + index.ToString() + ".emf");
            }
        }