public ViewModel() { this.Printers = new ObservableCollection <PrinterWrapper>(); LocalPrintServer server = new LocalPrintServer(); var printQueues = server.GetPrintQueues(new EnumeratedPrintQueueTypes[] { EnumeratedPrintQueueTypes.Local, EnumeratedPrintQueueTypes.Connections }); foreach (var printQueue in printQueues) { var printerWrapper = new PrinterWrapper(); printerWrapper.PrinterName = printQueue.Name; printerWrapper.IsDefaultPrinter = (printQueue.Name == server.DefaultPrintQueue.Name); this.Printers.Add(printerWrapper); } server.Dispose(); // Depends on you :-) }
FromLocalServer <P>(Func <PrintQueue, P> printerFromPrintQueue) where P : class { var server = new LocalPrintServer(); var printQueueCollection = server.GetPrintQueues(); var disposable = new AnonymousDisposable(() => { server.Dispose(); printQueueCollection.Dispose(); }); var queues = printQueueCollection.Cast <PrintQueue>().ToArray(); var defaultIndex = DefaultIndex(queues, server.DefaultPrintQueue); var printers = queues.Select(printerFromPrintQueue).ToArray(); var defaultPrinter = defaultIndex >= 0 ? printers[defaultIndex] : null; return(new PrinterSelector <P>(printers, defaultPrinter, disposable)); }
private void Hodoo_SIP30C(DataTable dt, string BizCode, bool IsNewData) { DataTable mdt = dt.Copy(); for (int i = 0; i < mdt.Rows.Count; i++) { #region 카드발급프린터 대기열 작업완료시까지 기다림 using (LocalPrintServer localPrinterServer = new LocalPrintServer()) { PrintQueue printQueue = localPrinterServer.GetPrintQueue(PrintName); if (printQueue.NumberOfJobs > 0) { MessageBox.Show("인쇄 대기인 문서가 있습니다."); return; } localPrinterServer.Dispose(); } #endregion rPrintData = null; rPrintData = mdt.Rows[i]; //일반(사진) info.xpos = Convert.ToInt32(rPrintData["X_POS"].ToString().Trim()); info.ypos = Convert.ToInt32(rPrintData["Y_POS"].ToString().Trim()); info.xsize = Convert.ToInt32(rPrintData["X_SIZE"].ToString().Trim()); info.ysize = Convert.ToInt32(rPrintData["Y_SIZE"].ToString().Trim()); //일반(승산)-카드프린터 클래스 생성 info.bizcode = BizCode; info.membername = rPrintData["MEMBER_NAME_KOR"].ToString().Trim(); info.memberno = rPrintData["MEMBER_NO"].ToString().Trim(); info.memberphoto = rPrintData["PHOTO"] == DBNull.Value ? null : (Byte[])rPrintData["PHOTO"]; info.cardissueno = rPrintData["CARD_ISSUE_NO"].ToString().Trim(); //예외(승산)-카드프린터 클래스 생성 if (info.bizcode == "23") { info.commodity_accountcode = rPrintData["COMMODITY_ACCOUNT_CODE"].ToString().Trim(); info.gccode = rPrintData["GC_CODE"].ToString().Trim(); info.memberno = string.Format("{0}-{1}{2}", info.memberno.Trim().Substring(2, 6) , info.memberno.Trim().Substring(8, 2) , info.commodity_accountcode.Trim()); if (info.membername.Length == 3) { info.membername = String.Format("{0} {1} {2}", info.membername.Substring(0, 1), info.membername.Substring(1, 1), info.membername.Substring(2, 1)); } } //예외(대천)-카드프린터 클래스 생성 if (info.bizcode == "22") { info.registercode = rPrintData["REGISTER_CODE"].ToString().Trim(); info.printdate = DateTime.Today.ToString("yyyy.MM.dd"); if (info.memberno.Length == 10) { info.memberno = String.Format("{0}-{1}-{2}-{3}", info.memberno.Substring(0, 2), info.memberno.Substring(2, 2), info.memberno.Substring(4, 4), info.memberno.Substring(8, 2)); } //기명=N if (info.membername.Length == 3 && info.registercode == "N") { info.membername = String.Format("{0} {1} {2}", info.membername.Substring(0, 1), info.membername.Substring(1, 1), info.membername.Substring(2, 1)); } //무기명=U else { string strmemberName = info.membername; if (info.membername.Length > 11) { strmemberName = info.membername.Substring(0, 11); } info.printdate = info.printdate + (info.membername.Equals("") ? "" : " " + strmemberName); } } //예외(엘도라도)-카드프린터 클래스 생성 if (info.bizcode == "51") { info.membername = rPrintData["MEMBER_NAME_ENG"].ToString().Trim(); } //일반(대천) - 마그네틱엔코딩 info.mstrack1 = ""; info.mstrack2 = String.Format("{0}={1}", rPrintData["CARD_ISSUE_NO"].ToString().Trim(), rPrintData["MEMBER_NO"].ToString().Trim()); info.mstrack3 = ""; //예외(승산) - 마그네틱엔코딩 /*설명 : 1.승산 임시회원카드 = track1=골프혜택, track2=회원번호(8), track3="" * 2.승산 임시회원카드 = track1=회원번호(8)골프혜택, track2="", track3="" * 승산 임시회원카드는 정식카드 사용전까지 사용하며, * 정식 마그네틱 저장형식은 추후 협의후 결정(기본 = track2사용, 카드번호(10자리)=회원번호(10자리)) */ if (info.bizcode == "23") { info.mstrack1 = String.Format("{0}{1}", rPrintData["MEMBER_NO"].ToString().Trim().Substring(2, 8), rPrintData["GC_CODE"].ToString().Trim()); //rPrintData["GC_CODE"].ToString().Trim(); info.mstrack2 = ""; //rPrintData["CARD_ISSUE_NO"].ToString().Trim();//"";//String.Format("{0}", rPrintData["MEMBER_NO"].ToString().Trim().Substring(2, 8)); info.mstrack3 = ""; } if (!WriteMagnetic(IsNewData, info.mstrack1, info.mstrack2, info.mstrack3)) { return; } if (IsNewData) { Drawprint(PrintName); } suSender sender = new suSender { BizCode = BizCode, sucMode = IsNewData ? SucessMode.NewData : SucessMode.Magstripe }; bool IsSucess = true; using (LocalPrintServer localPrinterServer1 = new LocalPrintServer()) { PrintQueue printQueue = localPrinterServer1.GetPrintQueue(PrintName); int startTick = Environment.TickCount; bool isTimeOut = false; while (printQueue.NumberOfJobs > 0 & !(isTimeOut)) { printQueue.Refresh(); int currentTick = Environment.TickCount; if (currentTick - startTick > 60000) { isTimeOut = true; } System.Threading.Thread.Sleep(10); Application.DoEvents(); } if (isTimeOut) { PrintJobInfoCollection jobs = printQueue.GetPrintJobInfoCollection(); foreach (PrintSystemJobInfo job in jobs) { job.Cancel(); } int deleteStateTime = System.Environment.TickCount; string strmsg = "제한시간초과 - 인쇄가 완료되지 못했습니다. "; while ((System.Environment.TickCount - deleteStateTime) < 1000) { printQueue.Refresh(); } if (printQueue.NumberOfJobs > 0) { strmsg += "\n\r인쇄문서가 대기 중 입니다 . \n\r\n\r취소 후 다시 시도 하세요!"; } IsSucess = false; RaiseErrorEvent(new Exception(strmsg)); return; } if (IsSucess) { RaiseDataSucessEvent(sender, rPrintData); } } } }