У меня есть принтер этикеток, Brady i3300 , к которому я подключаюсь со своего iPad через tcp-сокет (с использованием CocoaAsyncSocket
фреймворка). Каждый раз, когда я отправляю данные на принтер, он печатает, но этикетка всегда пуста.
Процесс
Сначала я запускаю connectToPrinter
, и делегат didConnectToHost
срабатывает. После успешного подключения я звоню printLabelToPrinter
, куда на принтер отправляются данные. Делегат didWriteDataWithTag
вызывается сразу после этого, принтер начинает / заканчивает печать, , но этикетка пуста.
Пока не имеет значения, какое содержимое находится в файле данных ( поясняется ниже), поэтому это похоже на проблему с подключением ... В любом случае принтер, похоже, получает запрос без каких-либо данных вместе с ним.
Почему принтер печатает пустые этикетки?
Код и файлы
Вот мои настройки подключения:
- (void)connectToPrinter {
// Create the socket
self.socket = [GCDAsyncSocket.alloc initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
// Connect to the printer via IP and port
NSError *err = nil;
if (![self.socket connectToHost:@"10.0.0.147" onPort:9100 error:&err]) {
// Something went wrong!
NSLog(@"I goofed: %@", err);
}
}
- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port {
NSLog(@"connected to host!: %@", host);
[self printLabelToPrinter];
}
Примечание : ссылка на файл .zpl ниже содержит скрипт печати ZPL, один из поддерживаемых языков принтеров Brady
- (void)printLabelToPrinter {
// Get the ZPL file and convert it over to data
NSString *filePath = [NSBundle.mainBundle pathForResource:@"label" ofType:@".zpl"];
NSData *data = [NSFileManager.defaultManager contentsAtPath:filePath];
// Write the data to the printer
[self.socket writeData:data withTimeout:10 tag:1];
}
- (void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag {
NSLog(@"did write data: %ld", tag);
}
Вот файл .zpl
^XA
^CF0,60
^FO50,50^GB100,100,100^FS
^FO75,75^FR^GB100,100,100^FS
^FO50,300
^FO504,300^FDTest
^XZ