20190626_ 차 개발 BarTender를 프린터 _C # 코드 _ _ 인쇄면 동안 읽기 TID_ 프린터 POSTEK

 

다음과 같이 데모 코드는 다음과 같습니다

btnPrint_Click 개인 (SENDER 개체, EventArgs입니다 E)를 무효 
        { 
            (this.btnPrint.Text == "인쇄를 중지") IF 
            { 
                SetBtnPrintUIEnable () 
                ; 반환 
            } 
       인터페이스에 관련된 버튼을 비활성화 // 
            ) (SetBtnPrintUIDisable; 
            var에 DT = 새로운 새로운 DataTable을 ()   
            새로운 새 작업 ( 
                ()은 => 
                { 
                    인쇄 시작 /// 
                    @ 1 것은 선택된 DGV 소스를 획득한다. 
                    DT = GetDgvDataSourceChecked (); 

                    IF (dt.Rows.Count <= 0)  
                    {
                        SetTxtMessageInfo (this.txtMessageError " 당신이) "인쇄 할 수있는 모든 데이터를 선택하지;
                        Common.Contactor.ShowErrorMessage ($ "아무것도 선택 데이터를 인쇄 할 수 없습니다"); 
                        SetBtnPrintUIEnable (); 
                        창; 
                    } 
                    에 Thread.sleep (500) 
                    SetTxtMessageInfo (this.txtMessageInfo "데이터 검증 ...") 

                    / / 인쇄 시작 
                    문자열 tempPath = ConfigHelper.GetConfigString ( "TEMPLATENAME" ); // 템플릿 이름 
                    에 Thread.sleep (500); 
                         SetTxtMessageInfo (this.txtMessageError은 $ "템플릿 파일 {tempPath}가 존재하지 않을 수 있습니다, 조정하십시오")을, 
                       일반을 .Contactor.ShowErrorMessage ($ "템플릿 파일 {tempPath} 존재하지 않을 수 있습니다, 조정하십시오"); 
                    SetTxtMessageInfo (this.txtMessageInfo, $ "사용 temppath 현재 템플릿 이름} {"); 

                    IF (String.IsNullOrEmpty (temppath.손질()))
                    { 
                        SetBtnPrintUIEnable () 
                        ; 반환 
                    } 
                    (Path.GetExtension (temppath) .Equals는 ( "BTW")) 경우 
                    { 
                        SetTxtMessageInfo (this.txtMessageError, $ "파일 형식이 temppath을 지원하지 않습니다} {"); 
                        Common.Contactor.ShowErrorMessage ( ;) $ "{} temppath를 지원하지 않는 파일 형식" 
                        SetBtnPrintUIEnable을 (); 
                        반환; 
                    } 

                    문자열 파일 이름 = Path.GetFileName (temppath); 
                    문자열 primkey = ConfigHelper.GetConfigString ( "primkey"); 
                    에 Thread.sleep (500); 
                    SetTxtMessageInfo (this.txtMessageInfo "보정 데이터 검사가 완료) "프린트 할 수 있습니다 ...; 
                    은 Using (엔진 엔진 엔진 새로운 새 = (true로)) 
                    { 
                        engine.Start (); 
                        IF (! 형식 = NULL) 
                        { 
                            format.Close (SaveOptions.DoNotSaveChanges); 
                        } 
                        형식 = engine.Documents.Open (temppath); // 열린 BTW 템플릿 파일의 경로에 
                        // 설정 기본 프린터 
                        format.PrintSetup.PrinterName = 새로운 System.Drawing.Printing.PrintDocument () PrinterSettings. .PrinterName; 
                        format.PrintSetup.IdenticalCopiesOfLabel = PrintCount; // Convert.ToInt32 ( GetControlText (this.cboPrintCount)); // 
                        format.PrintSetup.NumberOfSerializedLabels의 = 1]. 
                        VAR DCS = dt.Columns.Cast <를 DataColumn> => dc.Caption 창 {} ()를 선택 ((DC.)) 스킵 (. 1); // 첫 번째는 밖으로 점프, 사실, 점프 첫 번째는, 모든 권리를 이동하지 않습니다 
                        VAR의 templateStrs format.SubStrings.Select = ((S) => { s.Name 창 ;.})를 ToArray (); 

                        문자열 diffStr String.Join = ( ","templateStrs.Except (DCS)) 

                        . IF (diffStr.Trim () 길이> 0) 
                        { 
                            SetTxtMessageInfo (은이. txtMessageError 후, 템플릿 파일 {파일 이름}에서 $ "이 \ 연구 N {diffStr} \ 연구가 \ 콘텐츠 식별 N 필드 \를 인쇄하려고하지, \ 연구 \ n 당신은 템플릿을 조정하거나 데이터 수집 문을 수정해야합니다 "); 계속 
                            Common.Contactor.ShowErrorRestart을 ($"템플릿 파일 {파일 이름}에서 이러한 \ 연구 {diffStr} \ r에 n 개의 콘텐츠를 식별 필드는 n 개의 \, \ 연구 \ n 당신 \ 인쇄하려하지 않고있다가 당신은 조정 또는 문)를 획득 한 후 "계속 템플릿 데이터를 수정해야 
                            SetBtnPrintUIEnable를 (); 
                            형식 = NULL을, 
                            반환; 
                        }
                            { 
                                개체 oPrimKey dt.Rows = [I] [primkey]; // 기본 키 컬럼에 대응하는 값을 얻을 
                                IF (oPrimKey == oPrimKey.ToString DBNull.Value || () 길이 <= 0) 
                                { 
                                    SetTxtMessageInfo (this.txtMessageError, $ "{primKey} 기본 키 데이터 오류, 그것은 NULL 또는 빈 문자열이 될 수 없습니다"); 
                                    Common.Contactor.ShowErrorMessage ($)를 "{primKey} 기본 키 데이터 오류, 그것은 NULL 또는 빈 문자열이 될 수 없습니다"; 
                                    SetBtnPrintUIEnable ( ) 
                                문자열 currentPrimkey oPrimKey.ToString = (); 
                                문자열 operatorRFIDLabel.GetRFID_TID TID = (); // 읽을 태그 TID 
                                    형식 = NULL;
                                    반환;
                                } 

                                경우 (RegValidate.WordOrNumber (TID)!) 
                                { 
                                    SetTxtMessageInfo (this.txtMessageError은 $ "라벨 콘텐츠 TID 잘못된 {TID를 얻을 수}, 인쇄가 중지됩니다"); 
                                    Common.Contactor.ShowErrorMessage ($ "라벨 콘텐츠 획득 오류 {TID} 인쇄) "을 멈출 것이다 
                                    SetBtnPrintUIEnable을 () 
                                    의 형식을 = NULL; 
                                    반환; 
                                } 

                                에 대해 INT (J = 0; J <templateStrs.Length, J ++) 
                                {
                                    . format.SubStrings [templateStrs [J] 값 = dt.Rows [I] [templateStrs [J] ToString (); // 파라미터 할당 SN에 대응하는 인쇄 템플릿 
                                } 
                                메시지 메시지; 
                                INT = 10000 waitForCompletionTimeout / / 10 초 
                                System.Diagnostics.Trace.WriteLine (TID + "는 TID →→→→→→→→→이다") 
                                결과 = R & LT format.Print ( ""waitForCompletionTimeout, OUT 메시지); 
                                // 문자열 = messageString " \ N- \ nMessages "; 
                                // Thread.sleep를가 (500) 
                                SetTxtMessageInfo (this.txtMessageInfo은 $"는 부분 I + {1}의 출력이며그것의 기본 키 코드는 {oPrimKey} ")입니다;
                                (2000)에 Thread.sleep, 부즈에 따라 // 프린터를 측정 하였다, 그렇지 않으면 TID가 반복됩니다, 2 초를 중지 할 필요가 
                                프린터가 TID 시간 제한 읽기에 영향을 쓸 수있는 라이브러리를 차단할 수, 데이터베이스 쓰기 //// 
                                queuePrint.Enqueue (및 String.format를 (ConfigHelper.GetConfigString ( "updateTid"), TID, currentPrimkey.Trim ())); 

                                문자열 = ConfigHelper.GetConfigString COM ( "insertMysql") 
                                문자열 HN_NO dt.Rows = [I] [ "패턴"] == DBNull이 ? .Value String.Empty로 : dt.Rows [I] [ " 패턴"]로 .toString (); 
                                문자열 GH_NO dt.Rows = [I] [ "번들 호"] == DBNull.Value String.Empty로 : DT? .Rows [I] [ "번들 번호"]로 .toString (); 
                                문자열 QTY_XD dt.Rows = [I] [ "길이"] == DBNull.Value 문자열?빈 : dt.Rows [I] [ "长度"]로 .toString ();
                                문자열 QTY_GJ dt.Rows = [I] [ "重量"] == DBNull.Value? String.Empty로 : dt.Rows [I] [ "重量"]로 .toString (); 
                                문자열 JT_NO dt.Rows = [I] [ "机台"] == DBNull.Value? String.Empty로 : dt.Rows [I] [ "机台"]로 .toString (); 
                                문자열 YB_NO dt.Rows = [I] [ "验布工"] == DBNull.Value? String.Empty로 : dt.Rows [I] [ "验布工"]로 .toString (); 
                                문자열 FJ_NO dt.Rows = [I] [ "货架号"] == DBNull.Value? String.Empty로 : dt.Rows [I] [ "货架号"]로 .toString (); 
                                문자열 LF_ID dt.Rows = [I] [ "连幅标记"] == DBNull.Value? String.Empty로 : dt.Rows [I] [ "连幅标记"]로 .toString (); 
                                날짜 시간 USR_DD는 DT를 =.
                                문자열 GH_STA dt.Rows = [I] " 번들 수 상태"] == DBNull.Value String.Empty로 : dt.Rows [ I] [ " 번들 수 상태"]로 .toString ();? 

                                문자열 및 String.format = STRSQL (ConfigHelper.GetConfigString ( "insertMysql"), TID, HN_NO, GH_NO, QTY_XD, QTY_GJ, JT_NO, YB_NO, FJ_NO, LF_ID, USR_DD, GH_STA) 
                                queuePrint.Enqueue STRSQL () 
                            } 
                        } 
                        format.Close (SaveOptions.DoNotSaveChanges) ; 
                        형식 = NULL; 
                        engine.Stop () 

                        버튼을 시작 // 
                        (SetBtnPrintUIEnable);
                    } 
                }
                ) .Start (); 

          / * 1) 인쇄 방법이, 인쇄의 완료를 기다릴 초과, 인쇄 처리 정보의 출력을 기다려야할지, 작업 이름을 출력하도록 설정 될 수있는 가장 일반적으로 사용되는 인쇄 방법이다. 
            2) 인쇄 출력 방법 : 당신이 대화 상자는 인쇄시 나타나는 상태 설정을 인쇄해야하는 경우이 방법을 구현하도록 선택할 수 있습니다. 
            3) 저장 방법 : 형식에 대한 변경 사항을 저장합니다. 
            4) 방법 SetNamedSubStringValue : 본원 동적 인쇄의 내용을 변경하는 방법으로서 사용될 수있는 문자열의 특정 값을 설정. 
            5) SetPromt 방법 : SetNamedSubStringValue 유사한 방법으로, 그러나 그는 인쇄 프롬프트의 값을 설정, 특정 레이블 팝업 수있는 대화 상자를 인쇄하는 동안 인쇄 내용을 변경하는 특정 변수의 입력 값을 설정하여,이 방법은 동적 설정은 이러한 변수. 그러나 그것은 거의 통합에 사용되지 않습니다. 
            6) IdenticalCopiesOfLabel 속성 :이 레이블의 기본 설정을 인쇄 할 때 인쇄 할 사본의 동일한 태그 번호를 설정하는 것입니다. 
            7) NumberSerializedLabels 속성 : 만약 일련의 라벨을 시작할 때 인쇄에 사용되는 시간의 시퀀스이고,이 속성은 예를 들어, (1)의 초기 데이터 계열 1의 증분 NumberSerializedLabels하고, 매수가 인쇄 나타낸다 5로 설정, 그것은 1,2,3,4,5, 다섯 개의 탭을 인쇄합니다. 
            8) 프린터 등록 정보 : 프린터가 시스템 기본 프린터에 지정된 기본값을 사용하려면
            9) 속성 PrintToFile이 즉시 인쇄하는 프린터로 표시하거나 그것을 인쇄 파일을 생성한다이었다. 
            * / 
        }

  

 

추천

출처www.cnblogs.com/wxylog/p/11093361.html