/ / AirPrint: встановити принтер за замовчуванням в UIPrintInteractionController - об'єкт-c, ios, друк, ефір

AirPrint: встановити принтер за замовчуванням в UIPrintInteractionController - об'єкт-c, ios, друк, ефірна

Мені потрібен спосіб змусити вибраний принтер до UIPrintInteractionController, коли він буде представлений, використовуючи вже відомий принтер.

ПРИМІТКА: Щоб зробити тести, я використовую Printopia, встановлений на моєму "MacBook Pro", який використовує "Принтер"

Я зробив цей тест:

-(IBAction)print:(id)sender
{
UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];

UIPrintInteractionCompletionHandler completionHandler = ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
NSLog(@"Selected Printer ID: %@",printController.printInfo.printerID);
};

NSString* path = [[NSBundle mainBundle] pathForResource:@"TestImage" ofType:@"png"];
NSURL* imageURL = [NSURL fileURLWithPath:path isDirectory:NO];

UIPrintInfo *printInfo = [UIPrintInfo printInfo];
printInfo.outputType = UIPrintInfoOutputPhoto;
printInfo.jobName = @"Image print";
controller.printInfo = printInfo;

controller.printingItem = imageURL;

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
[controller presentFromBarButtonItem:self.printButton animated:YES completionHandler:completionHandler];  // iPad
}
else
{
[controller presentAnimated:YES completionHandler:completionHandler];  // iPhone
}
}

Коли друк буде виконано, додаток реєструє наступний ідентифікатор принтера:

32Printer32@32MacBook32Pro._ipp._tcp.local.

Я хочу перевизначити принтер, тому я повинен робити так:

UIPrintInfo *printInfo = [UIPrintInfo printInfo];
printInfo.printerId = @"32Printer32@32MacBook32Pro._ipp._tcp.local.";
controller.printInfo = printInfo;

Але з якоїсь причини він не працює, UIPrintInteractionController не вибирає принтер, як очікувалося, але принтер відображається у списку принтерів.

Напевно, проблема полягає в дивовижних символах, які є в ID принтера.

Хто-небудь знає, як кодується printInfo.printerId і як його вручну встановити?

Якщо я збережу NSString * printerId в ivar і встановлює його знову на наступну дію друку, але я не можу застосувати принтер за замовчуванням за допомогою Id принтера вручну.


btw: Очевидно, якщо принтер недоступний / доступний, я знаю, що його не можна вибрати ...

Відповіді:

7 для відповіді № 1

Щоб встановити типовий принтерпрограмно, вам потрібно лише встановити printID принтера на ._ipp._tcp.local. Назва_принтера має бути точно таким же, як і його відображення у списку принтерів, які відображаються у вікні UIPrinterInteractionController. Наприклад, для принтера, який відображається як LANIERCOLOR315 [00: 80: A3: 95: 2D: 41], принтер LANIERCOLOR315 [00:80:A3:95:2D:41]._ipp._tcp.local. Вам не потрібно кодувати спеціальні символи. Структура зробить це.