2012-10-30 19 views
6

Tôi đang nghiên cứu ứng dụng tiềm năng cho khách hàng và tôi đã có câu hỏi mà tôi không thể tìm thấy câu trả lời. Những gì tôi muốn làm là tự động in, mà không cần hiển thị UIPrintInteractionController. Một điểm quan trọng tôi nên thực hiện là này sẽ không là một ứng dụng sản xuất. Tôi biết rằng nếu không điều này có thể vi phạm quyền riêng tư của người dùng để chỉ in mà không có sự đồng ý của người dùng, nhưng một lần nữa điều này sẽ không phải là một ứng dụng công khai trên App Store. Một ứng dụng tôi thấy có vẻ như có thể là Printer Pro. Người dùng được nhắc in trang thử nghiệm và trang in mà không xuất hiện UIPrintInteractionController - ứng dụng này có trên cửa hàng, vì vậy tôi giả sử có cách hợp pháp để thực hiện. Bất cứ ai biết làm thế nào điều này được thực hiện?In iOS mà không cho phép UIPrintInteractionController xuất hiện

+0

Bạn có câu trả lời cho câu hỏi này không? –

+0

Thật không may, không. Đây là một liên kết có liên quan http://stackoverflow.com/questions/5135781/ipad-iphone-printing-directly-to-a-network-printer-without-airprint-popover?rq=1 – coder

Trả lời

5

Theo như tôi biết không thể in trong iOS7 mà không cần gọi UIPrintInteractionController và hiển thị hộp thoại in của hệ thống.

Tuy nhiên, hiện tại iOS8 cung cấp điều khoản để in trực tiếp vào bản in mà không hiển thị hộp thoại. Ý tưởng cơ bản là bạn có được đối tượng UIPrinter và sử dụng đối tượng này cùng với phương pháp - printToPrinter:completionHandler: mới của UIPrintInteractionController để in mà không hiển thị hộp thoại.

Lấy đối tượng UIPrinter cho máy in của bạn có thể được thực hiện theo một vài cách.

Cách đơn giản nhất là sử dụng UIPrinterPickerController mới. Nhưng điều này sẽ hiển thị một hộp thoại và do đó không đáp ứng nhu cầu của bạn.

Cách khác là tạo máy in qua URL của máy in bằng cách sử dụng phương thức UIPrinter + printerWithURL:. Tôi không hoàn toàn rõ ràng cách lấy URL này nhưng URL này có thể nằm trong các trang quản trị HTML của máy in. Và tôi tin rằng bạn có thể lấy nó theo lập trình bằng cách sử dụng API Bonjour. Xem thêm thông tin ở đây:

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/NetServices/Introduction.html#//apple_ref/doc/uid/10000119i

Bonjour là một khám phá API dịch vụ trong đó bao gồm phát hiện ra máy in IPP, đó là giao thức được sử dụng bởi AirPrint.

Đối với cách ứng dụng Printer Pro có thể in mà không có hộp thoại trong iOS7, tôi đoán chúng tương tác với máy in ở mức rất thấp (ví dụ: bài đăng HTTP thô, v.v.).

+0

Điều này hoạt động tốt, dường như ngoại trừ máy in được chia sẻ bởi các ly (ví dụ: trên ubuntu). Ví dụ tôi không thể in ra một trong hai máy in của tôi được chia sẻ với ubuntu/CUPS qua printToPrinter: trong ứng dụng của tôi, nhưng ứng dụng của tôi có thể in trực tiếp tới 2 máy in CP910 của Canon. Đồng thời, ứng dụng Ảnh gốc có thể in ra 2 máy in của tôi được chia sẻ bởi ubuntu/CUPS. Vì vậy, không phải tất cả mọi thứ hoạt động với printToPrinter: Cập nhật – xaphod

+0

: workaround tôi tìm thấy là để lưu trữ cả hai URL cho máy in và một tham chiếu mạnh mẽ để UIPrinter là tốt. Nếu không thể kết nối URL, hãy thử trực tiếp UIPrinter.Cảnh báo này hoạt động ... trông giống như một lỗi iOS 8 vì không có lý do tại sao URL không thể được sử dụng AFAIK – xaphod

0

Thực hiện theo các bước sau để In các tài liệu mà không nhắc ..

tìm kiếm đầu tiên cho các thiết bị Sử dụng Bộ luật Dưới đây ...

if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_7_1) { 
    UIPrinterPickerController *printPicker = [UIPrinterPickerController printerPickerControllerWithInitiallySelectedPrinter:nil]; 

    [printPicker presentAnimated:YES completionHandler: 
     ^(UIPrinterPickerController *printerPicker, BOOL userDidSelect, NSError *error) { 

      if (userDidSelect) { 
       //User selected the item in the UIPrinterPickerController and got the printer details. 

       [UIPrinterPickerController printerPickerControllerWithInitiallySelectedPrinter:printerPicker.selectedPrinter]; 

       // Here you will get the printer and printer details.ie, 
       // printerPicker.selectedPrinter, printerPicker.selectedPrinter.displayName, printerPicker.selectedPrinter.URL etc. So you can display the printer name in your label text or button title. 

       NSURL *printerURL = printerPicker.selectedPrinter.URL; 

       NSLog(@"printerURL--->%@",printerURL.absoluteString); 

       NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
       [defaults setObject:[printerURL absoluteString] forKey:@"printURL"]; 
       [defaults synchronize]; 
      } 
    }]; 
} 

Và In Văn bản do mà không nhắc bằng cách sử dụng mã dưới đây. ..

if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_7_1) { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    UIPrinter *currentPrinterObj = [UIPrinter printerWithURL:[NSURL URLWithString:[defaults stringForKey:[defaults stringForKey:@"printURL"]]]]; 

    UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController]; 

    if(currentPrinterObj) { 
     [controller printToPrinter:currentPrinterObj completionHandler:^(UIPrintInteractionController *printController, BOOL completed, NSError *error) { 
      if(completed) { 

      } else { 
       NSLog(@"FAILED! due to error in domain %@ with error code %u", error.domain, error.code); 
      } 
     }]; 
    } 
} 
+0

Chỉnh sửa bài đăng và thụt lề mã (nút mã) –

Các vấn đề liên quan