Lecture et affichage de documents PDF

Travailler avec des documents PDF bruts peut être une tâche longue et frustrante. Ce didacticiel vous expliquera comment utiliser la bibliothèque VFR pour accéder rapidement à, afficher et parcourir des documents PDF dans vos propres applications.!

introduction

Il existe de nombreux scénarios dans lesquels il peut s'avérer nécessaire d'afficher un fichier PDF dans une application iOS. Ce faisant, il peut y avoir beaucoup de complications pour que les PDF soient correctement rendus. Il existe également des fonctionnalités supplémentaires telles que l'impression, l'envoi par courrier électronique, l'affichage des signets, la gestion de la rotation, etc., qui doivent être prises en compte. Bien que bon nombre de ces fonctionnalités ne soient pas compliquées à inclure, certaines peuvent être très délicates pour fonctionner correctement.

Étape 1: Installez la bibliothèque VFR

Pour cette application, nous allons commencer par créer un nouveau projet Xcode en tant qu '"application à vue unique". De plus, nous allons utiliser ARC, alors assurez-vous que "Utiliser le comptage de référence automatique" est coché.

Cadres requis

Notre bibliothèque PDF "Reader" nécessite l'ajout de quelques cadres supplémentaires à notre projet: QuartzCore, ImageIO et MessageUI..

Si vous êtes déjà familiarisé avec l'ajout de frameworks à un projet, vous pouvez ignorer cette partie et entrer directement dans "Ajouter la bibliothèque à notre projet"..

Sinon, pour ajouter ces cadres, cliquez sur votre projet dans le navigateur de projet. Choisissez votre cible, puis recherchez l'onglet "Construire les phases" en haut. Sous "Build Phases", développez la section "Link Binary With Libraries", puis cliquez sur le bouton "+" dans le coin inférieur gauche..

Ajoutez maintenant les frameworks requis (QuartzCore, ImageIO, MessageUI).

Votre section "Link Binary With Options" devrait maintenant ressembler à ceci:

Ajout de la bibliothèque à notre projet

Notre bibliothèque PDF "Reader" peut être téléchargée à partir de GitHub ici: https://github.com/vfr/Reader. Nous pouvons maintenant faire glisser notre bibliothèque "Reader" dans notre projet et nous sommes presque prêts à commencer. J'ai créé un nouveau groupe dans mon projet appelé "PDF Reader" où j'ajoute la bibliothèque (il suffit d'inclure les répertoires "Sources" et "Graphiques").

