Lettura e visualizzazione di documenti PDF

Lavorare con documenti PDF grezzi può essere un compito lungo e frustrante. Questo tutorial ti insegnerà come utilizzare la libreria VFR per accedere, visualizzare e sfogliare rapidamente i documenti PDF all'interno delle tue applicazioni!

introduzione

Esistono molti scenari in cui potrebbe essere necessario visualizzare un PDF in un'app iOS. In tal modo, ci possono essere molte complicazioni nell'ottenere correttamente il rendering dei PDF. Ci sono anche funzionalità aggiuntive come la stampa, l'invio di e-mail, la visualizzazione di segnalibri, la gestione della rotazione e altro ancora da tenere in considerazione. Sebbene molte di queste funzionalità potrebbero non essere complicate da includere, alcune possono essere molto complicate per funzionare correttamente.

Passaggio 1: installare la libreria VFR

Per questa app, inizieremo creando un nuovo progetto Xcode come "Applicazione a vista singola". Inoltre, utilizzeremo ARC, quindi assicurati che "Usa il conteggio dei riferimenti automatici" sia selezionato.

Quadri richiesti

La nostra libreria PDF "Reader" richiede alcuni framework aggiuntivi da aggiungere al nostro progetto: QuartzCore, ImageIO e MessageUI.

Se hai già familiarità con l'aggiunta di framework a un progetto, puoi saltare questa parte successiva e andare direttamente in "Aggiungere la libreria al nostro progetto".

Altrimenti, per aggiungere quei framework, clicca sul tuo Project dal Navigatore di progetto. Scegli il tuo obiettivo, quindi trova la scheda "Crea Fasi" in alto. Sotto "Build Phases", espandi la sezione "Collega binari con le librerie" e poi fai clic sul pulsante "+" nell'angolo in basso a sinistra.

Ora, aggiungi i framework richiesti (QuartzCore, ImageIO, MessageUI).

La tua sezione "Link binario con opzioni" dovrebbe ora apparire come questa:

Aggiungere la libreria al nostro progetto

La nostra libreria PDF "Reader" può essere scaricata da GitHub qui: https://github.com/vfr/Reader. Ora possiamo trascinare la nostra libreria "Reader" nel nostro progetto e siamo quasi pronti per iniziare. Ho creato un nuovo gruppo nel mio progetto chiamato "PDF Reader" dove sto aggiungendo la libreria (è sufficiente includere le directory "Sources" e "Graphics").

Sfortunatamente, a questo punto, "Reader" non è pronto per ARC. Quindi, dovremo fare un po 'di refactoring. Ci sono tre (3) file che avremo bisogno di aggiornare manualmente prima che possiamo dire a Xcode di refactoring per ARC: "ReaderDocument.m", "ReaderContentPage.m" e "ReaderThumbFetch.m" (per riferimento, puoi trovare istruzioni di base per questi file qui: http://www.vfr.org/2012/05/reader-arc-conversion/.)

Fondamentalmente, quello che faremo è modificare ognuno di questi file per usare semplici cast __bridge, in questo modo:

ReaderDocument.m:

Modificare

... = [NSString stringWithString: (id) theString];

a
…

= [NSString stringWithString: (__ bridge id) theString];

ReaderContentPage.m:

Modificare

... = CGPDFDocumentCreateX ((CFURLRef) fileURL, frase);

a…

... = CGPDFDocumentCreateX ((__ bridge CFURLRef) fileURL, frase);

ReaderThumbFetch.m:

Modificare

