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); }
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); }
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); }
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"); } }