2012-10-15 53 views
5

すでに知られている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でデフォルトのプリンタを強制することはできません。

ところで

:プリンタが到達可能/利用できない場合はもちろん、私はそれを選択することはできません知っている...

答えて

7

あなたがプログラムでデフォルトのプリンタを設定するためには、あなただけ設定する必要がありますprintInfoのprinterIDを._ipp._tcp.localに設定します。 printerNameは、UIPrinterInteractionControllerポップオーバーのプリンタのリストに表示される方法とまったく同じにする必要があります。たとえば、LANIERCOLOR315 [00:80:A3:95:2D:41]と表示されているプリンタの場合、printerIDはLANIERCOLOR315 [00:80:A3:95:2D:41]._ipp._tcp.localです。特殊文字をエンコードする必要はありません。フレームワークはそれを行います。

+0

ありがとう、標準のAirPrintプリンタで動作します。問題は、プリンタアイコンとして使用される特別な文字を追加するPrintopiaです。幸いにも、Printopiaの設定でそれを無効にすることは可能です。 – Lubbo

+0

それを知ってよかった! :) –

関連する問題