Ejemplo n.º 1
0
        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 :-)
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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);
                    }
                }
            }
        }