2012-10-15 14 views
5

Potrzebuję sposobu, aby wymusić wybraną drukarkę na UIPrintInteractionController, gdy jest prezentowany, przy użyciu już znanego PrinterID.AirPrint: Ustaw domyślną drukarkę w UIPrintInteractionController

UWAGA: W celu przeprowadzenia testów używam Printopia zainstalowany na moim „MacBook Pro”, która dzieli „Drukarka”

Zrobiłem test:

-(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 
} 
} 

Gdy druk odbywa dzienniki aplikacji Poniższe ID drukarki:

\032Printer\[email protected]\032MacBook\032Pro._ipp._tcp.local. 

Chcę zastąpić drukarkę tak mam zrobić w ten sposób:

UIPrintInfo *printInfo = [UIPrintInfo printInfo]; 
printInfo.printerId = @"\032Printer\[email protected]\032MacBook\032Pro._ipp._tcp.local."; 
controller.printInfo = printInfo; 

Jednak z jakiegoś powodu nie działa, UIPrintInteractionController nie wybiera drukarki zgodnie z oczekiwaniami, ale drukarka jest wyświetlana na liście drukarek.

Domyślam się, że problemem są dziwne znaki obecne w ID drukarki.

Ktoś wie, w jaki sposób kodowany jest tekst printInfo.printerId i jak ręcznie go ustawić?

Jeśli przechowuję drukarkę NSString * w urządzeniu ivar i ustawię ją ponownie przy następnej akcji drukowania, to działa, ale nie mogę wymusić ręcznej drukarki domyślnej według identyfikatora drukarki.


btw: Oczywiście, jeśli drukarka nie jest dostępna/osiągalny, wiem, że nie można wybrać ...

Odpowiedz

7

Aby ustawić domyślną drukarkę programowo, trzeba tylko ustawić printerID z printInfo na ._ipp._tcp.local. Nazwa drukarki powinna być dokładnie taka sama, jak jest wyświetlana na liście drukarek w popover UIPrinterInteractionController. Na przykład dla drukarki, która jest wyświetlana jako LANIERCOLOR315 [00: 80: A3: 95: 2D: 41], identyfikator drukarki to LANIERCOLOR315 [00:80:A3:95:2D:41]._ipp._tcp.local. Nie musisz kodować znaków specjalnych. Ramy to zrobią.

+0

Dzięki, działa dla standardowych drukarek AirPrint. Problem dotyczy drukarki Printopia, która dołącza specjalny znak używany jako ikona drukarki. Na szczęście można go wyłączyć w ustawieniach Printopia. – Lubbo

+0

Dobrze o tym wiedzieć! :) –

Powiązane problemy