Malheureusement, à ce stade, "Reader" n’est pas compatible ARC. Nous devrons donc procéder à une refactorisation. Il y a trois (3) fichiers que nous devrons mettre à jour manuellement avant de pouvoir dire à Xcode de refactoriser pour ARC: "ReaderDocument.m", "ReaderContentPage.m" et "ReaderThumbFetch.m" (pour référence, vous pouvez trouver instructions de base pour ces fichiers ici: http://www.vfr.org/2012/05/reader-arc-conversion/.

En gros, nous allons éditer chacun de ces fichiers pour utiliser des transtypages __bridge simples, comme suit:

ReaderDocument.m:

Changement

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

à
…

= [NSString stringWithString: (__ identifiant de pont) theString];

ReaderContentPage.m:

Changement

… = CGPDFDocumentCreateX ((CFURLRef) fileURL, phrase);

à…

… = CGPDFDocumentCreateX ((__ bridge CFURLRef) fileURL, phrase);

ReaderThumbFetch.m:

Changement

… = CGImageSourceCreateWithURL ((CFURLRef) thumbURL,

à…

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

Avec les modifications ci-dessus apportées, allez à Édition> Refactorisation> Convertir en Objective-C ARC…

Vous serez invité à "Sélectionner les cibles à convertir". Assurez-vous que votre cible actuelle est sélectionnée, puis appuyez sur "Vérifier".

L’invite vous guidera tout au long du processus, vous devriez pouvoir appuyer sur "Suivant" sans problème.

Ensuite, vous pourrez "réviser les modifications", et vous pourrez sélectionner "Sauvegarder".

Enfin, nous devons inclure notre en-tête de bibliothèque "Reader" dans notre principal ViewController.h et définir notre contrôleur de vue principal en tant que ReaderViewControllerDelegate:

#import "ReaderViewController.h"

@interface MTViewController: UIViewController

Étape 2: Configuration

La partie compliquée de la configuration de notre projet est terminée. À partir de ce moment, commencer à visualiser les fichiers PDF dans nos applications est une tâche rapide, avec l'impression, les signets, les vignettes, les courriels, etc.!

Tout d’abord, ajoutons un PDF de démonstration à notre projet. Encore une fois, j'ai créé un nouveau groupe, celui-ci que j'ai appelé "PDF".

J'ai ensuite ajouté un fichier PDF nommé "typo_tips.pdf" que j'ai téléchargé à partir de fontshop.com dans le "répertoire ressources" que vous pouvez utiliser (lien direct). Bien sûr, n'hésitez pas à essayer tous les PDF que vous avez déjà.

Pour ouvrir notre PDF, nous allons ajouter un seul UIButton dans notre ViewController.xib principal.

Nous relierons ensuite notre UIButton à une méthode que nous appellerons didClickOpenPDF.

Le reste du travail sera traité dans cette méthode "didClickOpenPDF" dans notre ViewController.m principal..

Tout d'abord, nous allons récupérer notre document PDF dans notre bundle d'applications.

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

Ensuite, nous allons créer un "ReaderDocument" que notre "Reader" pourra visualiser. Notez que, si notre document était protégé par mot de passe, nous pourrions définir le mot de passe comme paramètre final..

 ReaderDocument * document = [ReaderDocument withDocumentFilePath: mot de passe du fichier: nil];

Ensuite, nous nous assurons que notre "ReaderDocument" a été créé avec succès, avant de mettre en oeuvre notre "ReaderViewController" qui gérera le reste des opérations PDF pour nous..

 if (document! = nil) 

Et entre les accolades de la vérification "document", nous allons charger notre objet "ReaderViewController".

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

Dans cet exemple, nous présenterons notre "ReaderViewController" comme une vue modale, bien que nous puissions également le présenter avec un UINavigationController si notre application utilisait un UINavigationController. Nous avons différentes options de style de présentation et de transition que nous pourrions utiliser pour notre contrôleur ModalView. Nous vous encourageons donc à expérimenter les styles qui conviennent le mieux à votre application. Dans ce cas, nous allons essayer d'imiter le style Apple PDF natif d'iBooks..

Ajoutez les lignes suivantes après "readerViewController.delegate = self;".

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

Enfin, nous devons réellement présenter notre ModalViewController:

 [self presentModalViewController: readerViewController animated: YES];

Comme vous pouvez le constater, une fois que nous avons inclus notre bibliothèque "Reader", il est relativement simple de visualiser et d’interagir avec les fichiers PDF dans nos applications iOS. Voici la méthode complète que nous avons utilisée:

 - (IBAction) didClickOpenPDF: (UIButton *) expéditeur NSString * file = [[NSBundle mainBundle] pathForResource: @ "typo_tips" ofType: @ "pdf"]; ReaderDocument * document = [ReaderDocument withDocumentFilePath: mot de passe du fichier: nil]; if (document! = nil) ReaderViewController * readerViewController = [[ReaderViewController alloc]] initWithReaderDocument: document]; readerViewController.delegate = self; readerViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; readerViewController.modalPresentationStyle = UIModalPresentationFullScreen; [self presentModalViewController: readerViewController animated: YES]; 

Si vous exécutez et générez notre application maintenant, vous verrez les nombreuses fonctionnalités qui fonctionnent déjà pour votre visualiseur PDF.

Il ne reste plus qu’une dernière chose à gérer: supprimer notre PDF Reader ViewController lorsque l’utilisateur appuie sur le bouton "Terminé".

Ceci est géré avec une méthode simple et directe:

 - (void) licencierReaderViewController: (ReaderViewController *) viewController [auto licencierModalViewControllerAnimated: YES]; 

Étape 3: Options

Comme mentionné précédemment, la bibliothèque "Reader" prend en charge bon nombre de ces fonctions, au-delà de la présentation de PDF, telles que l'impression, les signets, etc. Par défaut, la plupart de ces fonctionnalités sont activées. Vous pouvez toutefois choisir de les configurer le mieux possible pour votre application en modifiant le fichier "ReaderConstants.h". Chacune de ces fonctionnalités est listée sur la page "Reader" GitHub, que je montrerai ici:

  • READER_BOOKMARKS - Si TRUE, active la prise en charge des signets de page.
  • READER_ENABLE_MAIL - Si la valeur est TRUE, un bouton de courrier électronique est ajouté à la barre d'outils.
    (si le périphérique est correctement configuré pour l'assistance par courrier électronique).
  • READER_ENABLE_PRINT - Si la valeur est TRUE, un bouton d'impression est ajouté à la barre d'outils.
    (si l'impression est prise en charge et disponible sur le périphérique).
  • READER_ENABLE_THUMBS - Si la valeur est TRUE, un bouton thumbs est ajouté à la barre d'outils.
    (permettant la navigation dans les vignettes de page).
  • READER_DISABLE_IDLE - Si la valeur est TRUE, le minuteur d’inactivité iOS est désactivé pendant que
    affichage d'un document (attention à la batterie).
  • READER_SHOW_SHADOWS - Si TRUE, une ombre apparaît autour de chaque page.
    et le contenu de la page est inséré par quelques points supplémentaires.
  • READER_STANDALONE - Si la valeur est FALSE, un bouton "Terminé" est ajouté à la barre d'outils.
    et la méthode -dismissReaderViewController: delegate est envoyée lorsque
    il est mis sur écoute.
  • READER_DISABLE_RETINA - Si la valeur est TRUE, définit la propriété contentScale de CATiledLayer
    à 1.0f. Ceci désactive efficacement le support rétinien et entraîne
    vitesses de rendu de périphérique non-rétine sur les périphériques d’affichage rétine à
    la perte de qualité d'affichage de la rétine.

Next Time: rédaction de documents PDF

Vous avez maintenant vu à quel point il peut être facile d'afficher des fichiers PDF dans iOS. Dans le prochain tutoriel de cette série, nous examinerons certaines des manières de créer nos propres PDF au sein de nos applications..