2012-10-30 4 views
6

클라이언트에 대한 잠재적 인 응용 프로그램을 연구 중이며 그 답을 찾을 수 없었습니다. 내가하고 싶은 것은 UIPrintInteractionController이 표시되지 않고 자동으로 인쇄됩니다. 내가해야 할 중요한 점은 이 프로덕션 응용 프로그램이 아닐 것입니다. 그렇지 않으면 사용자의 동의없이 인쇄 할 수있는 사용자의 개인 정보를 침해 할 수 있지만 다시 App Store에서는 공개 앱이 아닙니다. 이 앱을 찾을 수있는 것으로 보이는 앱은 Printer Pro입니다. 사용자에게 테스트 페이지를 인쇄하라는 메시지가 표시되고 UIPrintInteractionController이 표시되지 않고 페이지가 인쇄됩니다.이 앱은 상점에 있으므로 합법적 인 방법이 있다고 가정합니다. 누구나 이것이 어떻게 이루어 졌는지 알 수 있습니까?iOS는 UIPrintInteractionController를 표시하지 않고 인쇄합니다.

+0

이 질문에 대한 답변을 얻었습니까? –

+0

불행히도, 아니오. 다음은 관련 링크입니다. http://stackoverflow.com/questions/5135781/ipad-iphone-printing-directly-to-a-network-printer-without-airprint-popover?rq=1 – coder

답변

5

내가 아는 한 UIPrintInteractionController을 호출하고 시스템 인쇄 대화 상자를 표시하지 않고 iOS7에서 인쇄하는 것은 불가능합니다.

그러나 이제 iOS8은 대화 상자를 표시하지 않고 인쇄물에 직접 인쇄 할 수있는 기능을 제공합니다. 기본 개념은 UIPrinter 개체를 얻고 UIPrintInteractionController의 새로운 - printToPrinter:completionHandler: 메서드와 함께 사용하여 대화 상자를 표시하지 않고 인쇄하는 것입니다.

프린터의 UIPrinter 개체를 얻는 데는 두 가지 방법이 있습니다.

가장 쉬운 방법은 새로운 UIPrinterPickerController을 사용하는 것입니다. 그러나 대화 상자가 표시되어 사용자의 요구를 충족시키지 못합니다.

대체 방법은 UIPrinter 방법 + printerWithURL:을 사용하여 URL을 통해 프린터를 만드는 것입니다. 나는이 URL을 얻는 방법을 완전히 밝히지는 않았지만 프린터의 HTML 관리 페이지에 포함될 수 있습니다. Bonjour API를 사용하여 프로그래밍 방식으로 얻을 수 있다고 생각합니다. 여기에 더 많은 정보 :

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

봉쥬르은 AirPrint를 사용하는 프로토콜 인 IPP 프린터의 발견을 포함하는 서비스 검색 API입니다.

iOS7에서 프린터 프로 앱이 대화 상자없이 인쇄 할 수있는 방법은 매우 낮은 수준 (예 : 원시 HTTP 게시물 등)으로 프린터와 상호 작용하는 것 같습니다.

+0

컵에 의해 공유되는 프린터 (즉, 우분투에서). 예를 들어 printToPrinter를 통해 우분투/CUPS와 공유 된 2 대의 프린터 중 한 대에 인쇄 할 수는 없습니다 : 내 응용 프로그램에서는 내 응용 프로그램이 내 2 대의 Canon CP910 프린터로 직접 인쇄 할 수 있습니다. 동시에, 네이티브 포토 앱은 우분투/컵 공유 프린터 2 대에 인쇄 할 수 있습니다. 그래서 모든게 printToPrinter와 작동하지 않습니다 : – xaphod

+0

업데이트 : 발견 된 해결 방법은 프린터에 대한 URL과 UIPrinter에 대한 강력한 참조 정보를 모두 저장하는 것입니다. URL을 연결할 수 없으면 UIPrinter를 직접 시도하십시오.놀랍게도이 작품은 ... URL을 사용할 수없는 이유가 없기 때문에 iOS 8 버그처럼 보입니다. AFAIK – xaphod

0

메시지를 표시하지 않고 문서를 인쇄하려면 다음 단계를 수행합니다 .. 아래의 코드를 사용하여 장치에 대한

먼저 검색 ...

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]; 
      } 
    }]; 
} 

그리고 아래의 코드를 사용하여 메시지를 표시하지 않고로 문서를 인쇄

. ..

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

글을 수정하고 코드를 들여 쓰기 (코드 버튼) –