すでに知られているprinterIdを使用して、選択したプリンタをUIPrintInteractionControllerに強制的に表示する方法が必要です。AirPrint:UIPrintInteractionControllerでデフォルトプリンタを設定する
注:印刷が完了すると
-(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
}
}
:私はこのテストを行った「プリンタ」
を共有し、私の「MacBook Proに」にPrintopiaがインストールされて使用しているテストをするために、プリンタのID、次のログアプリ:
\032Printer\[email protected]\032MacBook\032Pro._ipp._tcp.local.
が、私はプリンタを上書きしたいので、私はこのような方法で行うことになって:
UIPrintInfo *printInfo = [UIPrintInfo printInfo];
printInfo.printerId = @"\032Printer\[email protected]\032MacBook\032Pro._ipp._tcp.local.";
controller.printInfo = printInfo;
しかし、何らかの理由でUIPrintInteractionControllerがプリンタを期待どおりに選択せず、プリンタがプリンタリストに表示されています。
問題はプリンタIDに奇妙な文字があると思います。
誰かがprintInfo.printerIdのエンコード方法と手動設定方法を知っていますか?
NSString * printerIdをivarに保存して、次の印刷動作で再度設定すると、動作しますが、手動でプリンタIDでデフォルトのプリンタを強制することはできません。
ところで:プリンタが到達可能/利用できない場合はもちろん、私はそれを選択することはできません知っている...
ありがとう、標準のAirPrintプリンタで動作します。問題は、プリンタアイコンとして使用される特別な文字を追加するPrintopiaです。幸いにも、Printopiaの設定でそれを無効にすることは可能です。 – Lubbo
それを知ってよかった! :) –