• Programmazione Android
  • CORSI ONLINE
  • Web Agency

Logo

Corsi di programmazione web e mobile online
Navigation
  • Home
  • CORSI ONLINE
  • Tutorial Pratici
  • GUIDE COMPLETE
    • Corso completo di C
    • Corso videogame con Cocos2d
    • Programmazione Cocoa Touch
  • Sezioni
    • Libri e manuali
    • Tips & Tricks
    • Risorse utili
    • Strumenti di Sviluppo
    • Materiale OpenSource
    • Framework
    • Guide Teoriche
    • Guide varie
    • Grafica e Design
    • iPad
    • News
    • Video Tutorial
    • Windows Phone
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

T#101 – Integrare AirPrint per stampare dalle applicazioni iPhone e iPad

By Costantino Pistagna | on 13 Settembre 2011 | 10 Comments
Senza categoria

icona-airprint-iphone-ipad-devapp Cari lettori, quello che vi presento oggi è un breve ed efficace tutorial per l’utilizzo della funzione AirPrint all’interno delle applicazioni iOS. CocoaTouch ci mette a disposizione un controllore per l’interazione con le stampanti supportate da AirPrint, chiamato UIPrintInteractionController. Questo controllore, che invocheremo sempre sulla sua istanza shared sharedPrintController, ci permette di interagire con un’interfaccia utente per la gestione e la stampa dei documenti in formato PDF, immagini ed altri contenuti disponibili su iOS. sharedPrintController, rappresenta un job di stampa. Esso include il contenuto da stampare e le informazioni relative alla stampa stessa (nome job, tip di stampa, pagine da stampare, etc.).

Stampare un PDF dalla nostra applicazione iPhone o iPad

L’utilizzo del controllore è quando di più semplice possa esserci. Proviamo a vedere come istanziare ed istruire il nostro codice per stampare un PDF.

- (void)printdoc:(NSData *)myData {
	UIPrintInteractionController *pic = [UIPrintInteractionController sharedPrintController];
	
	if(pic && [UIPrintInteractionController canPrintData: myData] ) {
		pic.delegate = self;
		UIPrintInfo *printInfo = [UIPrintInfo printInfo];
		printInfo.outputType = UIPrintInfoOutputGeneral;
		printInfo.jobName = @"AllertaSoglie";
		printInfo.duplex = UIPrintInfoDuplexLongEdge;
		pic.printInfo = printInfo;
		pic.showsPageRange = YES;
		pic.printingItem = myData;
		
		void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) = ^(UIPrintInteractionController *pic, BOOL completed, NSError *error) {
			if (!completed && error) {
				UIAlertView *anAlert = [[UIAlertView alloc] initWithTitle:@"Attenzione" 
																  message:@"Si è verificato un errore durante la stampa.\nControlla le impostazioni di AirPrint e riprova." 
																 delegate:nil 
														cancelButtonTitle:@"OK" 
														otherButtonTitles:nil];
				[anAlert show];
				[anAlert release];
			} 
		};
		[pic presentAnimated:YES completionHandler:completionHandler];
	}	
}

Come funziona? La prima cosa da fare è ottenere un riferimento all’istanza shared di UIPrintInteractionController.

   UIPrintInteractionController *pic = [UIPrintInteractionController sharedPrintController];

Se il risultato è un valore non NULL, allora possiamo procedere con le successive operazioni di configurazione:

   pic.delegate = self;
   UIPrintInfo *printInfo = [UIPrintInfo printInfo];
   printInfo.outputType = UIPrintInfoOutputGeneral;
   printInfo.jobName = @"AllertaSoglie";

Assegnamo come delegato della nostra istanza shared la classe stessa, che implementa il metodo sopra (tipicamente un UIViewController) avendo cura di aggiungere nella sua dichiarazione di classe, la conformità al protocollo UIPrintInteractionControllerDelegate.

Successivamente invochiamo sull’istanza shared, il metodo printInfo che ci ritorna un oggetto che incapsula al suo interno informazioni circa il job che stiamo per eseguire.

