Le format EPUB regroupe un ensemble de spécifications/formats différents :
- un pour dire à quoi doit ressembler le contenu du livre (un sous-ensemble de XHTML 1.1 + CSS)
- un pour définir un "manifeste" qui liste tous les fichiers qui composent ce contenu (OPF, qui est un fichier XML)
- un pour définir comment tout est empaqueté (OEBPS : un fichier zip de tout ce qui est dans le manifeste plus quelques fichiers supplémentaires)
Les spécifications semblent un peu décourageantes, mais en fait, une fois que vous avez acquis les bases (décompression, analyse XML), ce n'est pas particulièrement difficile ou complexe.
Vous devrez trouver le moyen de télécharger l'EPUB, de le décompresser quelque part, d'analyser le manifeste, puis d'afficher le contenu correspondant.
Quelques conseils si vous débutez :
Pour afficher le contenu, il suffit d'utiliser un UIWebView
pour le moment.
Voici un pas à pas de haut niveau pour votre code :
1) créer une vue avec un UIWebView
2) télécharger le fichier EPUB
3) dézippez le fichier dans un sous-répertoire du dossier des documents de votre application en utilisant la bibliothèque zip, liée ci-dessus
4) analyser le fichier XML à META-INF/container.xml
(si ce fichier n'existe pas, l'EPUB n'est pas valide) en utilisant TBXML, dont le lien figure ci-dessus.
5) Dans ce XML, trouvez le premier "rootfile" avec media-type application/oebps-package+xml
. Il s'agit du fichier OPF du livre.
6) analyser le fichier OPF (également XML)
7) maintenant vous devez savoir quel est le premier chapitre du livre.
a) chacun <item>
dans le <manifest>
a un id et un href. Stockez-les dans un fichier NSDictionary
où la clé est l'id et l'objet est le href.
b) Regardez le premier <itemref>
dans le <spine>
. Il possède un attribut idref qui correspond à l'un des ids de (a). Recherchez cet identifiant dans la base de données NSDictionary
et vous obtiendrez un href.
c) c'est le fichier du premier chapitre à montrer à l'utilisateur. Trouvez le chemin complet (indice : c'est l'endroit où vous avez décompressé le fichier zip en (3) plus le répertoire de base du fichier OPF en (6)).
8) créer un NSURL
en utilisant fileURLWithPath:
où le chemin est le chemin complet de (7c). Chargez cette requête en utilisant la méthode UIWebView
que vous avez créé en (1).
Vous devrez mettre en place des boutons avant/arrière ou des balayages ou autre chose pour que les utilisateurs puissent passer d'un chapitre à l'autre. Utilisez le <spine>
pour savoir quel fichier montrer ensuite - le <itemrefs>
dans le XML sont dans l'ordre dans lequel ils doivent apparaître pour le lecteur.