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