Una volta ottenuta questa informazione, possiamo customizzare il job con alcune informazioni personali del job in essere, quali il tipo di output (nel nostro caso UIPrintInfoOutputGeneral, specifica che ci troviamo di fronte ad un documento misto immagini, testo, etc.), il nome del job e la modalità di stampa duplex.

   pic.printInfo = printInfo;
   pic.showsPageRange = YES;
   pic.printingItem = myData;

Riassegniamo l’oggetto così modificato all’istanza shared ed aggiungiamo due ulteriori informazioni. showsPageRange ci permette di mostrare il range di pagine da stampare e pic.printingItem assegna l’oggetto NSData (il nostro PDF) da stampare.

A questo punto, siamo quasi pronti per invocare la stampa, o meglio mostrare il controllore modale che lancerà la stampa. Prima, però, abbiamo bisogno di creare un blocco che gestisca le eccezioni di stampa (ad esempio, se qualcosa và male, la stampante non è in linea, etc.).

   void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) = ^(UIPrintInteractionController *pic, BOOL completed, NSError *error) {
      if (!completed && error) {
         UIAlertView *anAlert = [[UIAlertView alloc] initWithTitle:@"Attenzione" 
         message:@"Si è verificato un errore durante la stampa.\nControlla le impostazioni di AirPrint e riprova." 
	            delegate:nil 
	            cancelButtonTitle:@"OK" 
	            otherButtonTitles:nil];
         [anAlert show];
         [anAlert release];
      } 
};

Il blocco sopra, serve proprio a questo. In pratica, quello che facciamo è creare una funzione (o blocco) di nome completionHandler che verrà eseguita SOLO in caso di non completamento o altri errori. Se vogliamo customizzare il messaggio, possiamo utilizzare i parametri passati come argomento alla funzione (pic, completed ed error).

In queto caso, giusto per rendere le cose più semplici, mostreremo un generico messaggio di errore, che ci notifica che qualcosa è andato storto.

Adesso, possiamo mostrare il nostro controllore modale, con l’istruzione:

   [pic presentAnimated:YES completionHandler:completionHandler];

Il controllo della nostra applicazione, passerà alla finestra modale che ci mostra cosa stiamo per stampare, come da figura. Se siamo in prossimità di una stampante che supporta AirPrint, avremo la possibilità di stampare il documento.

Abilitare qualsiasi stampante con AirPrint

