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:
32Printer 32@ 32MacBook 32Pro._ipp._tcp.local.
Chcę zastąpić drukarkę, więc powinienem to zrobić w następujący sposób:
UIPrintInfo *printInfo = [UIPrintInfo printInfo];
printInfo.printerId = @" 32Printer 32@ 32MacBook 32Pro._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 № 1Aby 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ą.