... = CGImageSourceCreateWithURL ((CFURLRef) thumbURL,

a…

... = CGImageSourceCreateWithURL ((__ bridge CFURLRef) thumbURL, NULL);

Con le modifiche precedenti, vai a Modifica> Refactor> Converti in Objective-C ARC ...

Ti verrà richiesto "Seleziona i target da convertire". Assicurarsi che sia selezionato il target corrente, quindi premere "Dai un'occhiata".

Il prompt ti guiderà attraverso il processo, dovresti riuscire a colpire "Il prossimo" senza problemi.

Quindi sarai in grado di "Rivedere le modifiche" e potrai selezionare "Salvare".

Infine, dobbiamo includere la nostra intestazione della libreria "Reader" nel nostro ViewController.h principale e impostare il controller della vista principale come a ReaderViewControllerDelegate:

#import "ReaderViewController.h"

@interface MTViewController: UIViewController

Passaggio 2: installazione

La parte complicata del nostro progetto è finita. Da questo punto, è rapido iniziare a visualizzare i PDF nelle nostre app, complete di stampa, segnalibri, miniature, e-mail e altro!

Per prima cosa, aggiungiamo un PDF dimostrativo al nostro progetto. Ancora una volta, ho creato un nuovo gruppo, questo che ho chiamato "PDF".

Ho quindi aggiunto un PDF denominato "typo_tips.pdf" che ho scaricato da fontshop.com nella "directory delle risorse" che è possibile utilizzare (collegamento diretto). Ovviamente, sentiti libero di provare qualsiasi PDF che già possiedi.

Per aprire il nostro PDF, aggiungeremo un singolo UIButton nel nostro ViewController.xib principale.

Quindi collegheremo il nostro UIButton a un metodo che chiameremo didClickOpenPDF.

Il resto del lavoro verrà gestito all'interno di questo metodo "didClickOpenPDF" nel nostro ViewController.m principale.

Per prima cosa, prenderemo il nostro documento PDF dal nostro pacchetto di app.

 NSString * file = [[NSBundle mainBundle] pathForResource: @ "typo_tips" ofType: @ "pdf"];

Successivamente, creeremo un "ReaderDocument" che il nostro "Reader" sarà in grado di visualizzare. Si noti che, se il nostro documento fosse protetto da password, potremmo impostare la password come parametro finale.

 ReaderDocument * document = [ReaderDocument withDocumentFilePath: file password: nil];

Successivamente, ci assicuriamo che il nostro "ReaderDocument" sia stato creato con successo, prima di implementare il nostro "ReaderViewController" che gestirà il resto delle operazioni PDF per noi.

 if (document! = nil) 

E tra le parentesi graffe nel controllo "documento", caricheremo il nostro oggetto "ReaderViewController".

 if (document! = nil) ReaderViewController * readerViewController = [[ReaderViewController alloc] initWithReaderDocument: document]; readerViewController.delegate = self; 

In questo esempio, presenteremo il nostro "ReaderViewController" come una vista modale, sebbene potremmo in alternativa presentarlo con un UINavigationController se la nostra app utilizzava un UINavigationController. Abbiamo diverse opzioni per lo stile di presentazione e transizione che potremmo utilizzare per ModalViewController, quindi ti inviterei a sperimentare con gli stili che funzionano meglio per la tua app. In questo caso, proveremo a imitare lo stile nativo Apple PDF da iBooks.

Aggiungi le seguenti righe dopo "readerViewController.delegate = self;".

 readerViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; readerViewController.modalPresentationStyle = UIModalPresentationFullScreen;

Infine, dobbiamo presentare il nostro ModalViewController:

 [auto presenteModalViewController: readerViewController animato: YES];

Come puoi vedere, una volta inclusa la nostra libreria "Reader", è relativamente semplice visualizzare e interagire con i PDF nelle nostre app iOS. Ecco l'intero metodo che abbiamo usato:

 - (IBAction) didClickOpenPDF: (UIButton *) mittente NSString * file = [[NSBundle mainBundle] pathForResource: @ "typo_tips" ofType: @ "pdf"]; ReaderDocument * document = [ReaderDocument withDocumentFilePath: file password: nil]; if (document! = nil) ReaderViewController * readerViewController = [[ReaderViewController alloc] initWithReaderDocument: document]; readerViewController.delegate = self; readerViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; readerViewController.modalPresentationStyle = UIModalPresentationFullScreen; [auto presenteModalViewController: readerViewController animato: YES]; 

Se esegui e costruisci la nostra applicazione ora, vedrai le numerose funzionalità già funzionanti per il tuo visualizzatore PDF.

C'è solo un'ultima cosa che dobbiamo gestire: ignorare il nostro ViewController di Reader PDF quando l'utente preme il pulsante "Fatto".

Questo è gestito con un metodo semplice e diretto:

 - (void) dismissReaderViewController: (ReaderViewController *) viewController [self dismissModalViewControllerAnimated: YES]; 

Passaggio 3: Opzioni

Come accennato in precedenza, la libreria "Reader" supporta molte di queste funzioni oltre alla semplice visualizzazione di PDF, come la stampa, i segnalibri, ecc. Per impostazione predefinita, la maggior parte di queste funzioni è abilitata. Tuttavia, è possibile scegliere di impostarli ciascuno come meglio si adatta alla propria applicazione modificando il file "ReaderConstants.h". Ognuna di queste funzionalità è elencata nella pagina GitHub di "Reader", che mostrerò qui:

  • READER_BOOKMARKS - Se TRUE, abilita il supporto dei segnalibri di pagina.
  • READER_ENABLE_MAIL: se TRUE, un pulsante di posta elettronica viene aggiunto alla barra degli strumenti
    (se il dispositivo è configurato correttamente per il supporto via email).
  • READER_ENABLE_PRINT: se TRUE, un pulsante di stampa viene aggiunto alla barra degli strumenti
    (se la stampa è supportata e disponibile sul dispositivo).
  • READER_ENABLE_THUMBS: se TRUE, un pulsante pollici viene aggiunto alla barra degli strumenti
    (abilitazione alla navigazione del documento della pagina di anteprima).
  • READER_DISABLE_IDLE - Se TRUE, il timer di inattività iOS è disabilitato mentre
    visualizzazione di un documento (attenzione allo scarico della batteria).
  • READER_SHOW_SHADOWS - Se TRUE, viene mostrata un'ombra attorno a ciascuna pagina
    e il contenuto della pagina è inserito da un paio di punti extra.
  • READER_STANDALONE - Se FALSE, un pulsante "Fatto" viene aggiunto alla barra degli strumenti
    e il -dismissReaderViewController: il metodo delegate viene messaged quando
    è TAPpato.
  • READER_DISABLE_RETINA - Se TRUE, imposta CATiledLayer contentScale
    a 1.0f. Ciò disattiva efficacemente il supporto alla retina e si traduce in
    velocità di rendering del dispositivo non retina su dispositivi di visualizzazione retina a
    la perdita della qualità di visualizzazione della retina.

La prossima volta: scrivere documenti PDF

Ora hai visto quanto è facile visualizzare PDF in iOS. Nel prossimo tutorial di questa serie, vedremo alcuni dei modi per creare i nostri PDF nelle nostre app.