2012-10-30 8 views
6

görünmesine izin vermeden yazdırılıyor İstemci için potansiyel bir uygulama araştırıyorum ve yanıtı bulamadığım bir soruyla karşılaştım. Yapmak istediğim şey, UIPrintInteractionController görüntülenmeden otomatik olarak yazdırmaktır. Yapmam gereken önemli bir nokta, bu 'un üretim uygulaması olmayacağıdır. Aksi halde bunun kullanıcının izni olmadan yazdırmak için kullanıcının gizliliğini ihlal edebileceğini biliyorum, ancak yine bu App Store'da herkese açık bir uygulama olmayacak. Bunu bulduğum bir uygulama, Printer Pro. Kullanıcıdan bir test sayfası yazdırması isteniyor ve sayfa UIPrintInteractionController görünmeden yazdırılıyor - bu uygulama mağazada bulunuyor, bu yüzden bunu yapmanın yasal bir yolu olduğunu farz ediyorum. Bunun nasıl yapıldığını bilen var mı?iOS, UIPrintInteractionController'ın

+0

Hiç bunun bir cevabı olsun? –

+0

Maalesef, hayır. İşte ilgili bir bağlantı http://stackoverflow.com/questions/5135781/ipad-iphone-printing-directly-to-a-network-printer-without-airprint-popover?rq=1 – coder

cevap

5

Bildiğim kadarıyla, UIPrintInteractionController numaralı telefonu çağırmadan ve sistem yazdırma iletişim kutusunu görüntülemeden iOS7'de yazdırmak mümkün değildir. Ancak, iOS8 şimdi, iletişim kutusunu göstermeden doğrudan bir baskıya yazdırmak için bir provizyon sağlar. Temel fikir, bir UIPrinter nesnesi edinmeniz ve bunu, iletişim kutusunu göstermeden yazdırmak için UIPrintInteractionController'un yeni - printToPrinter:completionHandler: yöntemiyle birlikte kullanmanızdır.

Yazıcınız için UIPrinter nesnesinin elde edilmesi, birkaç şekilde gerçekleştirilebilir.

En basit olanı, yeni UIPrinterPickerController'u kullanmaktır. Ama bu bir diyalog gösterir ve ihtiyaçlarınızı karşılamaz. Alternatif, UIPrinter yöntemi yöntemini kullanarak URL'sini kullanarak bir yazıcı oluşturmaktır. Bu URL’yi nasıl alacağımı tamamen açıklamıyorum ancak yazıcının HTML yönetim sayfalarında yer alabilir. Ve Bonjour API'yi kullanarak program aracılığıyla elde edebileceğinize inanıyorum. Burada daha fazla bilgi:

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

Bonjour AirPrint tarafından kullanılan protokoldür IPP, keşif içeren bir hizmet keşif API'sıdır.

Yazıcı Pro uygulamasının iOS7'de bir iletişim kutusu olmadan nasıl yazdırılabileceğine gelince, yazıcıyla çok düşük bir düzeyde (örneğin, raw HTTP gönderileri, vb.) Etkileşim kurduğunu tahmin ediyorum.

+0

Bu iyi çalışıyor, görünüşte bardaklar tarafından paylaşılan yazıcılar (örneğin, ubuntu'da). Örneğin, printToPrinter aracılığıyla ubuntu/CUPS ile paylaştığım 2 yazıcımdan birine yazdıramıyor: Uygulamamda, ancak uygulamam doğrudan 2 Canon CP910 yazıcıma yazdırabilir. Aynı zamanda, yerel Fotoğraflar uygulaması, ubuntu/CUPS tarafından paylaşılan 2 yazıcımın üzerine yazdırabilir. Yani her şey printToPrinter ile çalışmaz: – xaphod

+0

Güncelleme: bulduğum geçici çözüm hem URL'yi hem de yazıcıya ve UIPrinter'a güçlü bir referans olarak kaydetmektir. URL'ye bağlanamıyorsa, doğrudan UIPrinter'ı deneyin.Alarm çalmaya devam ediyor ... bir URL 8 hata gibi görünüyor çünkü URL kullanılamadığından hiçbir neden yok AFAIK – xaphod

0

sormadan Belgeler Baskı için aşağıdaki adımları izleyin .. Aşağıda Kodu Kullanma Cihazlar için

İlk Arama ...

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

Ve aşağıdaki kodu kullanarak sormadan tarafından Dokümanları Yazdır

. ..

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

Gönderiyi düzenleyin ve kodu girin (kod düğmesi) –