Objective c AirPrint:在UIPrintInteractionController中设置默认打印机
我需要一种方法,在显示UIPrintInteractionController时,使用已知的printerId将所选打印机强制添加到UIPrintInteractionController 注意:为了进行测试,我使用的是安装在“MacBook Pro”上的Printopia,它与“打印机”共享 我做了这个测试:Objective c AirPrint:在UIPrintInteractionController中设置默认打印机,objective-c,ios,printing,airplay,Objective C,Ios,Printing,Airplay,我需要一种方法,在显示UIPrintInteractionController时,使用已知的printerId将所选打印机强制添加到UIPrintInteractionController 注意:为了进行测试,我使用的是安装在“MacBook Pro”上的Printopia,它与“打印机”共享 我做了这个测试: -(IBAction)print:(id)sender { UIPrintInteractionController *controller = [UIPrintInteraction
-(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
}
}
打印完成后,应用程序将记录以下打印机ID:
\032Printer\032@\032MacBook\032Pro._ipp._tcp.local.
我想覆盖打印机,所以我应该这样做:
UIPrintInfo *printInfo = [UIPrintInfo printInfo];
printInfo.printerId = @"\032Printer\032@\032MacBook\032Pro._ipp._tcp.local.";
controller.printInfo = printInfo;
但由于某些原因,它无法工作,UIPrintInteractionController没有按预期选择打印机,但打印机会显示在打印机列表中
我想问题在于打印机ID中存在奇怪的字符
有人知道printInfo.printerId是如何编码的,以及如何手动设置它吗
如果我将NSString*printerId存储到ivar中,并在下一个打印操作中再次设置它,它将正常工作,但我无法手动按打印机Id强制默认打印机
顺便说一句:显然,如果打印机不可用/无法访问,我知道无法选择…为了以编程方式设置默认打印机,您只需将printInfo的printerID设置为.\u ipp.\u tcp.local。printerName应与UIPrinterInteractionController popover中打印机列表中的显示方式完全相同。例如,对于显示为LANIERCOLOR315[00:80:A3:95:2D:41]的打印机,打印机ID为
LANIERCOLOR315[00:80:A3:95:2D:41]。\u ipp.\u tcp.local
。您不必对特殊字符进行编码。框架可以做到这一点。谢谢,它适用于标准的AirPrint打印机。问题在于Printopia附加了一个用作打印机图标的特殊字符。幸运的是,可以在Printopia设置中禁用它。