2012-05-18 2 views
-1

사토 바코드 프린터에 일련의 프린터 명령을 보내야합니다. 예를 들어 :프린터 명령을 사용하여 NSString을 NSData로 변환하는 방법

<ESC>A 
<ESC>H0120 
<ESC>V0060 
<ESC>$B,180,180,0 
<ESC>$=Information 
... 

나는 프린터로 열린 TCP/IP 연결을 가지고 단순히 등의있는 NSData 객체를 작성하려는 :

[connection write:data error:error]; 

데이터가있는 NSData 객체가 wheras. \ x1B를 가진 이진 값을 사용하여 이스케이프를 문자열에 삽입 할 수 있다는 것을 알았습니다. 예를 들면 다음과 같습니다.

NSString *printString=[[NSString alloc]initWithString:@"\x1BA\X1BH0120\X1BV0060\X1B$B,180,180,0/X1B$=Information"]; 

문제는 작성하기 위해 문자열을 NSData로 변환하는 방법을 모르겠다는 것입니다.

의견을 보내 주시면 감사하겠습니다.

답변

0

누군가가 비슷한 문제를 나중에 발견하게 될 경우를 대비하여 일부 결과에 대한 업데이트를 제공 할 것입니다. 문제는 사토 바코드 프린터에 일련의 프린터 명령을 보내야한다는 것이 었습니다. Sato는 위와 같은 구문을 필요로하는 독점적 인 언어를 사용하지만 <ESC> A 및 <ESC> Z와 같은 명령을 보내야했습니다. 열린 TCP/IP 연결을 사용하고 여러 가지 방법으로 계속 명령을 보내려고했습니다. 문제는 NSData로 번역 한 것이었지만. 나는 가까이에 있었지만 충분히 가까웠다. 문제는 NSString을 NSString으로 변환 할 때 파일에서 NSString으로 변환하는 것이 아닙니다. 또한 \ x "escapes"를 사용하여 <ESC>의 이진 파일을 보내려고 할 때 문제가있었습니다. 마침내 8 진수 값을 사용하여 정착했습니다. 여기

// load the appropriate file as a string 
    NSString *filePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"sato.txt"]; 
    NSError *firstError=nil; 
    NSString *satoData=[[NSString alloc]initWithContentsOfFile:filePath encoding:NSNonLossyASCIIStringEncoding error:&firstError]; // the NSNonLossyASCIIStringEncoding was the key to correcting my problem here. 
    satoData=[satoData stringByReplacingOccurrencesOfString:@"Description" withString:self.description]; 
    satoData=[satoData stringByReplacingOccurrencesOfString:@"ItemID" withString:self.itemId]; 
    satoData=[satoData stringByReplacingOccurrencesOfString:@"Quantity" withString:self.printQty]; 
    NSDate *now=[NSDate date]; 
    NSString *formattedDate=[NSDateFormatter localizedStringFromDate:now dateStyle:NSDateFormatterMediumStyle timeStyle:NSDateFormatterNoStyle]; 
    satoData=[satoData stringByReplacingOccurrencesOfString:@"Date" withString:formattedDate]; 
    NSData *data=[satoData dataUsingEncoding:NSUTF8StringEncoding]; 

    [connection write:data error:error]; 

가 sato.txt 파일의 내용 중 일부의 샘플입니다

\033A\033#E5\033Z 
\033A\033H0120\033V0060\033$B,180,180,0\033$=ItemID 

의 \ 033은 8 진수가 <ESC>

2

당신은 간단하게 수행 할 수 있습니다

NSData *data = [printString dataUsingEncoding:NSUTF8StringEncoding];

가장 그것은 매우 간단하다는 그렇다, 필요에 맞는 인코딩을 선택합니다.

+0

NSUTF8StringEncoding 바이너리 탈출을 유지하기위한 탈출인가? – bridamax

+0

예, 가능합니다. 인코딩과 관련하여 일반 영어 텍스트와 차이가 없습니다. 특별한 이국적인 언어의 특수 문자가있을 때 조심하십시오. 적절한 인코딩을 사용하지 않으면 잘못 표시 될 수 있습니다. – Stefan

+0

오케이. 나는 이것을 더 일찍 시도했지만 기대했던 결과를 얻지 못했습니다. 이스케이프 시퀀스가 ​​프린터에 전달되지 않고 "번역"에서 손실되었다고 가정했습니다. 프린터 연결에 더 많은 관련이 있어야합니다. 네트워크 프린터에 연결하는 방법에 대해 좀 더 연구해야 할 것입니다. 감사. – bridamax

관련 문제