클라이언트에 대한 잠재적 인 응용 프로그램을 연구 중이며 그 답을 찾을 수 없었습니다. 내가하고 싶은 것은 UIPrintInteractionController
이 표시되지 않고 자동으로 인쇄됩니다. 내가해야 할 중요한 점은 은이 프로덕션 응용 프로그램이 아닐 것입니다. 그렇지 않으면 사용자의 동의없이 인쇄 할 수있는 사용자의 개인 정보를 침해 할 수 있지만 다시 App Store에서는 공개 앱이 아닙니다. 이 앱을 찾을 수있는 것으로 보이는 앱은 Printer Pro
입니다. 사용자에게 테스트 페이지를 인쇄하라는 메시지가 표시되고 UIPrintInteractionController
이 표시되지 않고 페이지가 인쇄됩니다.이 앱은 상점에 있으므로 합법적 인 방법이 있다고 가정합니다. 누구나 이것이 어떻게 이루어 졌는지 알 수 있습니까?iOS는 UIPrintInteractionController를 표시하지 않고 인쇄합니다.
답변
내가 아는 한 UIPrintInteractionController
을 호출하고 시스템 인쇄 대화 상자를 표시하지 않고 iOS7에서 인쇄하는 것은 불가능합니다.
그러나 이제 iOS8은 대화 상자를 표시하지 않고 인쇄물에 직접 인쇄 할 수있는 기능을 제공합니다. 기본 개념은 UIPrinter
개체를 얻고 UIPrintInteractionController
의 새로운 - printToPrinter:completionHandler:
메서드와 함께 사용하여 대화 상자를 표시하지 않고 인쇄하는 것입니다.
프린터의 UIPrinter
개체를 얻는 데는 두 가지 방법이 있습니다.
가장 쉬운 방법은 새로운 UIPrinterPickerController
을 사용하는 것입니다. 그러나 대화 상자가 표시되어 사용자의 요구를 충족시키지 못합니다.
대체 방법은 UIPrinter
방법 + printerWithURL:
을 사용하여 URL을 통해 프린터를 만드는 것입니다. 나는이 URL을 얻는 방법을 완전히 밝히지는 않았지만 프린터의 HTML 관리 페이지에 포함될 수 있습니다. Bonjour API를 사용하여 프로그래밍 방식으로 얻을 수 있다고 생각합니다. 여기에 더 많은 정보 :
봉쥬르은 AirPrint를 사용하는 프로토콜 인 IPP 프린터의 발견을 포함하는 서비스 검색 API입니다.
iOS7에서 프린터 프로 앱이 대화 상자없이 인쇄 할 수있는 방법은 매우 낮은 수준 (예 : 원시 HTTP 게시물 등)으로 프린터와 상호 작용하는 것 같습니다.
컵에 의해 공유되는 프린터 (즉, 우분투에서). 예를 들어 printToPrinter를 통해 우분투/CUPS와 공유 된 2 대의 프린터 중 한 대에 인쇄 할 수는 없습니다 : 내 응용 프로그램에서는 내 응용 프로그램이 내 2 대의 Canon CP910 프린터로 직접 인쇄 할 수 있습니다. 동시에, 네이티브 포토 앱은 우분투/컵 공유 프린터 2 대에 인쇄 할 수 있습니다. 그래서 모든게 printToPrinter와 작동하지 않습니다 : – xaphod
업데이트 : 발견 된 해결 방법은 프린터에 대한 URL과 UIPrinter에 대한 강력한 참조 정보를 모두 저장하는 것입니다. URL을 연결할 수 없으면 UIPrinter를 직접 시도하십시오.놀랍게도이 작품은 ... URL을 사용할 수없는 이유가 없기 때문에 iOS 8 버그처럼 보입니다. AFAIK – xaphod
메시지를 표시하지 않고 문서를 인쇄하려면 다음 단계를 수행합니다 .. 아래의 코드를 사용하여 장치에 대한
먼저 검색 ...
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);
}
}];
}
}
글을 수정하고 코드를 들여 쓰기 (코드 버튼) –
이 질문에 대한 답변을 얻었습니까? –
불행히도, 아니오. 다음은 관련 링크입니다. http://stackoverflow.com/questions/5135781/ipad-iphone-printing-directly-to-a-network-printer-without-airprint-popover?rq=1 – coder