Un’ultima cosa. Per testare il sistema è possibile utilizzare un simpatico hack che trovate in rete (http://netputing.com/airprintactivator/airprint-activator-v2-0/). In questo modo potrete rendere compatibile una stampante generica con il protocollo AirPrint, attraverso l’uso di un computer Mac/Windows.

Supportaci

Questa funzione, insieme a tante altre caratteristiche, è stata aggiunta alla nuova versione di AllertaSoglie. Se vi è piaciuto quest’articolo (ed avete bisogno di AllertaSoglie) vi invito a scaricarlo da AppStore. Questo servirà a supportarmi e a far si che possa proporvi sempre nuovi ed interessanti articoli.

Grazie per l’attenzione.


banner-allertasoglie-push-tre-iphone-devapp

Share this story:
  • tweet

Tags: aggiungere AirPrint XCodeAirPrintairprint con tutte le stampantiairprint Xcodeprogrammare iOSsharedPrintControllerstampare da applicazioni ipadstampare da applicazioni iphoneTutorial Praticitutorial Xcode

Recent Posts

  • Parte il percorso programmatori iOS in Swift su devACADEMY.it

    20 Dicembre 2017 - 0 Comment
  • Android, crittografare dati velocemente con Encryption

    24 Settembre 2018 - 0 Comment
  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • Okio, libreria per ottimizzare l’input/output in Java

    27 Agosto 2018 - 0 Comment

Related Posts

  • Code School: Impara a programmare iPhone e iPad facendo pratica direttamente sul browser

    6 Novembre 2013 - 0 Comment
  • Apple Developer Publications: 6 testi per programmatori iOS e OSX disponibili gratuitamente nell’iBooks Store

    23 Marzo 2012 - 2 Comments
  • Xcode 4: Distribuzione Ad Hoc delle applicazioni iPhone e iPad

    10 Gennaio 2012 - 20 Comments

Author Description

10 Responses to “T#101 – Integrare AirPrint per stampare dalle applicazioni iPhone e iPad”

  1. 13 Settembre 2011

    Installoso Appsinco

    Ma così non va, eh? Adesso mi leggete pure nel pensiero?! Era questo il tutorial che speravo faceste, giuro che ci pensavo proprio ieri sera!!! Grandi come sempre ;)!

  2. 23 Ottobre 2011

    tommaso

    Se volessi stampare una webview?

  3. 29 Ottobre 2011

    Danilo

    Ma se quello che voglio stampare non è un PDF? 🙂

  4. 24 Novembre 2011

    Adriano

    aiuto, non ho ben capito come si usa questo tutorial, ho copiato il tutto nel mio file .m, ho dichiarato l’azione nel mio file .h, ho creato un bottone nella pagina che vorrei stampare nel mio file.xib, ho collegato l’azione con il file owner, ho aggiunto nel mio file .h in questo modo:
    @interface viste3ViewController : UIViewController {

    non ho nessun tipo di errore ma neanche funziona nulla, cosa devo fare ulteriormente? please, niente paroloni che non me ne intendo.

  5. 24 Novembre 2011

    Adriano

    nella dichiarazione di sopra mancano le dichiarazione dei delegati che non mi sono state stampate, ci riprovo…

    @interface viste3ViewController : UIViewController {

  6. 24 Novembre 2011

    Adriano

    non ha funzionato, proviamo cosi’
    @interface viste3ViewController : UIViewController {

  7. 24 Novembre 2011

    Adriano

    neanche ora ha funzionato, lo scivero a parole:
    @interface viste3ViewController : UIViewController “SIMBOLO DI MINORE” UITextFieldDelegate, UIPrintInteractionControllerDelegate”SIMBOLO DI MAGGIORE” {

  8. 24 Novembre 2011

    Adriano

    FINALMENTE cell’ho fatta… cosa mi manca per far funzionare tutto?

  9. 16 Gennaio 2012

    FABIO

    raga non è possibile avere il progetto in formato zip?? ho qualche difficoltà nell esecuzione
    Grazie

  10. 17 Gennaio 2012

    FABIO

    tutto risolto grazie lo stesso 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *


*
*

Corso online di programmazione android e java

SEZIONI

  • Android
  • Comunicazioni
  • Contest
  • Corsi ed Eventi
  • Corso completo di C
  • Corso programmazione videogiochi
  • Framework
  • Grafica e Design
  • Guida rapida alla programmazione Cocoa Touch
  • Guide Teoriche
  • Guide varie
  • iPad
  • Le nostre applicazioni
  • Libri e manuali
  • Materiale OpenSource
  • News
  • Pillole di C++
  • Progetti completi
  • Risorse utili
  • Strumenti di Sviluppo
  • Swift
  • Tips & Tricks
  • Tutorial Pratici
  • Video Tutorial
  • Windows Phone

Siti Amici

  • Adrirobot
  • Allmobileworld
  • Apple Notizie
  • Apple Tribù
  • Avvocato360
  • Blog informatico 360°
  • bubi devs
  • fotogriPhone
  • GiovaTech
  • iApp-Mac
  • iOS Developer Program
  • iPodMania
  • MelaRumors
  • Meritocracy
  • SoloTablet
  • TecnoUser
  • Privacy & Cookie Policy
©2009-2018 devAPP - All Rights Reserved | Contattaci
devAPP.it è un progetto di DEVAPP S.R.L. - Web & Mobile Agency di Torino
Str. Volpiano, 54 - 10040 Leini (TO) - C.F. e P.IVA 11263180017 - REA TO1199665 - Cap. Soc. € 10.000,00 i.v.

devACADEMY.it

Vuoi imparare a programmare?

Iscriviti e accedi a TUTTI i corsi con un’unica iscrizione.
Oltre 70 corsi e migliaia di videolezioni online e in italiano a tua disposizione.

ISCRIVITI SUBITO