2012-10-30 17 views
6

दिखाई देने के बिना आईओएस प्रिंट मैं क्लाइंट के लिए एक संभावित ऐप का शोध कर रहा हूं, और मेरे पास एक सवाल था कि मैं जवाब नहीं ढूंढ पाया। मैं क्या करना चाहता हूं UIPrintInteractionController प्रदर्शित होने के बिना स्वचालित रूप से प्रिंट करना है। मुझे एक महत्वपूर्ण बिंदु बनाना चाहिए यह एक उत्पादन ऐप नहीं होगा। मुझे पता है कि अन्यथा यह उपयोगकर्ता की सहमति के बिना प्रिंट करने के लिए उपयोगकर्ता की गोपनीयता का उल्लंघन कर सकता है, लेकिन फिर यह ऐप स्टोर पर एक सार्वजनिक ऐप नहीं होगा। ऐसा लगता है कि मुझे लगता है कि एक ऐप Printer Pro है। उपयोगकर्ता को एक टेस्ट पेज मुद्रित करने के लिए कहा जाता है, और पृष्ठ UIPrintInteractionController के बिना प्रिंट करता है - यह ऐप स्टोर पर है, इसलिए मुझे लगता है कि ऐसा करने का एक कानूनी तरीका है। किसी को पता है कि यह कैसे किया जाता है?आईआईपी प्रिंट को UIPrintInteractionController को

+0

कभी इसका उत्तर प्राप्त करें? –

+0

दुर्भाग्यवश, नहीं। यहां एक प्रासंगिक लिंक है http://stackoverflow.com/questions/5135781/ipad-iphone-printing- प्रत्यक्ष रूप से-to-a-network-printer-without-airprint-popover?rq=1 – coder

उत्तर

5

जहां तक ​​मुझे पता है कि UIPrintInteractionController का आह्वान किए बिना आईओएस 7 में प्रिंट करना संभव नहीं है और सिस्टम प्रिंट संवाद प्रदर्शित कर रहा है।

हालांकि, आईओएस 8 अब संवाद दिखाने के बिना सीधे प्रिंट करने के लिए प्रावधान प्रदान करता है। मूल विचार यह है कि आप UIPrinter ऑब्जेक्ट प्राप्त करते हैं और संवाद को दिखाए बिना प्रिंट करने के लिए UIPrintInteractionController की नई - printToPrinter:completionHandler: विधि के संयोजन के साथ इसका उपयोग करते हैं।

अपने प्रिंटर के लिए UIPrinter ऑब्जेक्ट प्राप्त करने से कुछ तरीकों से पूरा किया जा सकता है।

सबसे सरल सीधा UIPrinterPickerController का उपयोग करना है। लेकिन यह एक संवाद दिखाएगा और इसलिए आपकी जरूरतों को पूरा नहीं करता है।

विकल्प UIPrinter विधि + printerWithURL: का उपयोग कर अपने यूआरएल के माध्यम से प्रिंटर बनाना है। मैं पूरी तरह से स्पष्ट नहीं हूं कि इस यूआरएल को कैसे प्राप्त किया जाए लेकिन यह प्रिंटर के एचटीएमएल व्यवस्थापक पृष्ठों में निहित हो सकता है। और मेरा मानना ​​है कि आप इसे बोनजोर एपीआई का उपयोग करके प्रोग्रामेटिक रूप से प्राप्त कर सकते हैं। यहाँ और जानकारी:

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

Bonjour एक सेवा खोज एपीआई जो IPP प्रिंटर की खोज है, जो AirPrint द्वारा इस्तेमाल किया प्रोटोकॉल है भी शामिल है।

प्रिंटर प्रो ऐप आईओएस 7 में एक संवाद के बिना प्रिंट करने में सक्षम है, तो मुझे लगता है कि वे प्रिंटर के साथ बहुत कम स्तर पर (जैसे कच्चे HTTP पोस्ट इत्यादि) पर बातचीत कर रहे हैं।

+0

यह ठीक काम करता है, प्रतीत होता है कप द्वारा साझा प्रिंटर (यानी उबंटू पर)। उदाहरण के लिए, मैं प्रिंट 2 प्रिंटर के माध्यम से उबंटू/सीयूपीएस के साथ साझा किए गए मेरे 2 प्रिंटर में से किसी एक को मुद्रित नहीं कर सकता: मेरे ऐप में, लेकिन मेरा ऐप सीधे मेरे 2 कैनन सीपी 9 10 प्रिंटर पर प्रिंट कर सकता है। साथ ही, मूल फ़ोटो ऐप उबंटू/सीयूपीएस द्वारा साझा किए गए मेरे 2 प्रिंटर पर प्रिंट कर सकता है। इसलिए प्रिंट सबप्रिंटर के साथ सबकुछ काम नहीं करता है: – xaphod

+0

अपडेट: मुझे जो वर्कअराउंड मिला वह प्रिंटर पर यूआरएल और यूआईपीएनटर के लिए एक मजबूत संदर्भ भी स्टोर करना है। यदि यूआरएल से कनेक्ट नहीं किया जा सकता है, तो यूआईपीआरटर को सीधे कोशिश करें।अलार्मिंग यह काम करता है ... आईओएस 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

पोस्ट संपादित करें और कोड (कोड बटन) इंडेंट करें –