/ / AirPrint: Ustaw domyślną drukarkę w UIPrintInteractionController - obiektyw-c, ios, drukowanie, odtwarzanie

AirPrint: Ustaw domyślną drukarkę w UIPrintInteractionController - cel-c, ios, printing, airplay

Potrzebuję sposobu, aby wymusić wybraną drukarkę do kontrolera UIPrintInteractionController, gdy jest on prezentowany przy użyciu znanego już PrinterId.

UWAGA: Aby wykonać testy, używam Printopii zainstalowanej na moim „MacBooku Pro”, który współdzieli „Drukarkę”

Wykonałem ten 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
}
}

Po zakończeniu drukowania aplikacja rejestruje następujące ID drukarki:

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

Chcę zastąpić drukarkę, więc powinienem to zrobić w następujący sposób:

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

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

Myślę, że problemem są dziwne znaki obecne w identyfikatorze drukarki.

Każdy wie, jak kodowany jest printInfo.printerId i jak go ręcznie ustawić?

Jeśli przechowuję NSString * printerId w ivar i ustawi go ponownie przy następnej akcji drukowania, to działa, ale nie mogę ręcznie wymusić domyślnej drukarki przez Id drukarki.


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

Odpowiedzi:

7 dla odpowiedzi № 1

Aby ustawić domyślną drukarkęprogramowo, musisz tylko ustawić identyfikator drukarki printInfo na ._ipp._tcp.local. Nazwa drukarki powinna być dokładnie taka sama, jak nazwa 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ą.