//#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP #define PRT_ERROR //적용시 주석 해제 //출력 할때 마다 open, close 하는 부분 한번만 하도록 수정 //#define PRT_OPENCLOSE //적용시 주석 해제 //전체 버퍼 한번에 출력 하도록 수정 //#define PRT_ALLWRITE //적용시 주석 해제 //프린터 ErrorReceived //#define PRT_RECVERR //적용시 주석 해제 //Printer Thread Event Wait //#define PRT_WAITEVENT //적용시 주석 해제 //#20180329 프린터 간헐적 미출력 증상 수정 end //20180611 프린터 미출력 개선 02Printer.exe start //O2Printer.exe 통해 프린터 출력 #define PRT_O2PRINTER // 적용시 주석 해제 //20180611 프린터 미출력 개선 02Printer.exe end using System; using System.IO; using System.IO.Ports; using System.ComponentModel; using Cosmos.UserFrame; using Cosmos.BaseFrame; using Cosmos.Common; using Cosmos.CommonManager; using Microsoft.PointOfService; using System.Drawing; using System.Text; using System.Collections; using System.Runtime.InteropServices; using System.Threading; /*-----------------------------------------------------------------------------------------------*/ // 설 명 : PosPrinter 제어 // 작 성 자 : // 변경 이력 : /*-----------------------------------------------------------------------------------------------*/ namespace Cosmos.OLEDevice { /// /// PosPrinter 제어 CLASS /// public class DevicePosPrinter : IPosPrinterUs { public enum Printer_Interface { _USB_ = 0, _COM_, }; /// /// /// public enum Barcode_Type { _UPC_A_, _UPC_E_, _JAN13_EAN13_, _JAN8_EAN8_, _CODE39_, _ITF25_, _CODABAR_, _CODE93_, //1~255byte _CODE128_ //2~255byte }; /// /// /// public enum AlignmentR { _Align_left_, _Center_, _Align_right } /// /// 영수증 프린터 오픈 함수 /// [DllImport("REXOD_SDK.dll")] public static extern bool REXOD_Setup_Printer(Printer_Interface nType, int dirverNum, int nbps); /// /// 영수증 프린터 초기화 함수 /// [DllImport("REXOD_SDK.dll")] public static extern int REXOD_Printer_DeInit(); /// /// 영수증 프린터 출력 함수 /// [DllImport("REXOD_SDK.dll")] public static extern int REXOD_Print_CharW([MarshalAs(UnmanagedType.LPWStr)] string printData); /// /// 영수증 프린터 enum 함수 /// [DllImport("REXOD_SDK.dll")] public static extern int REXOD_Enum_Printer(Printer_Interface nType, int[] list); /// /// 영수증 프린터 용지 자르기 함수 /// [DllImport("REXOD_SDK.dll")] public static extern int REXOD_Part_Cut(); /// /// 영수증 프린터 용지 자르기(전체) 함수 /// [DllImport("REXOD_SDK.dll")] public static extern int REXOD_Full_Cut(); /// /// 영수증 프린터 마지막 라인 추가 함수 /// [DllImport("REXOD_SDK.dll")] public static extern int REXOD_Enter_With_nLine(int lineCount); /// /// 영수증 프린터 라인 볼드 처리 함수 /// [DllImport("REXOD_SDK.dll")] public static extern int REXOD_Bold_Word(bool bold); /// /// 영수증 프린터 라인 오른쪽으로 이동 함수 /// [DllImport("REXOD_SDK.dll")] public static extern bool REXOD_Set_This_Line_Start_Position(int leftMargin); /// /// 영수증 프린터 바코드 높이 조절 함수 /// [DllImport("REXOD_SDK.dll")] public static extern bool REXOD_Set_Barcode_Height(byte height); /// /// 영수증 프린터 바코드 출력 함수 /// [DllImport("REXOD_SDK.dll")] public static extern bool REXOD_Print_Barcode(Barcode_Type BarcodeType, byte[] pDate, int DateNum); /// /// 영수증 프린터 바코드 출력 함수 /// [DllImport("REXOD_SDK.dll")] public static extern bool REXOD_Select_Barcode_Alignment(AlignmentR newAlignment); /// /// /// /// /// [DllImport("REXOD_SDK.dll")] public static extern bool REXOD_Select_Alignment(AlignmentR newAlignment); /// /// 영수증 프린터 이미지 출력 함수 /// /// /// [DllImport("REXOD_SDK.dll")] //public static extern bool REXOD_Print_Bitmap(IntPtr bitmapImage); public static extern bool REXOD_Print_Bitmap(IntPtr bitmapImage); /// /// 영수증 프린터 폰트 2배 /// /// /// [DllImport("REXOD_SDK.dll")] public static extern bool REXOD_Double_Height(bool state); /// /// 영수증 프린터 폰트 2배 /// /// /// [DllImport("REXOD_SDK.dll")] public static extern bool REXOD_Double_Width(bool state); private enum BarcodeType { CODE93, CODE128 }; private enum Alignment { CENTER, LEFT, RIGHT }; private enum HRIPosition { NO_PRINT, ABOVE, BELOW, ABOVE_BELOW }; /// /// StateServer Object (StateServer 객체) /// public StateServer StateObject = (StateServer)StateServer.GetInstance(); /// /// Device 상태 정보 객체 /// public DeviceStatus devStatus = null; public PosStatus m_cPosStatus = null; /// /// Posfor.Net PosPrinter 객체 /// private PosPrinter posprinter = null; /// /// Pos for .Net의 Device 정보를 가져오기 위한 객체 /// private PosExplorer posExplorer = null; /// /// StatusUpdateEvent의 Status 정보 저장 /// private int m_sUpdateStatus = 0; ///// ///// Bitmap 상단 Logo 설정 성공 여부 플래그 ///// true:SetBitmap성공, false:SetBitmap실패 ///// //private bool SetTopLogo = false; ///// ///// Bitmap 하단 Logo 설정 성공 여부 플래그 ///// true:SetBitmap성공, false:SetBitmap실패 ///// //private bool SetBottomLogo = false; ///// ///// ErrorEvent의 Error응답 정보 저장 ///// //private ErrorResponse m_sErrorResponse; /// /// RS232통신을 위한 시리얼포트 객체 /// private SerialPort m_serialPort = null; private BackgroundWorker bw = null; // Printer Status/Error 응답 이벤트 private string DELIMETER = "^:|"; private bool m_bFreeEvents; public bool FreeEvents { get { return m_bFreeEvents; } set { m_bFreeEvents = value; } } /// /// Printer Daemon 작동 여부 /// private bool m_PrinterDaemonRunning = true; /// /// Printer Daemon Thread /// private Thread m_tPrtDaemon = null; /// /// Thread Waiting Time(스레드 대기시간) /// private int m_ThreadSleepTerm = 1000; private static ArrayList m_PrtBuffer; private const string CMD_OPEN_CASHDRAWER = "_OPEN_A_CASHDRAWER_"; //20180611 프린터 미출력 개선 02Printer.exe start //변경 #if(PRT_O2PRINTER) int lRecvLen = 20; byte[] bytRecvBuff = new byte[1024]; int lTimeout = 1000; private TcpSocket m_cPrtSocket = null; #endif //20180611 프린터 미출력 개선 02Printer.exe end #if(PRT_WAITEVENT) private AutoResetEvent m_AutoResetEvent = null; #endif /// /// 생성자 /// public DevicePosPrinter() { try { try { #if(PRT_WAITEVENT) // TEST::Printer Thread Event Wait m_AutoResetEvent = new AutoResetEvent(false); #endif posExplorer = new PosExplorer(); } catch (Exception ex) { } devStatus = (DeviceStatus)StateObject.DEVICE; m_cPosStatus = (PosStatus)StateObject.POS; DeviceStatusInit(); bw = new BackgroundWorker(); } catch(Exception ex) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } } /// /// Printer StateServer 정보 초기화 /// private void DeviceStatusInit() { devStatus.Printer.TopLogoFileName = ""; devStatus.Printer.BottomLogoFileName = ""; devStatus.Printer.DeviceName = ""; devStatus.Printer.Status = ""; devStatus.Printer.ErrorStatus = ""; devStatus.Printer.Open = false; } #region PrinterDaemon Start/Stop /// /// Printer Daemon Start /// public void StartPrinterDaemon() { try { m_PrtBuffer = new ArrayList(); m_tPrtDaemon = new Thread(new ThreadStart(ThreadPrtDaemonRun)); m_PrinterDaemonRunning = true; m_tPrtDaemon.Start(); } catch(Exception ex) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } } /// /// Printer Daemon Stop /// public void StopPrinterDaemon() { try { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Printer Daemon Stop!!!"); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Printer Daemon Stop!!!"); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Printer Daemon Stop!!!"); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end // 통신서버 Send Terminated (SC Send 종료) m_PrinterDaemonRunning = false; #if(PRT_WAITEVENT) m_AutoResetEvent.Set(); #endif int count = 0; //while (count < 10) while (count < 5) { if (m_tPrtDaemon != null && m_tPrtDaemon.IsAlive) m_PrinterDaemonRunning = false; else break; count++; Thread.Sleep(300); } if (count >= 10) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Force Printer Daemon Stop!!!"); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Force Printer Daemon Stop!!!"); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Force Printer Daemon Stop!!!"); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end m_tPrtDaemon.Abort(); } } catch (Exception ex) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } } #endregion PrinterThread Start/Stop #region Printer Buffer 관련 /// /// Printer Buffer 초기화 /// public void PrinterBufferClear() { try { m_PrtBuffer.Clear(); } catch (Exception ex) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :"+ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :"+ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } } public ArrayList GetPrinterBuffer() { return m_PrtBuffer; } public void AddToPrinterBuffer(byte[] arData) { try { m_PrtBuffer.Add(arData); #if(PRT_WAITEVENT) m_AutoResetEvent.Set(); #endif } catch (Exception ex) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :"+ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :"+ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } } #endregion #region Printer Daemon Main /// /// Printer Daemon Run /// private void ThreadPrtDaemonRun() { //#20180329 프린터 간헐적 미출력 증상 수정 start //출력 할때 마다 open, close 하는 부분 한번만 하도록 수정 #if(PRT_OPENCLOSE) //프린터 포트 동작 변경시 bool bClsRet = false; #endif //#20180329 프린터 간헐적 미출력 증상 수정 end bool bRet = false; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Printer Daemon Run!!"); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Printer Daemon Run!!"); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Printer Daemon Run!!"); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end while(m_PrinterDaemonRunning) { try { #if(PRT_WAITEVENT) UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "▶▶▶ Printer Device Thread Event WaitOne "); m_AutoResetEvent.WaitOne(); m_AutoResetEvent.Reset(); UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "▶▶▶ Printer Device Thread Event Run "); #endif ArrayList alBuffer = GetPrinterBuffer(); if(alBuffer.Count > 0) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Prineter Buffer Count : " + alBuffer.Count); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Prineter Buffer Count : " + alBuffer.Count); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Prineter Buffer Count : " + alBuffer.Count); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end bRet = OpenDevice(PosConst.OPOS_DEVICE.POSPRINTER, PosConst.OPOS_LDN.POSPRINTER); if( bRet == false) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Failed to open printer device ..."); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Failed to open printer device ..."); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Failed to open printer device ..."); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } System.Threading.Thread.Sleep(100); if (devStatus.Printer.Open == true) { //MemoryStream stream = new MemoryStream(); //BinaryWriter bw = new BinaryWriter(stream); bool bCheckPrinter = true; //#20171212 프린터 상태 체크 여부 추가 start //0: 체크, 1: 체크안함 //기존 /* if (m_cPosStatus.Base.OlePosPrinterModel == PosConst.POS_DEVICE_LIST.POS_PRINTER._1_EPSON) { bCheckPrinter = CheckPrinter(); } */ //변경 if (m_cPosStatus.Base.OlePosPrinterModel == PosConst.POS_DEVICE_LIST.POS_PRINTER._1_EPSON && m_cPosStatus.Base.OlePosPrinterCheckYn == "0") { bCheckPrinter = CheckPrinter(); } //#20171212 프린터 상태 체크 여부 추가 end //if (CheckPrinter() == true) if(bCheckPrinter == false) { //프린터 상태 체크 실패 시에도 Port Close(20170508-조충연K) WinManager.ConfirmMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0691)); //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "CheckPrinter() Failed..."); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "CheckPrinter() Failed..."); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "CheckPrinter() Failed..."); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } //else //{ //헬스체크 후 응답값과 상관없이 프린트 출력업무 수행. for (int nBufCnt = 0; nBufCnt < alBuffer.Count; nBufCnt++) { if (devStatus.Printer.Open == false) break; byte[] arPrtData = (byte[])alBuffer[nBufCnt]; //#20180123 프린터 다운 현상 관련 로그 추가 start //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Prineter nBufCnt : " + nBufCnt); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Prineter nBufCnt : " + nBufCnt); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Prineter nBufCnt : " + nBufCnt); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end //#20180123 프린터 다운 현상 관련 로그 추가 end if (Encoding.UTF8.GetString(arPrtData).Equals(CMD_OPEN_CASHDRAWER) == true) { switch (m_cPosStatus.Base.OlePosPrinterModel) { case PosConst.POS_DEVICE_LIST.POS_PRINTER._1_EPSON: case PosConst.POS_DEVICE_LIST.POS_PRINTER._6_P2C: case PosConst.POS_DEVICE_LIST.POS_PRINTER._7_1NR://2018.01.22;"7:4610_1NR" 모델 추가, 처리는 _1_EPSON 과 동일;girak.kim default: //bw.Write(PosConst.ESCP_COMMAND.OPEN_CASHDRAWER); TransmitCommand(PosConst.ESCP_COMMAND.OPEN_CASHDRAWER); break; case PosConst.POS_DEVICE_LIST.POS_PRINTER._2_TOSHIBA: //bw.Write(PosConst.ESCP_COMMAND.OPEN_CASHDRAWER_FOR_TOSHIBA); TransmitCommand(PosConst.ESCP_COMMAND.OPEN_CASHDRAWER_FOR_TOSHIBA); break; } } else { //bw.Write(arPrtData); //bw.Write(string.Format("{0}{1}", (char)13, (char)10)); TransmitCommand(arPrtData); } } //} //bw.Flush(); //TransmitCommand(stream.ToArray()); PrinterBufferClear(); } //#20180329 프린터 간헐적 미출력 증상 수정 start //출력 할때 마다 open, close 하는 부분 한번만 하도록 수정 //기존 /* bRet = CloseDevice(); if(bRet == false) { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Failed to close printer device ..."); } */ //변경 #if(PRT_OPENCLOSE) //프린터 포트 동작 변경시 #else bRet = CloseDevice(); if(bRet == false) { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Failed to close printer device ..."); } #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } #if(PRT_WAITEVENT) #else int nNowSleepTerm = 0; while (nNowSleepTerm < m_ThreadSleepTerm) { if (m_PrinterDaemonRunning == false) break; Thread.Sleep(100); nNowSleepTerm += 100; } #endif } catch(Exception ex) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Printer Daemon Exception : " + ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Printer Daemon Exception : " + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Printer Daemon Exception : " + ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } } //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Printer Daemon Exit!!"); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Printer Daemon Exit!!"); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Printer Daemon Exit!!"); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end //#20180329 프린터 간헐적 미출력 증상 수정 start //출력 할때 마다 open, close 하는 부분 한번만 하도록 수정 #if(PRT_OPENCLOSE) //프린터 포트 동작 변경시 bClsRet = CloseDevice(); if (bClsRet == false) { UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Failed to close printer device ..."); } #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } #endregion #region Convert Graysacle Image [DllImport("gdi32.dll")] public static extern bool DeleteObject(IntPtr hObject); [DllImport("user32.dll")] public static extern IntPtr GetDC(IntPtr hwnd); [DllImport("gdi32.dll")] public static extern IntPtr CreateCompatibleDC(IntPtr hdc); [DllImport("user32.dll")] public static extern int ReleaseDC(IntPtr hwnd, IntPtr hdc); [DllImport("gdi32.dll")] public static extern int DeleteDC(IntPtr hdc); [DllImport("gdi32.dll")] public static extern IntPtr SelectObject(IntPtr hdc, IntPtr hgdiobj); [DllImport("gdi32.dll")] public static extern int BitBlt(IntPtr hdcDst, int xDst, int yDst, int w, int h, IntPtr hdcSrc, int xSrc, int ySrc, int rop); static int SRCCOPY = 0x00CC0020; [DllImport("gdi32.dll")] static extern IntPtr CreateDIBSection(IntPtr hdc, ref BITMAPINFO bmi, uint Usage, out IntPtr bits, IntPtr hSection, uint dwOffset); static uint BI_RGB = 0; static uint DIB_RGB_COLORS = 0; [StructLayout(LayoutKind.Sequential)] private struct BITMAPINFO { public uint biSize; public int biWidth, biHeight; public short biPlanes, biBitCount; public uint biCompression, biSizeImage; public int biXPelsPerMeter, biYPelsPerMeter; public uint biClrUsed, biClrImportant; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] public uint[] cols; } #endregion #region OPEN/RESET/CLOSE /// /// 디바이스 Open시 처리함수 /// /// 장비종류(ex- "Msr","PosPrinter","Scanner"...) /// 레지스트리 항목(ex- "DefaultMsr","DefaultPosPrinter","DefaultScanner"...) /// public bool OpenDevice(string sDeviceType, string sLogicalName) { bool bRet = false; try { if (devStatus.Printer.UseYn == false) { return bRet; } switch(m_cPosStatus.Base.OlePosPrinterController) { case PosConst.POS_DEVICE_CONTROLLER.OPOS: bRet = OpenDeviceByOPOS(sDeviceType, sLogicalName); break; case PosConst.POS_DEVICE_CONTROLLER.RS232: bRet = OpenDeviceByRS232(m_cPosStatus.Base.OlePosPrinterSerialPortNumber, m_cPosStatus.Base.OlePosPrinterSerialBaudRate); break; } } catch(Exception ex) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } return bRet; } /// /// OPOS사용 디바이스 Open시 처리함수 /// /// 장비종류(ex- "Msr","PosPrinter","Scanner"...) /// 레지스트리 항목(ex- "DefaultMsr","DefaultPosPrinter","DefaultScanner"...) /// public bool OpenDeviceByOPOS(string sDeviceType, string sLogicalName) { bool bRet = false; //SetTopLogo = false; //SetBottomLogo = false; try { if(devStatus.Printer.Open == true) { return true; } DeviceInfo devinfo = null; if (sDeviceType == DeviceType.PosPrinter && sLogicalName == PosConst.OPOS_LDN.POSPRINTER) devinfo = posExplorer.GetDevice(DeviceType.PosPrinter, PosConst.OPOS_LDN.POSPRINTER); else { devStatus.Printer.Open = false; devStatus.Printer.Status = "DEVICE INFO ERROR"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.OpenDeviceByOPOS()", devStatus.Printer.Status); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.OpenDeviceByOPOS()", devStatus.Printer.Status); #else UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.OpenDeviceByOPOS()", devStatus.Printer.Status); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end return bRet; } if (devinfo == null) { devStatus.Printer.Open = false; devStatus.Printer.Status = "DEVICE INFO ERROR"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.OpenDeviceByOPOS()", devStatus.Printer.Status); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.OpenDeviceByOPOS()", devStatus.Printer.Status); #else UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.OpenDeviceByOPOS()", devStatus.Printer.Status); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end return bRet; } posprinter = (PosPrinter)posExplorer.CreateInstance(devinfo); if (posprinter != null) { posprinter.StatusUpdateEvent += new StatusUpdateEventHandler(Printer_StatusUpdateEvent); posprinter.ErrorEvent += new DeviceErrorEventHandler(Printer_ErrorEvent); try { posprinter.Open(); } catch (Exception ex) { devStatus.Printer.Status = "OPEN FAIL"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.OpenDeviceByOPOS()", devStatus.Printer.Status); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "Exception :" + "DevicePosPrinter.OpenDeviceByOPOS()", devStatus.Printer.Status); #else UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.OpenDeviceByOPOS()", devStatus.Printer.Status); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end return bRet; } try { posprinter.Claim(1000); } catch (Exception ex) { devStatus.Printer.Status = "CLAIM FAIL"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.OpenDeviceByOPOS()", devStatus.Printer.Status); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "Exception :" + "DevicePosPrinter.OpenDeviceByOPOS()", devStatus.Printer.Status); #else UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.OpenDeviceByOPOS()", devStatus.Printer.Status); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end return bRet; } try { posprinter.DeviceEnabled = true; } catch (Exception ex) { devStatus.Printer.Status = "DEVICE ENABLED FAIL"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.OpenDeviceByOPOS()", devStatus.Printer.Status); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "Exception :" + "DevicePosPrinter.OpenDeviceByOPOS()", devStatus.Printer.Status); #else UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.OpenDeviceByOPOS()", devStatus.Printer.Status); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end return bRet; } try { posprinter.AsyncMode = true; posprinter.RecLineChars = 42; posprinter.RecLetterQuality = true; posprinter.RecLineSpacing = 20; } catch (Exception ex) { devStatus.Printer.Status = "RecLetterQuality 설정 Fail"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.OpenDeviceByOPOS()", devStatus.Printer.Status); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "Exception :" + "DevicePosPrinter.OpenDeviceByOPOS()", devStatus.Printer.Status); #else UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.OpenDeviceByOPOS()", devStatus.Printer.Status); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end return bRet; } devStatus.Printer.DeviceName = devinfo.ServiceObjectName; devStatus.Printer.Open = true; devStatus.Printer.Status = "SUCCESS"; devStatus.Printer.ErrorStatus = "OK"; bw.DoWork += OlePosHandler; bRet = true; } } catch (Exception ex) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.OpenDeviceByOPOS()", ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "Exception :" + "DevicePosPrinter.OpenDeviceByOPOS()", ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.OpenDeviceByOPOS()", ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end devStatus.Printer.Open = false; devStatus.Printer.Status = "DEVICE OPEN EXCEPTION"; bRet = false; } return bRet; } /// /// RS232사용 디바이스 Open시 처리함수 /// /// SerialPort 번호 /// Baudrate /// public bool OpenDeviceByRS232(string sSerialPort, long lBaudrate) { bool bRet = false; try { //20180611 프린터 미출력 개선 02Printer.exe start //변경 #if(PRT_O2PRINTER) int iRet = OpenPrtTcpDevice("127.0.0.1", 9110); if (iRet == UserCom.OK) { devStatus.Printer.Open = true; devStatus.Printer.Status = "SUCCESS"; devStatus.Printer.ErrorStatus = "OK"; ResetDevice(); bRet = true; } else { devStatus.Printer.Open = false; devStatus.Printer.Status = "TCP CONNECT ERROR"; bRet = false; } return bRet; #endif //20180611 프린터 미출력 개선 02Printer.exe end //#20180329 프린터 간헐적 미출력 증상 수정 start //출력 할때 마다 open, close 하는 부분 한번만 하도록 수정 //기존 /* if (m_serialPort != null) { // add by wani(20170914) - Serial Port Close 보완(Buffer 초기화 추가) m_serialPort.DiscardInBuffer(); m_serialPort.DiscardOutBuffer(); m_serialPort.Close(); m_serialPort.Dispose(); System.Threading.Thread.Sleep(50); m_serialPort = null; } */ //변경 #if(PRT_OPENCLOSE) //프린터 포트 동작 변경시 if (m_serialPort != null) { if (m_serialPort.IsOpen == false) { // add by wani(20170914) - Serial Port Close 보완(Buffer 초기화 추가) m_serialPort.DiscardInBuffer(); m_serialPort.DiscardOutBuffer(); m_serialPort.Close(); m_serialPort.Dispose(); System.Threading.Thread.Sleep(50); m_serialPort = null; } else { bRet = true; return bRet; } } #else if (m_serialPort != null) { // add by wani(20170914) - Serial Port Close 보완(Buffer 초기화 추가) m_serialPort.DiscardInBuffer(); m_serialPort.DiscardOutBuffer(); m_serialPort.Close(); m_serialPort.Dispose(); System.Threading.Thread.Sleep(50); m_serialPort = null; } #endif //#20180329 프린터 간헐적 미출력 증상 수정 end if( m_serialPort == null ) { //m_serialPort = new SerialPort(m_cPosStatus.Base.OlePosPrinterSerialPortNumber, (int)m_cPosStatus.Base.OlePosPrinterSerialBaudRate); m_serialPort = new SerialPort(); if (m_serialPort == null) { devStatus.Printer.Open = false; devStatus.Printer.Status = "SERIAL PORT ERROR"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) devStatus.Printer.Status); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) devStatus.Printer.Status); #else UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) devStatus.Printer.Status); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end return bRet; } //m_serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived); //m_serialPort.PinChanged += new SerialPinChangedEventHandler(serialPort_PinChanged); //m_serialPort.ErrorReceived += new SerialErrorReceivedEventHandler(serialPort_ErrorReceived); m_serialPort.NewLine = "\r\n"; m_serialPort.Encoding = System.Text.Encoding.GetEncoding("ks_c_5601-1987"); //#20180329 프린터 간헐적 미출력 증상 수정 start //전체 버퍼 한번에 출력 하도록 수정 #if(PRT_ALLWRITE) //프린터 포트 동작 변경시 m_serialPort.WriteBufferSize = 1024 * 10; #else m_serialPort.WriteBufferSize = 1024 * 3; #endif //#20180329 프린터 간헐적 미출력 증상 수정 end m_serialPort.PortName = sSerialPort; m_serialPort.BaudRate = (int)lBaudrate; m_serialPort.DataBits = 8; m_serialPort.StopBits = StopBits.One; m_serialPort.Parity = Parity.None; //#20170808 프린터 출력 안되는 현상 수정 start //특정 케이블에 따라 출력이 안되는 현상이 있음 전부 Handshake.none로 처리 //적용시 변경 소스로 적용 //기존 /* if (m_cPosStatus.Base.OlePosPrinterModel == PosConst.POS_DEVICE_LIST.POS_PRINTER._6_P2C) { m_serialPort.Handshake = Handshake.None; } else { m_serialPort.Handshake = Handshake.RequestToSend; } */ //변경 m_serialPort.Handshake = Handshake.None; //#20170808 프린터 출력 안되는 현상 수정 end // 프린터 NV메모리에 upload 하기 위해 WriteTimeout 값이 10초 이상 되어야 함 m_serialPort.ReadTimeout = 10000; m_serialPort.WriteTimeout = 10000; m_serialPort.RtsEnable = true; m_serialPort.DtrEnable = true; FreeEvents = false; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "[1] Before opening port"); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "[1] Before opening port"); #else UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "[1] Before opening port"); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end //#20180329 프린터 간헐적 미출력 증상 수정 start #if(PRT_ERROR) //프린터 포트 동작 변경시 m_serialPort.Close(); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end m_serialPort.Open(); //#20180316 프린터 출력 안되는 증상 - 포트 오픈, 리셋 후 sleep 추가 start //#20180402 프린터 출력 안되는 점포 증가로 해당 sleep 소스 주석 start //System.Threading.Thread.Sleep(100); //#20180402 프린터 출력 안되는 점포 증가로 해당 sleep 소스 주석 end //#20180316 프린터 출력 안되는 증상 - 포트 오픈, 리셋 후 sleep 추가 end //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "[2] After opening port"); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "[2] After opening port"); #else UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "[2] After opening port"); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end if (m_serialPort.IsOpen == false) { devStatus.Printer.Open = false; devStatus.Printer.Status = "SERIAL PORT OPEN ERROR"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) devStatus.Printer.Status); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) devStatus.Printer.Status); #else UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) devStatus.Printer.Status); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end return bRet; } ResetDevice(); devStatus.Printer.Open = true; devStatus.Printer.Status = "SUCCESS"; devStatus.Printer.ErrorStatus = "OK"; bw.DoWork += OlePosHandler; bRet = true; } else { devStatus.Printer.Open = false; devStatus.Printer.Status = "SERIAL PORT ERROR"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) devStatus.Printer.Status); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) devStatus.Printer.Status); #else UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) devStatus.Printer.Status); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end return bRet; } } catch(Exception ex) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception : "+ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception : " + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception : "+ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } return bRet; } /// /// 디바이스 Rest시 처리함수 /// public void ResetDevice() { try { switch (m_cPosStatus.Base.OlePosPrinterModel) { case PosConst.POS_DEVICE_LIST.POS_PRINTER._1_EPSON: case PosConst.POS_DEVICE_LIST.POS_PRINTER._2_TOSHIBA: case PosConst.POS_DEVICE_LIST.POS_PRINTER._7_1NR://2018.01.22;"7:4610_1NR" 모델 추가, 처리는 _1_EPSON 과 동일;girak.kim TransmitCommand(PosConst.ESCP_COMMAND.INITIALIZE_PRINTER); break; case PosConst.POS_DEVICE_LIST.POS_PRINTER._3_IBM: //20180611 프린터 미출력 개선 02Printer.exe start //변경 #if(PRT_O2PRINTER) TransmitCommand(new byte[] { (byte)0x1B, (byte)0x31, (byte)0x1B, (byte)0x20, (byte)0x03, (byte)0x1B, (byte)0x33, (byte)10, // 라인간격 (byte)0x1B, (byte)0x25, (byte)0x00, // Double Byte Mode (byte)0x1B, (byte)0x20, (byte)3, // 글자간 간격 (byte)0x1B, (byte)0x54, (byte)6 }); //기존 #else TransmitCommand(new byte[] { (byte)0x1B, (byte)0x31 }); TransmitCommand(new byte[] { (byte)0x1B, (byte)0x20, (byte)0x03 }); // 글자간 간격 TransmitCommand(new byte[] { (byte)0x1B, (byte)0x33, (byte)10 }); // 라인간격 TransmitCommand(new byte[] { (byte)0x1B, (byte)0x25, (byte)0x00 }); // Double Byte Mode TransmitCommand(new byte[] { (byte)0x1B, (byte)0x20, (byte)3 }); // TransmitCommand(new byte[] { (byte)0x1B, (byte)0x54, (byte)6 }); #endif //20180611 프린터 미출력 개선 02Printer.exe end break; default: break; } } catch(Exception ex) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } } /// A /// 디바이스 Close시 처리함수 /// /// public bool CloseDevice() { bool bRet = false; try { switch(m_cPosStatus.Base.OlePosPrinterController) { case PosConst.POS_DEVICE_CONTROLLER.OPOS: bRet = CloseDeviceByOPOS(); bRet = true; break; case PosConst.POS_DEVICE_CONTROLLER.RS232: bRet = CloseDeviceByRS232(); break; } } catch (Exception ex) { devStatus.Printer.Status = "CLOSE EXCEPTION"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } return bRet; } /// /// OPOS사용 디바이스 Close시 처리함수 /// public bool CloseDeviceByOPOS() { bool bRet = false; try { if (posprinter == null) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.CloseDeviceByOPOS()", "posprinter == null"); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.CloseDeviceByOPOS()", "posprinter == null"); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.CloseDeviceByOPOS()", "posprinter == null"); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end return bRet; } posprinter.DeviceEnabled = false; posprinter.Release(); posprinter.Close(); bRet = true; posprinter = null; devStatus.Printer.Status = "CLOSE"; devStatus.Printer.Open = false; //SetTopLogo = false; //SetBottomLogo = false; bw.DoWork -= OlePosHandler; } catch (Exception ex) { devStatus.Printer.Status = "CLOSE EXCEPTION"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } return bRet; } /// /// RS232사용 디바이스 Close시 처리함수 /// public bool CloseDeviceByRS232() { bool bRet = false; bool PortOpenResult = false; try { //20180611 프린터 미출력 개선 02Printer.exe start //변경 #if(PRT_O2PRINTER) devStatus.Printer.Status = "CLOSE"; devStatus.Printer.Open = false; return true; #endif //20180611 프린터 미출력 개선 02Printer.exe end if (m_serialPort == null) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.CloseDeviceByRS232()", "m_serialPort == null"); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.CloseDeviceByRS232()", "m_serialPort == null"); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.CloseDeviceByRS232()", "m_serialPort == null"); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end return bRet; } // add by wani(20170914) - Serial Port Close 보완(Buffer 초기화 추가) m_serialPort.DiscardInBuffer(); m_serialPort.DiscardOutBuffer(); m_serialPort.Close(); System.Threading.Thread.Sleep(100); PortOpenResult = m_serialPort.IsOpen; if (PortOpenResult.Equals(true)) { m_serialPort.Close(); System.Threading.Thread.Sleep(100); } //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "SerialPort.IsOpen => " + PortOpenResult.ToString()); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "SerialPort.IsOpen => " + PortOpenResult.ToString()); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "SerialPort.IsOpen => " + PortOpenResult.ToString()); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end m_serialPort.Dispose(); bRet = true; m_serialPort = null; devStatus.Printer.Status = "CLOSE"; devStatus.Printer.Open = false; //SetTopLogo = false; //SetBottomLogo = false; bw.DoWork -= OlePosHandler; } catch(Exception ex) { devStatus.Printer.Status = "CLOSE EXCEPTION"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } return bRet; } #endregion #region Printer check /// /// Enable transmission of automatic status. /// /// public bool CheckPrinter() { bool bRet = false; string sTemp = ""; int nLen = 0; string sResp = ""; byte[] bytReadData; try { if (m_cPosStatus.Base.OlePosPrinterModel == PosConst.POS_DEVICE_CONTROLLER.RS232) { switch (m_cPosStatus.Base.OlePosPrinterModel) { //case PosConst.POS_DEVICE_LIST.POS_PRINTER._1_TM_T88II: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._2_TM_T88III: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._3_TM_T88IV: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._4_TM_T88V: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._8_SRP_352PLUSIII: case PosConst.POS_DEVICE_LIST.POS_PRINTER._1_EPSON: if (devStatus.Printer.Open == false) { if (OpenDevice(PosConst.OPOS_DEVICE.POSPRINTER, PosConst.OPOS_LDN.POSPRINTER) == false) return bRet; } bytReadData = new byte[1]; //20180611 프린터 미출력 개선 02Printer.exe start //기존 #if(PRT_O2PRINTER) #else if (m_serialPort != null && m_serialPort.IsOpen == true) { #endif //20180611 프린터 미출력 개선 02Printer.exe end // 프린터 초기화 TransmitCommand(PosConst.ESCP_COMMAND.INITIALIZE_PRINTER, false); System.Threading.Thread.Sleep(10); // Cover Check //20180611 프린터 미출력 개선 02Printer.exe start //기존 #if(PRT_O2PRINTER) #else TransmitCommand(PosConst.ESCP_COMMAND.TRANSMIT_OFFLINE_STATUS, false); #endif //변경 #if(PRT_O2PRINTER) TransmitCommand(PosConst.ESCP_COMMAND.TRANSMIT_OFFLINE_STATUS, false, true); #endif //20180611 프린터 미출력 개선 02Printer.exe end System.Threading.Thread.Sleep(70); #region //sResp = m_serialPort.ReadExisting(); //if (sResp.Length > 0) //{ // byte[] respByte = Encoding.Default.GetBytes(sResp); // if (respByte[0] == PosConst.ESCP_COMMAND.STATUS_OK[0]) // { // bRet = true; // } // else // { // return bRet; // } //} //else //{ // return bRet; //} #endregion //20180611 프린터 미출력 개선 02Printer.exe start //기존 #if(PRT_O2PRINTER) #else m_serialPort.Read(bytReadData, 0, 1); if (bytReadData.Length > 0) { if (bytReadData[0] == PosConst.ESCP_COMMAND.STATUS_OK[0]) { bRet = true; } else { return bRet; } } else { return bRet; } #endif //변경 #if(PRT_O2PRINTER) if (bytRecvBuff.Length > 0) { if (bytRecvBuff[12] == PosConst.ESCP_COMMAND.STATUS_OK[0]) { bRet = true; } else { return bRet; } } else { return bRet; } #endif //20180611 프린터 미출력 개선 02Printer.exe end // Paper Check //20180611 프린터 미출력 개선 02Printer.exe start //기존 #if(PRT_O2PRINTER) #else TransmitCommand(PosConst.ESCP_COMMAND.TRANSMIT_CONTINUOUS_PAPER_DETECTOR_STATUS, false); #endif //변경 #if(PRT_O2PRINTER) TransmitCommand(PosConst.ESCP_COMMAND.TRANSMIT_CONTINUOUS_PAPER_DETECTOR_STATUS, false, true); #endif //20180611 프린터 미출력 개선 02Printer.exe end System.Threading.Thread.Sleep(70); #region //sResp = m_serialPort.ReadExisting(); //if (sResp.Length > 0) //{ // byte[] respByte = Encoding.Default.GetBytes(sResp); // if (respByte[0] == PosConst.ESCP_COMMAND.STATUS_OK[0]) // { // bRet = true; // } // else // { // //bRet = false; // string NEAR_END = Encoding.Default.GetString(new byte[] { 0x1E }); // string NOT_PRESENT = Encoding.Default.GetString(new byte[] { 0x72 }); // string sErrMsg = string.Empty; // if (sResp == NEAR_END) // { // bRet = true; // sErrMsg = "Local Printer : RECEIPT_PAPER_NEAR_END"; // } // else if (sResp == NOT_PRESENT) sErrMsg = "Local Printer : RECEIPT_PAPER_NOT_PRESENT"; // else sErrMsg = "Local Printer : ETC_ERROR"; // UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // sErrMsg); // } //} //else //{ // return bRet; //} #endregion //20180611 프린터 미출력 개선 02Printer.exe start //기존 #if(PRT_O2PRINTER) #else m_serialPort.Read(bytReadData, 0, 1); if (bytReadData.Length > 0) { if (bytReadData[0] == PosConst.ESCP_COMMAND.STATUS_OK[0]) { bRet = true; } else { string NEAR_END = Encoding.Default.GetString(new byte[] { 0x1E }); string NOT_PRESENT = Encoding.Default.GetString(new byte[] { 0x72 }); string sReadData = Encoding.Default.GetString(bytReadData); string sErrMsg = string.Empty; if (sReadData == NEAR_END) { bRet = true; sErrMsg = "Local Printer : RECEIPT_PAPER_NEAR_END"; } else if (sReadData == NOT_PRESENT) sErrMsg = "Local Printer : RECEIPT_PAPER_NOT_PRESENT"; else sErrMsg = "Local Printer : ETC_ERROR"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", sErrMsg); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", sErrMsg); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", sErrMsg); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } } else { return bRet; } #endif //변경 #if(PRT_O2PRINTER) if (bytRecvBuff.Length > 0) { if (bytRecvBuff[12] == PosConst.ESCP_COMMAND.STATUS_OK[0]) { bRet = true; } else { string NEAR_END = Encoding.Default.GetString(new byte[] { 0x1E }); string NOT_PRESENT = Encoding.Default.GetString(new byte[] { 0x72 }); string sReadData = Encoding.Default.GetString(bytRecvBuff); string sErrMsg = string.Empty; if (sReadData == NEAR_END) { bRet = true; sErrMsg = "Local Printer : RECEIPT_PAPER_NEAR_END"; } else if (sReadData == NOT_PRESENT) sErrMsg = "Local Printer : RECEIPT_PAPER_NOT_PRESENT"; else sErrMsg = "Local Printer : ETC_ERROR"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", sErrMsg); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", sErrMsg); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", sErrMsg); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } } else { return bRet; } #endif //20180611 프린터 미출력 개선 02Printer.exe end #region //if (sResp.Length > 0) //{ // byte[] respByte = Encoding.Default.GetBytes(sResp); // if (respByte[0] == PosConst.ESCP_COMMAND.STATUS_OK[1]) // { // bRet = true; // } // else // { // return bRet; // } //} //else //{ // return bRet; //} #endregion //20180611 프린터 미출력 개선 02Printer.exe start //기존 #if(PRT_O2PRINTER) #else } #endif //20180611 프린터 미출력 개선 02Printer.exe end break; #region //case PosConst.POS_DEVICE_LIST.POS_PRINTER._2_TOSHIBA: // // Cover Check // TransmitCommand(PosConst.ESCP_COMMAND.TRANSMIT_OFFLINE_STATUS, false); // System.Threading.Thread.Sleep(100); // sResp = m_serialPort.ReadExisting(); // if (sResp.Length > 0) // { // byte[] respByte = Encoding.Default.GetBytes(sResp); // if (respByte[0] == PosConst.ESCP_COMMAND.STATUS_OK[0]) // { // bRet = true; // } // else // { // return bRet; // } // } // else // { // return bRet; // } // break; #endregion default: bRet = true; break; } } } catch(Exception ex) { devStatus.Printer.Status = "Status Check Error"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } return bRet; } //private int IsPrinterStatusOK() //{ // int iReturn = UserCom.NG; // byte[] bytReadData; // string sReadData; // BitArray arBit = null; // try // { // switch(m_cPosStatus.Base.OlePosPrinterModel) // { // case PosConst.POS_DEVICE_LIST.POS_PRINTER._7_TRST_A00: // if (m_serialPort != null && m_serialPort.IsOpen == true) // { // FreeEvents = true; // bytReadData = new byte[1]; // // 프린터 초기화 // TransmitCommand(PosConst.ESCP_COMMAND.INITIALIZE_PRINTER, false); // System.Threading.Thread.Sleep(10); // // To check whether ONLINE or OFFLINE // //TransmitCommand(PosConst.ESCP_COMMAND.TRANSMIT_PRINTER_STATUS); // //sReadData = m_serialPort.ReadExisting(); // ////m_serialPort.Read(bytReadData, 0, 1); // ////arBit = new BitArray(bytReadData); // //arBit = new BitArray(Encoding.Default.GetBytes(sReadData)); // //// ONLINE/ONFFLINE Status(ONLINE : 0, OFFLINE : 1) // //if(arBit[3] == true) // //{ // // return UserCom.NG1; // //} // // To check cover status // TransmitCommand(PosConst.ESCP_COMMAND.TRANSMIT_OFFLINE_STATUS); // m_serialPort.Read(bytReadData, 0, 1); // arBit = new BitArray(bytReadData); // // Cover Status(Closed : 0, Open : 1) // if(arBit[2] == true) // { // return UserCom.NG2; // } // // To check paper out status // TransmitCommand(PosConst.ESCP_COMMAND.TRANSMIT_CONTINUOUS_PAPER_DETECTOR_STATUS); // m_serialPort.Read(bytReadData, 0, 1); // // Paper out sensor(Has paper : 0, Paper Out : 1) // if(arBit[5] == true) // { // return UserCom.NG3; // } // iReturn = UserCom.OK; // FreeEvents = false; // } // break; // default: // iReturn = UserCom.OK; // break; // } // } // catch (Exception ex) // { // FreeEvents = false; // UserLog.WriteLogFile(UserCom.LOG_ERROR, // System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) // System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) // System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) // ex.Message); // return UserCom.NG; // } // return iReturn; //} #endregion #region 시리얼 이벤트 private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { //#20180329 프린터 간헐적 미출력 증상 수정 start //프린터 ErrorReceived /* SerialData err = e.EventType; string strErr = ""; switch (err) { case SerialData.Chars: strErr = "문자를 받아서 입력 버퍼에 배치했습니다."; break; case SerialData.Eof: strErr = "파일 끝 문자를 받아서 입력 버퍼에 배치했습니다."; break; default: break; } UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) strErr); */ //#20180329 프린터 간헐적 미출력 증상 수정 end } private void serialPort_PinChanged(object sender, SerialPinChangedEventArgs e) { } private void serialPort_ErrorReceived(object sender, SerialErrorReceivedEventArgs e) { //#20180329 프린터 간헐적 미출력 증상 수정 start //프린터 ErrorReceived #if(PRT_RECVERR) SerialError err = e.EventType; string strErr = ""; switch (err) { case SerialError.Frame: strErr = "HardWare Framing Error"; break; case SerialError.Overrun: strErr = "Charaters Buffer Over Run"; break; case SerialError.RXOver: strErr = "Input Buffer OverFlow"; break; case SerialError.RXParity: strErr = "Founded Parity Error"; break; case SerialError.TXFull: strErr = "Write Buffer was Fulled"; break; default: break; } UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) strErr); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } private void POSPrinter_StatusUpdateEvent(string sData) { } /// /// /// /// /// private void OlePosHandler(object sender, DoWorkEventArgs e) { try { if (PosOLEDevice.m_delegateOlePos != null) PosOLEDevice.m_delegateOlePos(PosConst.OPOS_DEVICE.POSPRINTER, devStatus.Printer.Status, devStatus.Printer.ErrorStatus, string.Empty); else { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "이벤트 전송 대상 없음"); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "이벤트 전송 대상 없음"); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "이벤트 전송 대상 없음"); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } } catch (Exception ex) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } } /// /// Printer 상태 변경에 따른 이벤트 처리 /// /// /// private void Printer_StatusUpdateEvent(object sender, StatusUpdateEventArgs e) { try { if (!bw.IsBusy) { m_sUpdateStatus = e.Status; switch (m_sUpdateStatus) { case PosPrinter.StatusCoverOK: devStatus.Printer.ErrorStatus = "OK"; devStatus.Printer.Status = "COVER OK"; break; case PosPrinter.StatusReceiptEmpty: devStatus.Printer.ErrorStatus = "NO PAPER"; devStatus.Printer.Status = "RECEIPT EMPTY"; break; case PosPrinter.StatusCoverOpen: devStatus.Printer.ErrorStatus = "COVER OPEN"; devStatus.Printer.Status = "COVER OPEN"; break; case PosPrinter.StatusReceiptNearEmpty: devStatus.Printer.ErrorStatus = "OK"; devStatus.Printer.Status = "REC_NEAREMPTY"; break; case PosPrinter.StatusReceiptPaperOK: devStatus.Printer.ErrorStatus = "OK"; devStatus.Printer.Status = "REC PAPEROK"; break; default: devStatus.Printer.ErrorStatus = "OK"; devStatus.Printer.Status = "OK"; break; } //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.Printer_StatusUpdateEvent()", "POS Printer Status=[" + devStatus.Printer.Status + "], ErrStatus=[" + devStatus.Printer.ErrorStatus + "]"); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.Printer_StatusUpdateEvent()", "POS Printer Status=[" + devStatus.Printer.Status + "], ErrStatus=[" + devStatus.Printer.ErrorStatus + "]"); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.Printer_StatusUpdateEvent()", "POS Printer Status=[" + devStatus.Printer.Status + "], ErrStatus=[" + devStatus.Printer.ErrorStatus + "]"); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end bw.RunWorkerAsync(); if (PosOLEDevice.m_delegateOlePos != null) PosOLEDevice.m_delegateOlePos(PosConst.OPOS_DEVICE.POSPRINTER, devStatus.Printer.Status, devStatus.Printer.ErrorStatus, string.Empty); } else { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "프린터 이벤트 처리 전 이벤트 발생 불가"); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "프린터 이벤트 처리 전 이벤트 발생 불가"); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "프린터 이벤트 처리 전 이벤트 발생 불가"); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } } catch (Exception ex) { devStatus.Printer.Status = "STATUS UPDATE EVENT ERROR"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } finally { //posprinter.ClearOutput(); } } /// /// Printer 에러이벤트 처리 /// /// /// private void Printer_ErrorEvent(object sender, DeviceErrorEventArgs e) { try { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.Printer_ErrorEvent()", "ErrorEvent 발생, ErrorCode=[" + e.ErrorCode.ToString() + "], ErrorResponse=[" + e.ErrorResponse.ToString() + "]"); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.Printer_ErrorEvent()", "ErrorEvent 발생, ErrorCode=[" + e.ErrorCode.ToString() + "], ErrorResponse=[" + e.ErrorResponse.ToString() + "]"); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.Printer_ErrorEvent()", "ErrorEvent 발생, ErrorCode=[" + e.ErrorCode.ToString() + "], ErrorResponse=[" + e.ErrorResponse.ToString() + "]"); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end if (e.ErrorResponse == ErrorResponse.Clear) { if (devStatus.Printer.ErrorStatus != "ER_CLEAR") { //devStatus.Printer.ErrorStatus = "ER_CLEAR"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.Printer_ErrorEvent()", */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.Printer_ErrorEvent()", #else UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.Printer_ErrorEvent()", #endif //#20180329 프린터 간헐적 미출력 증상 수정 end e.ErrorCode + " " + devStatus.Printer.ErrorStatus + " " + posprinter.ErrorString); //UserLog.WriteAMSLog("DEV", "ERR", "0302", "Printer " + e.ErrorCode.ToString() + " " + posprinter.ErrorString); } } if (e.ErrorCode == ErrorCode.Failure) { if (devStatus.Printer.ErrorStatus != "E_FAILURE") { devStatus.Printer.ErrorStatus = "E_FAILURE"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.Printer_ErrorEvent()", e.ErrorCode + " " + devStatus.Printer.ErrorStatus + " " + posprinter.ErrorString); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.Printer_ErrorEvent()", e.ErrorCode + " " + devStatus.Printer.ErrorStatus + " " + posprinter.ErrorString); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) "DevicePosPrinter.Printer_ErrorEvent()", e.ErrorCode + " " + devStatus.Printer.ErrorStatus + " " + posprinter.ErrorString); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end //UserLog.WriteAMSLog("DEV", "ERR", "0402", "Printer " + e.ErrorCode.ToString() + " " + posprinter.ErrorString); } } posprinter.ClearOutput(); } catch (Exception ex) { devStatus.Printer.Status = "ERROREVENT ERROR"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } } #endregion #region 출력 /// /// 바코드 아래 출력할 문구의 가운데 정렬후 리턴 /// /// /// private string TextAlignCenter(string sData) { string sPrtData = string.Empty; if (m_cPosStatus.Base.OptBillPrintSize == "0") //0:42bytes { if (CmUtil.LenH(sData) < 42) sPrtData = CmUtil.LPadH("", 21 - (CmUtil.LenH(sData) / 2)) + sData; } return sPrtData; } /// /// 출력할 데이터를 Line group 단위로 받아 처리 /// /// private void PrintLineDataGroup(string pLineDataGroup) { StringBuilder sbPrintData = new StringBuilder(); string sHeader = string.Empty; string sData = string.Empty; //20170913 IBM 프린터 행간 축소 start //기존 //string CrLf = string.Format("{0}{1}", (char)13, (char)10); //변경 byte[] CrLf; //20170913 IBM 프린터 행간 축소 end string[] aLineDataGroup; byte[] bytTemp = null; try { MemoryStream stream = new MemoryStream(); BinaryWriter bw = new BinaryWriter(stream); //20170913 IBM 프린터 행간 축소 start CrLf = new byte[5]; Array.Clear(CrLf, 0, CrLf.Length); if (m_cPosStatus.Base.OlePosPrinterModel == PosConst.POS_DEVICE_LIST.POS_PRINTER._3_IBM) { // LF + WIDTH_X2_OFF CrLf[0] = 10; CrLf[1] = 27; CrLf[2] = 33; CrLf[3] = 0; } else { // CRLF CrLf[0] = 13; CrLf[1] = 10; } //20170913 IBM 프린터 행간 축소 end aLineDataGroup = pLineDataGroup.Split(new string[] { DELIMETER }, StringSplitOptions.None); int nLoop = 0; foreach (string sLineData in aLineDataGroup) { if (sLineData.Length < 5) continue; sHeader = sLineData.Substring(0, 5); sData = sLineData.Substring(5); switch(sHeader) { case PosConst.PRT_HDR.PRT_BMP: //[BMP] bytTemp = PrintBMP(sData); if (bytTemp != null) { bw.Write(bytTemp); } break; case PosConst.PRT_HDR.PRT_SGN: bytTemp = PrintBMP(BaseCom.NxDataPath + "SIGN\\" + sData); if (bytTemp != null) { bw.Write(bytTemp); } break; case PosConst.PRT_HDR.PRT_TBM: //[TBM] //if (File.Exists(BaseCom.NxImgPath + m_cPosStatus.Base.BrandDiv + "_TOP.bmp") == true) //{ // bw.Write(PosConst.ESCP_COMMAND.CENTER_ALIGN); // bw.Write(PrintTopLogo()); // bw.Write(PosConst.ESCP_COMMAND.LEFT_ALIGN); //} //2018.01.22; 1NR 모델은 상단부터 출력;girak.kim;Start if (m_cPosStatus.Base.OlePosPrinterModel == PosConst.POS_DEVICE_LIST.POS_PRINTER._7_1NR) { if (m_cPosStatus.Base.TextLogoMsgUseYn == "0" && File.Exists(BaseCom.NxImgPath + m_cPosStatus.Base.BrandDiv + "_TOP.bmp") == true) { bw.Write(PosConst.ESCP_COMMAND.CENTER_ALIGN); bw.Write(PrintTopLogo()); bw.Write(PosConst.ESCP_COMMAND.LEFT_ALIGN); } } //2018.01.22; 1NR 모델은 상단부터 출력;girak.kim;End break; case PosConst.PRT_HDR.PRT_BBM: //[BBM] if (m_cPosStatus.Base.TextLogoMsgUseYn == "0" && File.Exists(BaseCom.NxImgPath + m_cPosStatus.Base.BrandDiv + "_BOT.bmp") == true) { bw.Write(PosConst.ESCP_COMMAND.CENTER_ALIGN); bw.Write(PrintBottomLogo()); bw.Write(PosConst.ESCP_COMMAND.LEFT_ALIGN); } break; case PosConst.PRT_HDR.PRT_BAR: //[BAR] bw.Write(Encoding.Default.GetBytes(PrintBarcodeData(BarcodeType.CODE128, Alignment.CENTER, HRIPosition.BELOW, sData))); break; case PosConst.PRT_HDR.PRT_BA1: //[BA1] case PosConst.PRT_HDR.PRT_SIS: bw.Write(Encoding.Default.GetBytes(PrintBarcodeData(BarcodeType.CODE128, Alignment.CENTER, HRIPosition.NO_PRINT, sData))); break; case PosConst.PRT_HDR.PRT_CUT: //[CUT] int iMaxCnt = 0; switch(m_cPosStatus.Base.OlePosPrinterModel) { case PosConst.POS_DEVICE_LIST.POS_PRINTER._1_EPSON: case PosConst.POS_DEVICE_LIST.POS_PRINTER._2_TOSHIBA: case PosConst.POS_DEVICE_LIST.POS_PRINTER._7_1NR://2018.01.22; 1NR 모델 추가 ;girak.kim default: iMaxCnt = 4; break; case PosConst.POS_DEVICE_LIST.POS_PRINTER._6_P2C: iMaxCnt = 2; break; } if (m_cPosStatus.Base.OlePosPrinterModel != PosConst.POS_DEVICE_LIST.POS_PRINTER._7_1NR)//2018.01.22; 1NR 모델은 상단에 출력하므로 조건문 추가, 그 외는 기존 처리;girak.kim; { //원래 소스 부분 // 영수증 상단 로고를 컷팅 바로 직전에 출력하는 것으로 변경함(20170623) //for (int i = 0; i < iMaxCnt; i++) //{ // bw.Write(CrLf); //} if (m_cPosStatus.Base.TextLogoMsgUseYn == "0" && File.Exists(BaseCom.NxImgPath + m_cPosStatus.Base.BrandDiv + "_TOP.bmp") == true) { bw.Write(PosConst.ESCP_COMMAND.CENTER_ALIGN); bw.Write(PrintTopLogo()); bw.Write(PosConst.ESCP_COMMAND.LEFT_ALIGN); } else { for (int i = 0; i < iMaxCnt; i++) { bw.Write(CrLf); } } //원래 소스 부분 끝 } switch (m_cPosStatus.Base.OlePosPrinterModel) { case PosConst.POS_DEVICE_LIST.POS_PRINTER._3_IBM: bw.Write(PosConst.ESCP_COMMAND.PAPER_CUT_1NR); break; default: bw.Write(PosConst.ESCP_COMMAND.PAPER_CUT); break; } break; case PosConst.PRT_HDR.PRT_NOR: //[NOR] bw.Write(Encoding.Default.GetBytes(sData)); bw.Write(CrLf); break; case PosConst.PRT_HDR.PRT_BLD: //[BLD] bw.Write(PosConst.ESCP_COMMAND.BOLD_ON); bw.Write(Encoding.Default.GetBytes(sData)); bw.Write(PosConst.ESCP_COMMAND.BOLD_OFF); bw.Write(CrLf); break; case PosConst.PRT_HDR.PRT_LIN: bw.Write(PosConst.ESCP_COMMAND.UNDERLINE_ON); bw.Write(Encoding.Default.GetBytes(sData)); bw.Write(PosConst.ESCP_COMMAND.UNDERLINE_OFF); bw.Write(CrLf); break; case PosConst.PRT_HDR.PRT_HOR: bw.Write(PosConst.ESCP_COMMAND.WIDTH_X2_ON); bw.Write(Encoding.Default.GetBytes(sData)); bw.Write(PosConst.ESCP_COMMAND.WIDTH_X2_OFF); bw.Write(CrLf); break; case PosConst.PRT_HDR.PRT_VER: bw.Write(PosConst.ESCP_COMMAND.HEIGHT_X2_ON); bw.Write(Encoding.Default.GetBytes(sData)); bw.Write(PosConst.ESCP_COMMAND.HEIGHT_X2_OFF); bw.Write(CrLf); break; case PosConst.PRT_HDR.PRT_BIG: bw.Write(PosConst.ESCP_COMMAND.ZOOM_ON); bw.Write(Encoding.Default.GetBytes(sData)); bw.Write(PosConst.ESCP_COMMAND.ZOOM_OFF); bw.Write(CrLf); break; case PosConst.PRT_HDR.PRT_VRB: bw.Write(PosConst.ESCP_COMMAND.HEIGHT_X2_ON); bw.Write(PosConst.ESCP_COMMAND.BOLD_ON); bw.Write(Encoding.Default.GetBytes(sData)); bw.Write(PosConst.ESCP_COMMAND.BOLD_OFF); bw.Write(PosConst.ESCP_COMMAND.HEIGHT_X2_OFF); bw.Write(CrLf); break; case PosConst.PRT_HDR.PRT_HRB: bw.Write(PosConst.ESCP_COMMAND.WIDTH_X2_ON); bw.Write(PosConst.ESCP_COMMAND.BOLD_ON); bw.Write(Encoding.Default.GetBytes(sData)); bw.Write(PosConst.ESCP_COMMAND.BOLD_OFF); bw.Write(PosConst.ESCP_COMMAND.WIDTH_X2_OFF); bw.Write(CrLf); break; case PosConst.PRT_HDR.PRT_BGB: bw.Write(PosConst.ESCP_COMMAND.ZOOM_ON); bw.Write(PosConst.ESCP_COMMAND.BOLD_ON); bw.Write(Encoding.Default.GetBytes(sData)); bw.Write(PosConst.ESCP_COMMAND.BOLD_OFF); bw.Write(PosConst.ESCP_COMMAND.ZOOM_OFF); bw.Write(CrLf); break; case PosConst.PRT_HDR.PRT_VRE : //bw.Write(PosConst.ESCP_COMMAND.HEIGHT_X2_ON); //bw.Write(PosConst.ESCP_COMMAND.REVERSE_MODE_ON); //bw.Write(Encoding.Default.GetBytes(sData)); //bw.Write(PosConst.ESCP_COMMAND.REVERSE_MODE_OFF); //bw.Write(PosConst.ESCP_COMMAND.HEIGHT_X2_OFF); bw.Write(PosConst.ESCP_COMMAND.CENTER_ALIGN); bw.Write(PosConst.ESCP_COMMAND.HEIGHT_X2_ON); bw.Write(PosConst.ESCP_COMMAND.REVERSE_MODE_ON); bw.Write(Encoding.Default.GetBytes(sData.Trim())); bw.Write(PosConst.ESCP_COMMAND.REVERSE_MODE_OFF); bw.Write(PosConst.ESCP_COMMAND.HEIGHT_X2_OFF); bw.Write(CrLf); bw.Write(PosConst.ESCP_COMMAND.LEFT_ALIGN); break; } nLoop++; } bw.Flush(); //TransmitCommand(stream.ToArray()); AddToPrinterBuffer(stream.ToArray()); } catch(Exception ex) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } } /// /// 출력할 데이터를 1 Line 단위로 받아 처리 /// /// private void PrintLineData(string pLineData) { string sType = ""; string sLineData = ""; string CrLf = string.Format("{0}{1}", (char)13, (char)10); string sTxtData = ""; if (pLineData.Length < 5) return; sType = pLineData.Substring(0, 5); sLineData = pLineData.Substring(5); string sPosMode = string.Empty; switch (sType) { case PosConst.PRT_HDR.PRT_BMP: //[BMP] try { posprinter.PrintBitmap(PrinterStation.Receipt, sLineData, PosPrinter.PrinterBitmapAsIs, PosPrinter.PrinterBitmapCenter); } catch (Exception ex) { devStatus.Printer.Status = "BITMAP PRT FAIL"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Print BMP Exception : "+devStatus.Printer.Status + "/" + ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Print BMP Exception : " + devStatus.Printer.Status + "/" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Print BMP Exception : "+devStatus.Printer.Status + "/" + ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } break; case PosConst.PRT_HDR.PRT_TBM: //[TBM] try { posprinter.PrintNormal(PrinterStation.Receipt, (char)27 + "|1B"); //'Bitmap Image Print ('비트맵 이미지 출력) } catch (Exception ex) { devStatus.Printer.Status = "TOP BMP PRT FAIL"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Print BMP Exception : "+devStatus.Printer.Status + "/" + ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Print BMP Exception : " + devStatus.Printer.Status + "/" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Print BMP Exception : "+devStatus.Printer.Status + "/" + ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } break; case PosConst.PRT_HDR.PRT_BBM: //[BBM] try { posprinter.PrintNormal(PrinterStation.Receipt, (char)27 + "|2B"); //'Bitmap Image Print ('비트맵 이미지 출력) } catch(Exception ex) { devStatus.Printer.Status = "BOTTOM BMP PRT FAIL"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Print BBM Exception : " + devStatus.Printer.Status + "/" + ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Print BBM Exception : " + devStatus.Printer.Status + "/" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Print BBM Exception : " + devStatus.Printer.Status + "/" + ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } break; case PosConst.PRT_HDR.PRT_BAR: //[BAR] try { posprinter.PrintBarCode(PrinterStation.Receipt, sLineData, BarCodeSymbology.Code128, 50, 368, PosPrinter.PrinterBarCodeCenter, BarCodeTextPosition.Below); } catch (Exception ex) { devStatus.Printer.Status = "BAR PRT FAIL"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Print BAR Exception : " + devStatus.Printer.Status + "/" + ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Print BAR Exception : " + devStatus.Printer.Status + "/" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Print BAR Exception : " + devStatus.Printer.Status + "/" + ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } break; case PosConst.PRT_HDR.PRT_BA1: //[BA1] case PosConst.PRT_HDR.PRT_SIS: try { posprinter.PrintBarCode(PrinterStation.Receipt, sLineData, BarCodeSymbology.Code128, 50, 368, PosPrinter.PrinterBarCodeCenter, BarCodeTextPosition.None); } catch (Exception ex) { devStatus.Printer.Status = "BAREx PRT FAIL"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Print BA1 Exception : " + devStatus.Printer.Status + "/" + ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Print BA1 Exception : " + devStatus.Printer.Status + "/" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Print BA1 Exception : " + devStatus.Printer.Status + "/" + ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } break; case PosConst.PRT_HDR.PRT_CUT: //[CUT] try { for(int nLoop = 0;nLoop < 5;nLoop++) { posprinter.PrintNormal(PrinterStation.Receipt, (char)27 + "|N" + " " + CrLf); } posprinter.CutPaper(100); } catch (Exception ex) { devStatus.Printer.Status = "CUT PAPER FAIL"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Print 1 Exception : " + devStatus.Printer.Status + "/" + ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Print 1 Exception : " + devStatus.Printer.Status + "/" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Print 1 Exception : " + devStatus.Printer.Status + "/" + ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } break; default: // Text Print (텍스트 출력) sTxtData = ""; switch (sType) { case PosConst.PRT_HDR.PRT_NOR: sTxtData = sTxtData + (char)27 + "|N" + sLineData + CrLf; posprinter.PrintNormal(PrinterStation.Receipt, sTxtData); break; //'Normal (보통문자) case PosConst.PRT_HDR.PRT_BLD: sTxtData = sTxtData + (char)27 + "|bC" + sLineData + CrLf; posprinter.PrintNormal(PrinterStation.Receipt, sTxtData); break; //'Bold (진하게) case PosConst.PRT_HDR.PRT_LIN: sTxtData = sTxtData + (char)27 + "|uC" + sLineData + CrLf; posprinter.PrintNormal(PrinterStation.Receipt, sTxtData); break; //'Under Line (Under Line 출력) case PosConst.PRT_HDR.PRT_HOR: sTxtData = sTxtData + (char)27 + "|2C" + sLineData + CrLf; posprinter.PrintNormal(PrinterStation.Receipt, sTxtData); break; //'2 times horizontal expansion (가로 2배 확대) case PosConst.PRT_HDR.PRT_VER: sTxtData = sTxtData + (char)27 + "|3C" + sLineData + CrLf; posprinter.PrintNormal(PrinterStation.Receipt, sTxtData); break; //'2 times vertical expansion (세로 2배 확대) case PosConst.PRT_HDR.PRT_BIG: sTxtData = sTxtData + (char)27 + "|4C" + sLineData + CrLf; posprinter.PrintNormal(PrinterStation.Receipt, sTxtData); break; //'2 times horizontal and vertical expansion (가로세로 2배 확대) case PosConst.PRT_HDR.PRT_VRB: sTxtData = sTxtData + (char)27 + "|bC" + (char)27 + "|3C" + sLineData + CrLf; break; //'2 times vertical expansion and bold(진하게 세로 2배 확대) case PosConst.PRT_HDR.PRT_HRB: sTxtData = sTxtData + (char)27 + "|bC" + (char)27 + "|2C" + sLineData + CrLf; break; //'2 times horizontal expansion and bold(진하게 가로 2배 확대) case PosConst.PRT_HDR.PRT_BGB: sTxtData = sTxtData + (char)27 + "|bC" + (char)27 + "|4C" + sLineData + CrLf; break; //'2 times horizontal and vertical expansion, bold(진하게 가로세로 2배 확대) } break; } } private byte[] PrintBMP(string sFilePath) { byte[] arRet = null; try { arRet = GetSelectBitImageByte(sFilePath, 0, false); } catch (Exception ex) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception : "+ ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception : " + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception : "+ ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } return arRet; } /// /// 상단 로고 출력 /// private byte[] PrintTopLogo() { byte[] arRet = null; try { switch (m_cPosStatus.Base.OlePosPrinterModel) { //case PosConst.POS_DEVICE_LIST.POS_PRINTER._1_TM_T88II: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._2_TM_T88III: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._3_TM_T88IV: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._4_TM_T88V: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._6_4610_1NR: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._7_TRST_A00: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._9_TP_600: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._10_GIANT_100S: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._11_P2C_All_In_One: case PosConst.POS_DEVICE_LIST.POS_PRINTER._1_EPSON: case PosConst.POS_DEVICE_LIST.POS_PRINTER._6_P2C: case PosConst.POS_DEVICE_LIST.POS_PRINTER._7_1NR://2018.01.22;"7:4610_1NR" 모델 추가, 이미지 처리는 _1_EPSON 과 동일;girak.kim default: arRet = PosConst.ESCP_COMMAND.PRINT_NV_BIT_IMAGE_1; break; case PosConst.POS_DEVICE_LIST.POS_PRINTER._2_TOSHIBA: arRet = PosConst.ESCP_COMMAND.PRINT_NV_BIT_IMAGE_3; break; //case PosConst.POS_DEVICE_LIST.POS_PRINTER._5_4610_TF7: case PosConst.POS_DEVICE_LIST.POS_PRINTER._3_IBM: arRet = PosConst.ESCP_COMMAND.PRINT_NV_BIT_IMAGE_1_1NR; //arRet = PosConst.ESCP_COMMAND.PRINT_NV_BIT_IMAGE_1; break; } } catch (Exception ex) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "PrintTopLogo Exception : " + ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + "PrintTopLogo : " + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "PrintTopLogo Exception : " + ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } return arRet; } /// /// 하단 로고 출력 /// private byte[] PrintBottomLogo() { byte[] arRet = null; try { switch (m_cPosStatus.Base.OlePosPrinterModel) { //case PosConst.POS_DEVICE_LIST.POS_PRINTER._1_TM_T88II: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._2_TM_T88III: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._3_TM_T88IV: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._4_TM_T88V: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._6_4610_1NR: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._7_TRST_A00: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._9_TP_600: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._10_GIANT_100S: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._11_P2C_All_In_One: case PosConst.POS_DEVICE_LIST.POS_PRINTER._1_EPSON: case PosConst.POS_DEVICE_LIST.POS_PRINTER._6_P2C: case PosConst.POS_DEVICE_LIST.POS_PRINTER._7_1NR://2018.01.22;"7:4610_1NR" 모델 추가, 이미지 처리는 _1_EPSON 과 동일;girak.kim default: arRet = PosConst.ESCP_COMMAND.PRINT_NV_BIT_IMAGE_2; break; case PosConst.POS_DEVICE_LIST.POS_PRINTER._2_TOSHIBA: arRet = PosConst.ESCP_COMMAND.PRINT_NV_BIT_IMAGE_4; break; //case PosConst.POS_DEVICE_LIST.POS_PRINTER._5_4610_TF7: case PosConst.POS_DEVICE_LIST.POS_PRINTER._3_IBM: arRet = PosConst.ESCP_COMMAND.PRINT_NV_BIT_IMAGE_2_1NR; //arRet = PosConst.ESCP_COMMAND.PRINT_NV_BIT_IMAGE_2; break; } } catch (Exception ex) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "PrintBottomLogo Exception:" + ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + "PrintBottomLogo :" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "PrintBottomLogo Exception:" + ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } return arRet; } /// /// 바코드 출력 함수 /// /// 바코드형태 /// 정렬위치 /// HRI Character position /// 바코드데이터 private string PrintBarcodeData(BarcodeType btBarcodeType, Alignment aAlignment, HRIPosition hpHriPosition, string sLineData) { try { string sBarcodeData = string.Empty; switch(m_cPosStatus.Base.OlePosPrinterModel) { //case PosConst.POS_DEVICE_LIST.POS_PRINTER._1_TM_T88II: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._2_TM_T88III: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._3_TM_T88IV: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._4_TM_T88V: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._6_4610_1NR: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._7_TRST_A00: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._9_TP_600: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._10_GIANT_100S: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._11_P2C_All_In_One: case PosConst.POS_DEVICE_LIST.POS_PRINTER._1_EPSON: case PosConst.POS_DEVICE_LIST.POS_PRINTER._2_TOSHIBA: case PosConst.POS_DEVICE_LIST.POS_PRINTER._6_P2C: case PosConst.POS_DEVICE_LIST.POS_PRINTER._7_1NR://2018.01.22;"7:4610_1NR" 모델 추가, 처리는 _1_EPSON 과 동일;girak.kim default: // 바코드 출력 위치 정렬 sBarcodeData += GetAlignCommandToString(aAlignment); // Set HRI chracter print position sBarcodeData += GetHRIPositionCommandToString(hpHriPosition); // Set Barcode horizontal size. sBarcodeData += String.Format("{0}{1}{2}", Convert.ToChar(0x1D), Convert.ToChar(0x77), Convert.ToChar(0x02)); // Set Barcode height sBarcodeData += String.Format("{0}{1}{2}", Convert.ToChar(0x1D), Convert.ToChar(0x68), Convert.ToChar(0x32)); // Print Barcode sBarcodeData += String.Format("{0}{1}", Convert.ToChar(0x1D), Convert.ToChar(0x6B)); switch (btBarcodeType) { case BarcodeType.CODE93: sBarcodeData += String.Format("{0}", Convert.ToChar(0x48)); sBarcodeData += Convert.ToChar(sLineData.Length); sBarcodeData += sLineData; break; case BarcodeType.CODE128: sBarcodeData += String.Format("{0}", Convert.ToChar(0x49)); int nDataLen = sLineData.Length + 2; sBarcodeData += String.Format("{0}", Convert.ToChar(nDataLen)); sBarcodeData += String.Format("{0}", Convert.ToChar(0x7B)); // "{" sBarcodeData += String.Format("{0}", Convert.ToChar(0x42)); // "B" sBarcodeData += sLineData; break; } break; //case PosConst.POS_DEVICE_LIST.POS_PRINTER._5_4610_TF7: case PosConst.POS_DEVICE_LIST.POS_PRINTER._3_IBM: // 바코드 출력 위치 정렬 sBarcodeData += GetAlignCommandToString(aAlignment); // Set HRI chracter print position sBarcodeData += GetHRIPositionCommandToString(hpHriPosition); // Set Barcode horizontal size. sBarcodeData += String.Format("{0}{1}{2}", Convert.ToChar(0x1D), Convert.ToChar(0x77), Convert.ToChar(0x02)); // Set Barcode height sBarcodeData += String.Format("{0}{1}{2}", Convert.ToChar(0x1D), Convert.ToChar(0x68), Convert.ToChar(50)); // Print Barcode sBarcodeData += String.Format("{0}{1}", Convert.ToChar(0x1D), Convert.ToChar(0x6B)); switch (btBarcodeType) { case BarcodeType.CODE93: sBarcodeData += String.Format("{0}", Convert.ToChar(0x48)); sBarcodeData += Convert.ToChar(sLineData.Length); sBarcodeData += sLineData; break; case BarcodeType.CODE128: sBarcodeData += String.Format("{0}", Convert.ToChar(0x08)); sBarcodeData += sLineData; break; } break; //case PosConst.POS_DEVICE_LIST.POS_PRINTER._4_IBM_1NR: // // 바코드 출력 위치 정렬 // sBarcodeData += GetAlignCommandToString(aAlignment); // // Set HRI chracter print position // sBarcodeData += GetHRIPositionCommandToString(hpHriPosition); // // Set Barcode horizontal size. // sBarcodeData += String.Format("{0}{1}{2}", // Convert.ToChar(0x1D), Convert.ToChar(0x77), Convert.ToChar(0x02)); // // Set Barcode height // sBarcodeData += String.Format("{0}{1}{2}", // Convert.ToChar(0x1D), Convert.ToChar(0x68), Convert.ToChar(0x50)); // // Print Barcode // sBarcodeData += String.Format("{0}{1}", // Convert.ToChar(0x1D), Convert.ToChar(0x6B)); // switch (btBarcodeType) // { // case BarcodeType.CODE93: // sBarcodeData += String.Format("{0}", Convert.ToChar(0x48)); // sBarcodeData += Convert.ToChar(sLineData.Length); // sBarcodeData += sLineData; // break; // case BarcodeType.CODE128: // sBarcodeData += String.Format("{0}", Convert.ToChar(0x07)); // //sBarcodeData += String.Format("{0}", Convert.ToChar(0x07)); // sBarcodeData += sLineData; // break; // } // break; } // 출력 정렬 위치 원복 sBarcodeData += GetAlignCommandToString(Alignment.LEFT); //m_serialPort.Write(sBarcodeData); return sBarcodeData; } catch(Exception ex) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end return ""; } } /// /// Byte 배열의 HRI print position Command 를 string으로 변환 /// /// /// private string GetHRIPositionCommandToString(HRIPosition hpHriPosition) { string sCommand = string.Empty; try { switch(hpHriPosition) { case HRIPosition.NO_PRINT: sCommand = System.Text.Encoding.Default.GetString(buildESCPCommand(PosConst.ESCP_COMMAND.HRI_PRINT_POSITION, (byte)0)); break; case HRIPosition.ABOVE: sCommand = System.Text.Encoding.Default.GetString(buildESCPCommand(PosConst.ESCP_COMMAND.HRI_PRINT_POSITION, (byte)1)); break; case HRIPosition.BELOW: sCommand = System.Text.Encoding.Default.GetString(buildESCPCommand(PosConst.ESCP_COMMAND.HRI_PRINT_POSITION, (byte)2)); break; case HRIPosition.ABOVE_BELOW: sCommand = System.Text.Encoding.Default.GetString(buildESCPCommand(PosConst.ESCP_COMMAND.HRI_PRINT_POSITION, (byte)3)); break; } } catch(Exception ex) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } return sCommand; } /// /// Byte 배열의 Align Command 를 string으로 변환 /// /// 정렬위치 /// private string GetAlignCommandToString(Alignment aAlignment) { string sCommand = string.Empty; try { switch(aAlignment) { case Alignment.CENTER: sCommand = System.Text.Encoding.Default.GetString(PosConst.ESCP_COMMAND.CENTER_ALIGN); break; case Alignment.LEFT: sCommand = System.Text.Encoding.Default.GetString(PosConst.ESCP_COMMAND.LEFT_ALIGN); break; case Alignment.RIGHT: sCommand = System.Text.Encoding.Default.GetString(PosConst.ESCP_COMMAND.RIGHT_ALIGN); break; } } catch(Exception ex) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } return sCommand; } /// /// 프린터 출력 /// /// 출력할 데이터 Line 단위 배열 /// 해피스테이션만 사용할꺼임 2019.03.27 /// public bool ReceiptPrinter(string[] pPrintData, bool kiosk) { bool bRet = false; int[] List = new int[32]; int ListNum = 0; bool Interface_opend = true; if (m_cPosStatus.Base.OlePosPrinterController == PosConst.POS_DEVICE_CONTROLLER.RS232) //해피스테이션 rs232 사용 { string sPrtPort = CmUtil.MidH(m_cPosStatus.Base.OlePosPrinterSerialPortNumber, 3, m_cPosStatus.Base.OlePosPrinterSerialPortNumber.Length - 3); long baudRate = m_cPosStatus.Base.OlePosPrinterSerialBaudRate; Interface_opend = REXOD_Setup_Printer(Printer_Interface._COM_, int.Parse(sPrtPort), (int)baudRate); } else if (m_cPosStatus.Base.OlePosPrinterController == PosConst.POS_DEVICE_CONTROLLER.OPOS) //해피스테이션 usb 사용 { ListNum = REXOD_Enum_Printer(Printer_Interface._USB_, List); if (ListNum >= 1) { Interface_opend = REXOD_Setup_Printer(Printer_Interface._USB_, List[0], 0); } } Bitmap bitmapImage; int iRet = 0; string sFileName = string.Empty; string lastPrintData = ""; string printDataGbn = ""; byte[] strBarcode = null; for (int i = 0; i < pPrintData.Length; i++) { if (pPrintData[i].Length >= 5) printDataGbn = pPrintData[i].Substring(0, 5); if (pPrintData[i].Length >= 5) lastPrintData = pPrintData[i].Substring(5) + "\r\n"; else lastPrintData = "" + "\r\n"; if (printDataGbn.Equals("[BLD]")) REXOD_Bold_Word(true); if (printDataGbn.Equals("[BAR]")) { strBarcode = Encoding.UTF8.GetBytes(PrintBarcodeData(BarcodeType.CODE128, Alignment.CENTER, HRIPosition.NO_PRINT, lastPrintData.Replace("\r\n", ""))); REXOD_Select_Barcode_Alignment(AlignmentR._Center_); REXOD_Print_Barcode(Barcode_Type._CODE128_, strBarcode, strBarcode.Length); } else if (printDataGbn.Equals("[SGN]")) { sFileName = BaseCom.NxDataPath + "SIGN\\" + lastPrintData.Replace("\r\n", ""); if (File.Exists(sFileName)) { bitmapImage = new Bitmap(sFileName); if (bitmapImage != null) { // var rectangle = new System.Drawing.Rectangle(0, 0, 496, 100); // var lastImg = bitmapImage.Clone(rectangle, System.Drawing.Imaging.PixelFormat.Format8bppIndexed); // ImageConverter converter = new ImageConverter(); // GCHandle pinnedArray = GCHandle.Alloc((byte[])converter.ConvertTo(bitmapImage, typeof(byte[])), GCHandleType.Pinned); // IntPtr pointer = pinnedArray.AddrOfPinnedObject(); REXOD_Select_Alignment(AlignmentR._Center_); IntPtr hbit = bitmapImage.GetHbitmap(); REXOD_Print_Bitmap(hbit); //REXOD_Print_Bitmap(pointer); //pinnedArray.Free(); DeleteObject(hbit); REXOD_Select_Alignment(AlignmentR._Align_left_); } } } else if (printDataGbn.Equals("[TBM]")) { sFileName = BaseCom.NxCDPPath + PosConst.MST_IMG_PATH.RLOGO + @"PB_TOP.bmp"; if (File.Exists(sFileName)) { bitmapImage = new Bitmap(sFileName); if (bitmapImage != null) { // var rectangle = new System.Drawing.Rectangle(0, 0, 496, 100); // var lastImg = bitmapImage.Clone(rectangle, System.Drawing.Imaging.PixelFormat.Format8bppIndexed); // ImageConverter converter = new ImageConverter(); // GCHandle pinnedArray = GCHandle.Alloc((byte[])converter.ConvertTo(bitmapImage, typeof(byte[])), GCHandleType.Pinned); // IntPtr pointer = pinnedArray.AddrOfPinnedObject(); REXOD_Select_Alignment(AlignmentR._Center_); IntPtr hbit = bitmapImage.GetHbitmap(); REXOD_Print_Bitmap(hbit); //REXOD_Print_Bitmap(pointer); //pinnedArray.Free(); DeleteObject(hbit); REXOD_Select_Alignment(AlignmentR._Align_left_); } } } else if (printDataGbn.Equals("[BBM]")) { sFileName = BaseCom.NxCDPPath + PosConst.MST_IMG_PATH.RLOGO + @"PB_BOT.bmp"; if (File.Exists(sFileName)) { bitmapImage = new Bitmap(sFileName); if (bitmapImage != null) { // var rectangle = new System.Drawing.Rectangle(0, 0, 496, 100); // var lastImg = bitmapImage.Clone(rectangle, System.Drawing.Imaging.PixelFormat.Format8bppIndexed); // ImageConverter converter = new ImageConverter(); // GCHandle pinnedArray = GCHandle.Alloc((byte[])converter.ConvertTo(bitmapImage, typeof(byte[])), GCHandleType.Pinned); // IntPtr pointer = pinnedArray.AddrOfPinnedObject(); REXOD_Select_Alignment(AlignmentR._Center_); IntPtr hbit = bitmapImage.GetHbitmap(); REXOD_Print_Bitmap(hbit); //REXOD_Print_Bitmap(pointer); //pinnedArray.Free(); DeleteObject(hbit); REXOD_Select_Alignment(AlignmentR._Align_left_); } } } else if (printDataGbn.Equals("[BIG]")) { //RE REXOD_Double_Height(true); REXOD_Double_Width(true); REXOD_Bold_Word(true); REXOD_Set_This_Line_Start_Position(40); iRet = REXOD_Print_CharW(lastPrintData); REXOD_Double_Height(false); REXOD_Double_Width(false); REXOD_Bold_Word(false); iRet = REXOD_Print_CharW(" " + "\r\n"); }else if (printDataGbn.Equals("[HOR]")) { REXOD_Double_Width(true); REXOD_Set_This_Line_Start_Position(40); iRet = REXOD_Print_CharW(lastPrintData); REXOD_Double_Width(false); } else if (printDataGbn.Equals("[VER]")) { iRet = REXOD_Print_CharW(" " + "\r\n"); REXOD_Set_This_Line_Start_Position(40); iRet = REXOD_Print_CharW(lastPrintData); iRet = REXOD_Print_CharW(" " + "\r\n"); } else { REXOD_Set_This_Line_Start_Position(40); iRet = REXOD_Print_CharW(lastPrintData); } if (printDataGbn.Equals("[BLD]")) REXOD_Bold_Word(false); } REXOD_Enter_With_nLine(6); REXOD_Full_Cut(); return bRet; } /// /// 프린터 출력 /// /// 출력할 데이터 Line 단위 배열 /// public bool ReceiptPrinter(string[] pPrintData) { bool bRet = false; try { if (devStatus.Printer.ErrorStatus == "E_FAILURE") devStatus.Printer.ErrorStatus = "OK"; if(devStatus.Printer.UseYn == false) { return bRet; } //if (devStatus.Printer.Open == false) //{ // if (OpenDevice(PosConst.OPOS_DEVICE.POSPRINTER, PosConst.OPOS_LDN.POSPRINTER) == false) return bRet; //} if (m_cPosStatus.Base.OlePosPrinterController == PosConst.POS_DEVICE_CONTROLLER.OPOS) { if (devStatus.Printer.Open == false) { if (OpenDevice(PosConst.OPOS_DEVICE.POSPRINTER, PosConst.OPOS_LDN.POSPRINTER) == false) return bRet; } // (OPOS) Begin a transaction. posprinter.TransactionPrint(PrinterStation.Receipt, PrinterTransactionControl.Transaction); foreach (string sLineData in pPrintData) { this.PrintLineData(sLineData); } // (OPOS) End a transaction by printing the buffered data. posprinter.TransactionPrint(PrinterStation.Receipt, PrinterTransactionControl.Normal); if (devStatus.Printer.ErrorStatus != "OK") { //프린터 상태 체크 실패 시에도 Port Close(20170508-조충연K) CloseDevice(); devStatus.Printer.Status = "Receipt Print Fail"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "ReceiptPrinter Fail " + devStatus.Printer.ErrorStatus); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "ReceiptPrinter Fail " + devStatus.Printer.ErrorStatus); #else UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "ReceiptPrinter Fail " + devStatus.Printer.ErrorStatus); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end return bRet; } else { devStatus.Printer.Status = "Receipt Print Success"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "ReceiptPrinter SUCCESS"); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "ReceiptPrinter SUCCESS"); #else UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "ReceiptPrinter SUCCESS"); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } CloseDevice(); } else if(m_cPosStatus.Base.OlePosPrinterController == PosConst.POS_DEVICE_CONTROLLER.RS232) { //if (m_serialPort == null || m_serialPort.IsOpen == false) //{ // return false; //} //if (CheckPrinter() == false) //{ // //프린터 상태 체크 실패 시에도 Port Close(20170508-조충연K) // CloseDevice(); // WinManager.ConfirmMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0691)); // return false; //} // PAGE MODE 에서 Print NV bit image 명령어(FS p)를 사용할 수 없으므로 // Serial I/F 사용 시에는 PAGE MODE 사용 안 함 (2016/06/16-CYCHO) // (RS232) Begin a transaction. //TransmitCommand(PosConst.ESCP_COMMAND.SET_PAGE_MODE); StringBuilder sbBuffer = new StringBuilder(); int nCnt = 0; int nEndIdx; for (int i = 0; i < (nEndIdx = pPrintData.Length); i++) { sbBuffer.Append(pPrintData[i]); sbBuffer.Append(DELIMETER); nCnt++; //20180611 프린터 미출력 개선 02Printer.exe start, 20180719 #if(PRT_O2PRINTER) if(nCnt >= 1000 || i + 1 == nEndIdx) #else if(nCnt >= 100 || i + 1 == nEndIdx) #endif //20180611 프린터 미출력 개선 02Printer.exe end, 20180719 { nCnt = 0; this.PrintLineDataGroup(sbBuffer.ToString()); sbBuffer.Clear(); //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) pPrintData.Length.ToString() + "," + i.ToString()); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) pPrintData.Length.ToString() + "," + i.ToString()); #else UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) pPrintData.Length.ToString() + "," + i.ToString()); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } } //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "ReceiptPrinter SUCCESS"); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "ReceiptPrinter SUCCESS"); #else UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "ReceiptPrinter SUCCESS"); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } //// 빚은몰 웹페이지에서 출력 기능이 존재하여 계속 물고 있을 수 없다.(안호성C - 2017.04.28) //CloseDevice(); bRet = true; } catch (Exception ex) { devStatus.Printer.Status = "Receipt Print Fail"; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end return bRet; } return bRet; } #endregion #region Print Bitmap image /// /// BMP 이미지를 byte로 반환 /// /// private byte[] GetSelectBitImageByte(string sFilePath, double nImgWidth, bool bImgScale) { byte[] bytes = new byte[0]; try { // BMP파일 경로가 없거나 경로에 파일이 없으면 return if (sFilePath == "" || File.Exists(sFilePath) == false) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "BMP File not Exists : " + sFilePath); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "BMP File not Exists : " + sFilePath); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "BMP File not Exists : " + sFilePath); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end return null; } ConvertBitmapData data = GetBitmapData(sFilePath, nImgWidth, bImgScale); BitArray dots = data.Dots; byte[] width = BitConverter.GetBytes(data.Width); int offset = 0; MemoryStream stream = new MemoryStream(); BinaryWriter bw = new BinaryWriter(stream); // 초기화 bw.Write((char)0x1B); bw.Write('@'); bw.Write((char)0x1B); bw.Write('3'); bw.Write((byte)24); bw.Write((char)0x1B); bw.Write((char)0x61); bw.Write((char)0x31); while (offset < data.Height) { /* Select bit image mode * [Format] ASCII ESC ✻ m nL nH d1 ... dk * Hex 1B 2A m nL nH d1 ... dk * Decimal 27 42 m nL nH d1 ... dk *------------------------------------------------- * m Mode Number of bits for Dot density Amount of data (k) * vertical data in horizontal * 0 8-dot single-density 8 Single-density nL + nH × 256 * 1 8-dot double-density 8 Double-density nL + nH × 256 * 32 24-dot single-density 24 Single-density (nL +nH × 256) × 3 * 33 24-dot double-density 24 Double-density (nL + nH × 256) × 3 */ bw.Write((char)0x1B); bw.Write('*'); // bit-image mode(0x2A) bw.Write((byte)33); // 24-dot double-density bw.Write(width[0]); // width low byte bw.Write(width[1]); // width high byte for (int x = 0; x < data.Width; ++x) { for (int k = 0; k < 3; ++k) { byte slice = 0; for (int b = 0; b < 8; ++b) { int y = (((offset / 8) + k) * 8) + b; // Calculate the location of the pixel we want in the bit array. // It'll be at (y * width) + x. int i = (y * data.Width) + x; // If the image is shorter than 24 dots, pad with zero. bool v = false; if (i < dots.Length) { v = dots[i]; } slice |= (byte)((v ? 1 : 0) << (7 - b)); } bw.Write(slice); } } offset += 24; // 24-dot double-density bw.Write((char)0x0A); } // Restore the line spacing to the default of 30 dots. bw.Write((char)0x1B); bw.Write('3'); bw.Write((byte)30); bw.Flush(); bytes = stream.ToArray(); } catch (Exception ex) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception : "+ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception : " + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception : "+ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } return bytes; } internal class ConvertBitmapData { public BitArray Dots { get; set; } public int Height { get; set; } public int Width { get; set; } } private ConvertBitmapData GetBitmapData(string sFilePath, double nImgWidth, bool bImgScale) { try { using(var bitmaptmp = (Bitmap)Bitmap.FromFile(sFilePath)) { Bitmap bitmap = bitmaptmp; var threshold = 127; var index = 0; if(nImgWidth <= 0) { nImgWidth = (double)bitmap.Width; } double multiplier = nImgWidth; double scale = (double)(multiplier / (double)bitmap.Width); if (!bImgScale) scale = 1; int xheight = (int)(bitmap.Height * scale); int xwidth = (int)(bitmap.Width * scale); var dimensions = xwidth * xheight; var dots = new BitArray(dimensions); for(var y = 0;y < xheight;y++) { for(var x = 0;x < xwidth;x++) { var _x = (int)(x / scale); var _y = (int)(y / scale); var color = bitmap.GetPixel(_x, _y); var luminance = (int)(color.R * 0.3 + color.G * 0.59 + color.B * 0.11); dots[index] = (luminance < threshold); index++; } } return new ConvertBitmapData() { Dots = dots, Height = (int)(bitmap.Height * scale), Width = (int)(bitmap.Width * scale) }; } } catch (Exception ex) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" +ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" +ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } return null; } #endregion #region Upload image to NV memory region /// /// Logo BMP 파일을 프린터 메모리에 Upload /// /// public bool SetLogoBmp() { string sTopLogoTargetFile = string.Empty; string sBotLogoTargetFile = string.Empty; string sTopLogoFile = string.Empty; string sBotLogoFile = string.Empty; string[] sLogoFiles = null; //if (SetTopLogo && SetBottomLogo) return true; try { sTopLogoFile = BaseFrame.BaseCom.NxImgPath + m_cPosStatus.Base.BrandDiv + "_TOP.bmp"; sBotLogoFile = BaseFrame.BaseCom.NxImgPath + m_cPosStatus.Base.BrandDiv + "_BOT.bmp"; if(File.Exists(sTopLogoFile)) { if(File.Exists(sBotLogoFile)) { sLogoFiles = new string[] { sTopLogoFile, sBotLogoFile }; } else { sLogoFiles = new string[] { sTopLogoFile }; } } else { //SetTopLogo = false; //SetBottomLogo = false; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, " Logo file Not Exists ", sTopLogoFile + "," + sBotLogoFile); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, " Logo file Not Exists ", sTopLogoFile + "," + sBotLogoFile); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, " Logo file Not Exists ", sTopLogoFile + "," + sBotLogoFile); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end return true; } foreach(String img in sLogoFiles) { UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Logo file : "+img); } if (devStatus.Printer.Open == false) return false; if (m_cPosStatus.Base.OlePosPrinterController == PosConst.POS_DEVICE_CONTROLLER.OPOS) { for (int i = 0; i < sLogoFiles.Length; i++) { posprinter.SetBitmap(i + 1, PrinterStation.Receipt, sLogoFiles[i], 496, PosPrinter.PrinterBitmapCenter); System.Threading.Thread.Sleep(1000); } } else if (m_cPosStatus.Base.OlePosPrinterController == PosConst.POS_DEVICE_CONTROLLER.RS232) { switch (m_cPosStatus.Base.OlePosPrinterModel) { //case PosConst.POS_DEVICE_LIST.POS_PRINTER._1_TM_T88II: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._2_TM_T88III: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._3_TM_T88IV: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._4_TM_T88V: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._7_TRST_A00: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._9_TP_600: //case PosConst.POS_DEVICE_LIST.POS_PRINTER._10_GIANT_100S: case PosConst.POS_DEVICE_LIST.POS_PRINTER._1_EPSON: case PosConst.POS_DEVICE_LIST.POS_PRINTER._7_1NR://2018.01.22;"7:4610_1NR" 모델 추가, 이미지 처리는 _1_EPSON 과 동일;girak.kim default: SetBitmap_EPSON(sLogoFiles); break; case PosConst.POS_DEVICE_LIST.POS_PRINTER._2_TOSHIBA: SetBitmap_TOSHIBA(sLogoFiles); break; //case PosConst.POS_DEVICE_LIST.POS_PRINTER._11_P2C_All_In_One: case PosConst.POS_DEVICE_LIST.POS_PRINTER._6_P2C: break; } // 이미지 upload 후 sleep 필수 System.Threading.Thread.Sleep(8000); } devStatus.Printer.Status = "LOGO BMP DOWN SUCCESS"; //SetTopLogo = true; //SetBottomLogo = true; UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "devStatus.Printer.Status:"+devStatus.Printer.Status); return true; } catch(Exception ex) { devStatus.Printer.Status = "LOGO BMP DOWN FAIL"; //SetBottomLogo = false; //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "SetLogoBmp Exception, devStatus.Printer.Status : " + devStatus.Printer.Status); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "SetLogoBmp Exception, devStatus.Printer.Status : " + devStatus.Printer.Status); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "SetLogoBmp Exception, devStatus.Printer.Status : " + devStatus.Printer.Status); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end return false; } } private void SetBitmap_TOSHIBA(string[] sFileName) { byte[] bytes; try { int nBitmapCnt = sFileName.Length; MemoryStream stream = new MemoryStream(); BinaryWriter bw = new BinaryWriter(stream); for(int nRow = 0;nRow < nBitmapCnt;nRow++) { bw.Write((char)0x1F); bw.Write((char)0x30); bw.Write((byte)(3 + nRow)); byte[] raw = File.ReadAllBytes(sFileName[nRow]); bw.Write((char)0x1F); for(int i = 0;i < raw.Length;i++) { bw.Write(raw[i]); } } bw.Flush(); bytes = stream.ToArray(); if (bytes != null && bytes.Length > 0) { TransmitCommand(bytes, false); } } catch (Exception ex) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "SetBitmap_TOSHIBA() Exception : " + ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "SetBitmap_TOSHIBA() Exception : " + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "SetBitmap_TOSHIBA() Exception : " + ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } } /// /// 명판 출력할 로고 이미지 Set /// /// 명판 출력 파일명 /// private void SetBitmap_EPSON(string[] sFileName) { byte[] bytes; try { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "SetBitmap_EPSON Start"); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "SetBitmap_EPSON Start"); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "SetBitmap_EPSON Start"); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end /* ────────────────────────────────────────────────────── * [Name] Define NV bit image * [Format] ASCII FS q n [xL xH yL yH d1...dk]1...[xL xH yL yH d1...dk]n * Hex 1C 71 n [xL xH yL yH d1...dk]1...[xL xH yL yH d1...dk]n * Decimal 28 113 n [xL xH yL yH d1...dk]1...[xL xH yL yH d1...dk]n * [Description] Defines the NV bit image in the NV graphics area. * • n specifies the number of defined NV bit images. * • xL, xH specifies (xL + xH × 256) bytes in the horizontal direction for the NV bit image you defined. * • yL, yH specifies (yL + yH × 256) bytes in the vertical direction for the NV bit image you defined. * • d specifies the definition data for the NV bit image (column format). * • k indicates the number of the definition data. k is an explanation parameter; therefore it does not need to be transmitted. * Defined Region 1 ≤ n ≤ 255 * 0 ≤ xL ≤ 255 * 0 ≤ xH ≤ 3 However, 1 ≤ (xL+xH×256) ≤ 1023 * 0 ≤ yL ≤ 255 * 0 ≤ yH ≤ 1 However, 1 ≤ (yL+yH×256) ≤ 288 * 0 ≤ d ≤ 255 * k = (xL+xH×256) × (yL+yH×256) ×8 * Total defined data area = 2 M bytes (256 K bytes) * ────────────────────────────────────────────────────── */ int nBitmapCnt = sFileName.Length; MemoryStream stream = new MemoryStream(); BinaryWriter bw = new BinaryWriter(stream); // 초기화 bw.Write((char)0x1B); bw.Write((char)0x40); //// Select pripheral device //bw.Write((char)0x1B); //bw.Write((char)0x3D); //bw.Write((char)0x01); // Define NV bit image bw.Write((char)0x1C); // FS bw.Write((char)0x71); // q bw.Write((byte)nBitmapCnt); for (int nRow = 0; nRow < nBitmapCnt; nRow++) { // 원본 이미지 Load Bitmap image = new Bitmap(sFileName[nRow]); // 1Bit Graysacle로 Convert Bitmap bmptmp = ConvertGrayscale1or8Bit(image, 1); byte[] raw = ConvertNVBitmap(bmptmp, true); //byte[] raw = ConvertNVBitmap(image, true); bw.Write(raw); image.Dispose(); bmptmp.Dispose(); } bw.Flush(); bytes = stream.ToArray(); if (bytes != null && bytes.Length > 0) { TransmitCommand(bytes, false); } //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "SetBitmap_EPSON End"); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "SetBitmap_EPSON End"); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "SetBitmap_EPSON End"); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } catch(Exception ex) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "SetBitmap_EPSON Exception : " + ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "SetBitmap_EPSON Exception : " + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "SetBitmap_EPSON Exception : " + ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } } private byte[] ConvertNVBitmap(Bitmap bitmap, bool bIncludeSize) { int baseIndex = ((bIncludeSize) ? 4 : 0); int xSize = (bitmap.Width / 8); if (xSize * 8 != bitmap.Width) { xSize++; } int ySize = (bitmap.Height / 8); if (ySize * 8 != bitmap.Height) { ySize++; } byte[] raw = new byte[xSize * ySize * 8 + ((bIncludeSize) ? 4 : 0)]; try { for (int i = 0; i < raw.Length; raw[i++] = 0) ; if (bIncludeSize) { raw[0] = (byte)(xSize & 0x00FF); raw[1] = (byte)(xSize & 0xFF00); raw[2] = (byte)(ySize & 0x00FF); raw[3] = (byte)(ySize & 0xFF00); } int k = (raw[0] + raw[1] * 256) * (raw[2] + raw[3] * 256) * 8; if (k > 2000000) { throw new Exception("Incorrect size"); } if (raw[0] < 0 || raw[0] > 255 || raw[1] < 0 || raw[1] > 3 || (raw[0] + raw[1] * 255) < 1 || (raw[0] + raw[1] * 255) > 1023 || raw[2] < 0 || raw[2] > 255 || raw[3] < 0 || raw[3] > 1 || (raw[2] + raw[3] * 255) < 1 || (raw[2] + raw[3] * 255) > 288) { throw new Exception("Incorrect size"); } for (int x = 0; x < bitmap.Width; x++) { for (int y = 0; y < bitmap.Height; y++) { Color color = bitmap.GetPixel(x, y); if (RGBGreatEqual(color, 255, 255, 128)) { continue; } int idx = (ySize * x) + y / 8; byte mask = (byte)(0x80 >> (y % 8)); raw[idx + baseIndex] |= mask; } } } catch(Exception ex) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + ex.Message); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } return raw; } private static bool RGBGreatEqual(Color c1, int R, int G, int B) { return (c1.R >= R && c1.G >= G && c1.B >= B); } private Bitmap ConvertGrayscale1or8Bit(System.Drawing.Bitmap b, int bitpixel) { if (bitpixel != 1 && bitpixel != 8) throw new System.ArgumentException("1 or 8", "bit"); int w = b.Width, h = b.Height; IntPtr hbm = b.GetHbitmap(); BITMAPINFO bmi = new BITMAPINFO(); bmi.biSize = 40; bmi.biWidth = w; bmi.biHeight = h; bmi.biPlanes = 1; bmi.biBitCount = (short)bitpixel; bmi.biCompression = BI_RGB; bmi.biSizeImage = (uint)(((w + 7) & 0xFFFFFFF8) * h / 8); bmi.biXPelsPerMeter = 1000000; bmi.biYPelsPerMeter = 1000000; uint ncols = (uint)1 << bitpixel; bmi.biClrUsed = ncols; bmi.biClrImportant = ncols; bmi.cols = new uint[256]; if (bitpixel == 1) { bmi.cols[0] = MAKERGB(0, 0, 0); bmi.cols[1] = MAKERGB(255, 255, 255); } else { for (int i = 0; i < ncols; i++) bmi.cols[i] = MAKERGB(i, i, i); } IntPtr bits0; IntPtr hbm0 = CreateDIBSection(IntPtr.Zero, ref bmi, DIB_RGB_COLORS, out bits0, IntPtr.Zero, 0); IntPtr sdc = GetDC(IntPtr.Zero); IntPtr hdc = CreateCompatibleDC(sdc); SelectObject(hdc, hbm); IntPtr hdc0 = CreateCompatibleDC(sdc); SelectObject(hdc0, hbm0); BitBlt(hdc0, 0, 0, w, h, hdc, 0, 0, SRCCOPY); System.Drawing.Bitmap b0 = System.Drawing.Bitmap.FromHbitmap(hbm0); DeleteDC(hdc); DeleteDC(hdc0); ReleaseDC(IntPtr.Zero, sdc); DeleteObject(hbm); DeleteObject(hbm0); return b0; } private static uint MAKERGB(int r, int g, int b) { return ((uint)(b & 255)) | ((uint)((r & 255) << 8)) | ((uint)((g & 255) << 16)); } #endregion #region (RS232통신) 텍스트 출력 함수 private void WriteData(string sText) { byte[] outputBytes = System.Text.Encoding.Default.GetBytes(sText); TransmitCommand(outputBytes); } /// /// 텍스트 왼쪽 정렬로 출력 후 Line feed /// /// /// private void WriteLine(string sText, int nAlign = PosConst.PRINT_ALIGN.LEFT_ALIGN) { sText = sText.Trim('\n').Trim('\r'); byte[] outputBytes = System.Text.Encoding.Default.GetBytes(sText); if (nAlign == PosConst.PRINT_ALIGN.LEFT_ALIGN) { TransmitCommand(PosConst.ESCP_COMMAND.LEFT_ALIGN, false); } else if (nAlign == PosConst.PRINT_ALIGN.CENTER_ALIGN) { TransmitCommand(PosConst.ESCP_COMMAND.CENTER_ALIGN, false); } else if (nAlign == PosConst.PRINT_ALIGN.RIGHT_ALIGN) { TransmitCommand(PosConst.ESCP_COMMAND.RIGHT_ALIGN, false); } TransmitCommand(outputBytes); TransmitCommand(PosConst.ESCP_COMMAND.LEFT_ALIGN, false); TransmitCommand(PosConst.ESCP_COMMAND.LINE_FEED); } /// /// BOLD 옵션으로 텍스트 출력 후 Line feed /// /// /// private void WriteLineBold(string sText, int nAlign = PosConst.PRINT_ALIGN.LEFT_ALIGN) { TransmitCommand(PosConst.ESCP_COMMAND.BOLD_ON); WriteLine(sText, nAlign); TransmitCommand(PosConst.ESCP_COMMAND.BOLD_OFF); } /// /// 텍스트를 가로, 세로 2배 확대로 출력 후 Line feed /// /// /// private void WriteLineZoom(string sText, int nAlign = PosConst.PRINT_ALIGN.LEFT_ALIGN) { TransmitCommand(PosConst.ESCP_COMMAND.ZOOM_ON); WriteLine(sText, nAlign); TransmitCommand(PosConst.ESCP_COMMAND.ZOOM_OFF); } /// /// 텍스트를 가로 2배 확대로 출력 후 Line feed /// /// /// private void WriteLineWidthX2(string sText, int nAlign = PosConst.PRINT_ALIGN.LEFT_ALIGN) { TransmitCommand(PosConst.ESCP_COMMAND.WIDTH_X2_ON); WriteLine(sText, nAlign); TransmitCommand(PosConst.ESCP_COMMAND.WIDTH_X2_OFF); } /// /// 텍스트를 세로 2배 확대로 출력 후 Line feed /// /// /// private void WriteLineHeightX2(string sText, int nAlign = PosConst.PRINT_ALIGN.LEFT_ALIGN) { TransmitCommand(PosConst.ESCP_COMMAND.HEIGHT_X2_ON); WriteLine(sText, nAlign); TransmitCommand(PosConst.ESCP_COMMAND.HEIGHT_X2_OFF); } /// /// Set line spacing /// /// nLines < 0 일 경우, Set default line spacing /// private void SetLineSpace(int nLines) { if (nLines >= 0) { TransmitCommand(buildESCPCommand(PosConst.ESCP_COMMAND.SET_LINE_SPACING, (byte)nLines)); } else { TransmitCommand(PosConst.ESCP_COMMAND.SET_DEFAULT_LINE_SPACING); } } /// /// Underline 옵션으로 텍스트 출력 후 Line feed /// /// /// private void WriteLineUnderline(string sText, int nAlign = PosConst.PRINT_ALIGN.LEFT_ALIGN) { TransmitCommand(PosConst.ESCP_COMMAND.UNDERLINE_ON); WriteLine(sText, nAlign); TransmitCommand(PosConst.ESCP_COMMAND.UNDERLINE_OFF); } #endregion #region (RS232) 명령어 조합 및 전송 private byte[] buildESCPCommand(byte[] command, byte[] args) { byte[] ESCPCommand = new byte[command.Length + args.Length]; Array.Copy(command, 0, ESCPCommand, 0, command.Length); Array.Copy(args, 0, ESCPCommand, command.Length, args.Length); return ESCPCommand; } private byte[] buildESCPCommand(byte[] command, byte arg) { byte[] ESCPCommand = new byte[command.Length + 1]; Array.Copy(command, 0, ESCPCommand, 0, command.Length); ESCPCommand[command.Length] = arg; return ESCPCommand; } //20180611 프린터 미출력 개선 02Printer.exe start //기존 #if(PRT_O2PRINTER) #else private void TransmitCommand(byte[] aCmd, bool bSleepOn = true) #endif //변경 #if(PRT_O2PRINTER) private void TransmitCommand(byte[] aCmd, bool bSleepOn = true, bool bHeathChk = false) #endif //20180611 프린터 미출력 개선 02Printer.exe end { try { //20180611 프린터 미출력 개선 02Printer.exe start //기존 #if(PRT_O2PRINTER) #else if (m_serialPort.IsOpen == true) { #endif //20180611 프린터 미출력 개선 02Printer.exe end int iOffset = 0; // Send 를 위한 buffer 크기를 1024 byte 로 고정(20170608) int iReadBuf = 1024; //int iReadBuf = m_serialPort.WriteBufferSize; while (true) { if (iOffset >= aCmd.Length) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name, "TransmitCommand Finish " + aCmd.Length.ToString() + "," + iOffset.ToString()); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name, "TransmitCommand Finish " + aCmd.Length.ToString() + "," + iOffset.ToString()); #else UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name, "TransmitCommand Finish " + aCmd.Length.ToString() + "," + iOffset.ToString()); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end break; } if (iReadBuf + iOffset > aCmd.Length) { iReadBuf = aCmd.Length - iOffset; } //#20180123 프린터 다운 현상 관련 로그 추가 start //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Prineter Write : TransmitCommand() Start"); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Prineter Write : TransmitCommand() Start"); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Prineter Write : TransmitCommand() Start"); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end //#20180123 프린터 다운 현상 관련 로그 추가 end // grayber@20180124 프린터 출력관련 오류 수정 start - 프린터 배열 오프셋 설정 오류로 변수 변경 //기존 //m_serialPort.Write(aCmd, iOffset, aCmd.Length); //수정 //#20180329 프린터 간헐적 미출력 증상 수정 start //전체 버퍼 한번에 출력 하도록 수정 #if(PRT_ALLWRITE) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Prineter Write data: " + Encoding.Default.GetString(aCmd)); m_serialPort.Write(Encoding.Default.GetString(aCmd)); //m_serialPort.Write(aCmd, iOffset, aCmd.Length); #else //20180611 프린터 미출력 개선 02Printer.exe start //기존 #if(PRT_O2PRINTER) #else m_serialPort.Write(aCmd, iOffset, iReadBuf); #endif //변경 #if(PRT_O2PRINTER) // TCP 접속 정보 string sPrtTcpIp = "127.0.0.1"; string sPrtTcpPort = "9110"; // 프린터 PORT 번호 string sPrtPort = CmUtil.MidH(m_cPosStatus.Base.OlePosPrinterSerialPortNumber, 3, m_cPosStatus.Base.OlePosPrinterSerialPortNumber.Length - 3); //Connect int iRet = OpenPrtTcpDevice(sPrtTcpIp, int.Parse(sPrtTcpPort)); //#20181114 영수증 프린터 base63로 전송 start //기존 #region 기존 //출력 // 0001: 출력, 0002: 헬스체크 string sPrtGb = "0001"; string sTimeOut = "00000"; if (bHeathChk == true) { sPrtGb = "0002"; sTimeOut = "00500"; } else if (bHeathChk == false) { sPrtGb = "0001"; sTimeOut = "00000"; } // tcp 헤더 string sCommHeader = sPrtGb + // 0001: 출력, 0002: 헬스체크 string.Format("{0:D2}", Convert.ToInt32(sPrtPort)) + // 01,02,03 포트번호 string.Format("{0:D6}", (int)m_cPosStatus.Base.OlePosPrinterSerialBaudRate) + // 프린터 속도 sTimeOut + // 타임아웃 string.Format("{0:D6}", (int)aCmd.Length); // 출력 데이터 길이 // tcp 종료구분자 string sETX = string.Format("{0}", (char)0x03) + string.Format("{0}", (char)0x03) + string.Format("{0}", (char)0x03); // tcp 헤더 byte로 변환 byte[] sSendbt = null; sSendbt = Encoding.Default.GetBytes(sCommHeader); // tcp 종료구분자 byte로 변환 byte[] byEtx = null; byEtx = Encoding.Default.GetBytes(sETX); // 전체 tcp 전송 데이터 byte 배열 생성 byte[] sSendData = new byte[sSendbt.Length + aCmd.Length + byEtx.Length]; // sSendData 배열에 tcp 헤더 데이터 복사 Array.Copy(sSendbt, 0, sSendData, 0, sSendbt.Length); // sSendData 배열에 영수증 출력 데이터 복사 Array.Copy(aCmd, 0, sSendData, sSendbt.Length, aCmd.Length); // sSendData 배열에 tcp 종료구분자 복사 Array.Copy(byEtx, 0, sSendData, sSendbt.Length + aCmd.Length, byEtx.Length); // 응답 배열 초기화 bytRecvBuff = null; // 전체 한번에 전송하기 위에 전송 길이 재설정 iOffset += aCmd.Length; // byte[], int, ref byte[], int int iPrtSendSocket = m_cPrtSocket.Prt_ByPassSendReceiveData(sSendData, lRecvLen, ref bytRecvBuff, lTimeout); //string sTemp0 = Encoding.Default.GetString(aCmd); #endregion 기존 //변경 #region 변경 /* //출력 // 0101: 출력, 0102: 헬스체크 string sPrtGb = "0101"; string sTimeOut = "00000"; if (bHeathChk == true) { sPrtGb = "0102"; sTimeOut = "00500"; } else if (bHeathChk == false) { sPrtGb = "0101"; sTimeOut = "00000"; } string sSendDataBase64 = Convert.ToBase64String(aCmd); byte[] btSendDataBase64 = Encoding.Default.GetBytes(sSendDataBase64); // tcp 헤더 string sCommHeader = sPrtGb + // 0001: 출력, 0002: 헬스체크 string.Format("{0:D2}", Convert.ToInt32(sPrtPort)) + // 01,02,03 포트번호 string.Format("{0:D6}", (int)m_cPosStatus.Base.OlePosPrinterSerialBaudRate) + // 프린터 속도 sTimeOut + // 타임아웃 string.Format("{0:D6}", (int)btSendDataBase64.Length); // 출력 데이터 길이 // tcp 종료구분자 string sETX = string.Format("{0}", (char)0x03) + string.Format("{0}", (char)0x03) + string.Format("{0}", (char)0x03); // tcp 헤더 byte로 변환 byte[] sSendbt = null; sSendbt = Encoding.Default.GetBytes(sCommHeader); // tcp 종료구분자 byte로 변환 byte[] byEtx = null; byEtx = Encoding.Default.GetBytes(sETX); // 전체 tcp 전송 데이터 byte 배열 생성 byte[] sSendData = new byte[sSendbt.Length + btSendDataBase64.Length + byEtx.Length]; // sSendData 배열에 tcp 헤더 데이터 복사 Array.Copy(sSendbt, 0, sSendData, 0, sSendbt.Length); // sSendData 배열에 영수증 출력 데이터 복사 Array.Copy(btSendDataBase64, 0, sSendData, sSendbt.Length, btSendDataBase64.Length); // sSendData 배열에 tcp 종료구분자 복사 Array.Copy(byEtx, 0, sSendData, sSendbt.Length + btSendDataBase64.Length, byEtx.Length); // 응답 배열 초기화 bytRecvBuff = null; // 전체 한번에 전송하기 위에 전송 길이 재설정 iOffset += aCmd.Length; // byte[], int, ref byte[], int int iPrtSendSocket = m_cPrtSocket.Prt_ByPassSendReceiveData(sSendData, lRecvLen, ref bytRecvBuff, lTimeout); //string sTemp0 = Encoding.Default.GetString(aCmd); //string sTemp1 = Encoding.Default.GetString(btSendDataBase64); //byte[] sBtTemp1 = Convert.FromBase64String(sTemp1); //string sTemp2 = Encoding.Default.GetString(sBtTemp1); */ #endregion 변경 //#20181114 영수증 프린터 base63로 전송 end //System.Threading.Thread.Sleep(2000); #endif //20180611 프린터 미출력 개선 02Printer.exe end #endif //#20180329 프린터 간헐적 미출력 증상 수정 end // grayber@20180124 프린터 출력관련 오류 수정 end //#20180329 프린터 간헐적 미출력 증상 수정 start //프린터 ErrorReceived #if(PRT_RECVERR) //프린터 포트 동작 변경시 //m_serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived); m_serialPort.ErrorReceived += new SerialErrorReceivedEventHandler(serialPort_ErrorReceived); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end //#20180123 프린터 다운 현상 관련 로그 추가 start //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Prineter Write : TransmitCommand() End"); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Prineter Write : TransmitCommand() End"); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Prineter Write : TransmitCommand() End"); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end //#20180123 프린터 다운 현상 관련 로그 추가 end //#20180329 프린터 간헐적 미출력 증상 수정 start //20180611 프린터 미출력 개선 02Printer.exe start //기존 #if(PRT_O2PRINTER) #else //전체 버퍼 한번에 출력 하도록 수정 #if(PRT_ALLWRITE) //프린터 포트 동작 변경시 iOffset += aCmd.Length; #else iOffset += iReadBuf; #endif #endif //20180611 프린터 미출력 개선 02Printer.exe end //#20180329 프린터 간헐적 미출력 증상 수정 end System.Threading.Thread.Sleep(10); //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name, aCmd.Length.ToString() + "," + iOffset.ToString()); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name, aCmd.Length.ToString() + "," + iOffset.ToString()); #else UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name, aCmd.Length.ToString() + "," + iOffset.ToString()); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } //m_serialPort.Write(Encoding.Default.GetString(aCmd, 0, aCmd.Length)); if (bSleepOn == true) System.Threading.Thread.Sleep(30); //20180611 프린터 미출력 개선 02Printer.exe start //기존 #if(PRT_O2PRINTER) #else } else { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name, "Serial Port Is Not Opened"); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name, "Serial Port Is Not Opened"); #else UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name, "Serial Port Is Not Opened"); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } #endif //20180611 프린터 미출력 개선 02Printer.exe end } catch(Exception ex) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) devStatus.Printer.Status); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + devStatus.Printer.Status); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) devStatus.Printer.Status); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end this.CloseDevice(); } //#20180329 프린터 간헐적 미출력 증상 수정 start //출력 할때 마다 open, close 하는 부분 한번만 하도록 수정 #if(PRT_ERROR) //프린터 포트 동작 변경시 finally { UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Prineter Write : TransmitCommand() finally"); } #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } #endregion #region 돈통 Open함수 /// /// 돈통 Open 함수 /// public void OpenCashDrawer() { try { if (m_cPosStatus.Base.OlePosCashDrawerType == PosConst.POS_DEVICE_LIST.CASHDRAWER._1_PRINTER) { this.AddToPrinterBuffer(Encoding.UTF8.GetBytes(CMD_OPEN_CASHDRAWER)); //if (devStatus.Printer.Open == false) //{ // this.OpenDevice(PosConst.OPOS_DEVICE.POSPRINTER, PosConst.OPOS_LDN.POSPRINTER); //} //switch (m_cPosStatus.Base.OlePosPrinterModel) //{ // case PosConst.POS_DEVICE_LIST.POS_PRINTER._1_EPSON: // case PosConst.POS_DEVICE_LIST.POS_PRINTER._6_P2C: // default: // TransmitCommand(PosConst.ESCP_COMMAND.OPEN_CASHDRAWER); // break; // case PosConst.POS_DEVICE_LIST.POS_PRINTER._2_TOSHIBA: // TransmitCommand(PosConst.ESCP_COMMAND.OPEN_CASHDRAWER_FOR_TOSHIBA); // break; //} //if(devStatus.Printer.Open == true) //{ // this.CloseDevice(); //} } } catch(Exception ex) { //#20180329 프린터 간헐적 미출력 증상 수정 start //로그 생성 위치 변경 UserCom.LOG_IOS, LOG_ERROR -> UserCom.LOG_OP //기존 /* UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) devStatus.Printer.Status); */ //변경 #if(PRT_ERROR) //프린터 포트 동작 변경시 UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception :" + devStatus.Printer.Status); #else UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) devStatus.Printer.Status); #endif //#20180329 프린터 간헐적 미출력 증상 수정 end } } //20180611 프린터 미출력 개선 02Printer.exe start //변경 #if(PRT_O2PRINTER) #region Printer OPEN / CLOSE public int OpenPrtTcpDevice(string sIp, int iPort) { int iRet = UserCom.NG; try { // PING 테스트로 프린터 가능여부 확인(2017.05.30) if (CmUtil.PingTest(sIp) == false) { if (CmUtil.PingTest(sIp) == false) { UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "PrtTcp PingTest Fail"); return iRet; } } m_cPrtSocket = new TcpSocket(sIp, iPort, lTimeout); if (m_cPrtSocket == null) { UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "TcpSocket null"); return -9; } // 접속 3회 시도 for (int nLoop = 0; nLoop < 1; nLoop++) { try { iRet = m_cPrtSocket.Connect(-1); } catch (Exception ex) { iRet = UserCom.NG; UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "PrtTcp Exception Error=" + ex.Message); m_cPrtSocket.Close(); continue; } // 접속 실패 if (iRet != UserCom.OK) { iRet = UserCom.NG; UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "PrtTcp(Ethernet) Connect Error"); m_cPrtSocket.Close(); continue; } break; } return iRet; } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); return -99; } } public void ClosePrtTcpDevice() { try { if (m_cPrtSocket != null) { m_cPrtSocket.Close(); m_cPrtSocket = null; } } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_OP, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); } } #endregion #endif //20180611 프린터 미출력 개선 02Printer.exe end #endregion } }