2012-10-15 19 views
5

Tôi cần một cách để buộc Máy in đã chọn vào UIPrintInteractionController khi nó được trình bày, sử dụng một máy in đã biết.AirPrint: Đặt máy in mặc định trong UIPrintInteractionController

LƯU Ý: Để làm các xét nghiệm Tôi đang sử dụng cài đặt trên Printopia của tôi "MacBook Pro" dùng chung "in"

tôi đã thực hiện kiểm tra này:

-(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 
} 
} 

Khi in được thực hiện , ứng dụng các bản ghi sau máy in ID:

\032Printer\[email protected]\032MacBook\032Pro._ipp._tcp.local. 

tôi muốn ghi đè lên máy in vì vậy tôi phải làm theo cách này:

UIPrintInfo *printInfo = [UIPrintInfo printInfo]; 
printInfo.printerId = @"\032Printer\[email protected]\032MacBook\032Pro._ipp._tcp.local."; 
controller.printInfo = printInfo; 

Nhưng vì một số lý do nó không hoạt động, UIPrintInteractionController không chọn máy in như mong đợi, nhưng máy in được hiển thị trong danh sách máy in.

Tôi đoán vấn đề là các ký tự lạ hiện diện trong ID máy in.

Bất kỳ ai cũng biết cách printInfo.printerId được mã hóa và cách đặt thủ công?

Nếu tôi lưu trữ máy in NSString * vào thanh công cụ và đặt lại lần nữa trên hành động in tiếp theo, nó không hoạt động, nhưng tôi không thể ép buộc máy in mặc định bằng Id máy in bằng tay.


btw: Rõ ràng, nếu máy in không có sẵn/thể truy cập, tôi biết rằng không thể chọn ...

Trả lời

7

Để cho bạn thiết lập máy in mặc định chương trình, bạn chỉ cần thiết lập printerID của printInfo tới ._ipp._tcp.local. Tên máy in phải chính xác giống như cách nó được hiển thị trong danh sách máy in trong cửa sổ bật lên UIPrinterInteractionController. Ví dụ: đối với máy in đang được hiển thị là LANIERCOLOR315 [00: 80: A3: 95: 2D: 41], printerID là LANIERCOLOR315 [00:80:A3:95:2D:41]._ipp._tcp.local. Bạn không phải mã hóa các ký tự đặc biệt. Khuôn khổ sẽ làm điều đó.

+0

Cảm ơn, nó hoạt động cho các máy in AirPrint tiêu chuẩn. Vấn đề là đối với Printopia gắn thêm một char đặc biệt dùng làm biểu tượng máy in. May mắn thay là có thể vô hiệu hóa nó trong cài đặt Printopia. – Lubbo

+0

Điều cần biết! :) –