【发布时间】:2012-10-19 01:59:28
【问题描述】:
我需要一种方法,使用已知的打印机 ID 将选定的打印机强制显示到 UIPrintInteractionController。
注意:为了进行测试,我正在使用安装在共享“打印机”的“MacBook Pro”上的 Printopia
我做了这个测试:
-(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 强制使用默认打印机。
btw:显然,如果打印机不可用/无法访问,我知道无法选择...
【问题讨论】:
标签: objective-c ios printing airplay