104 votes

Lecture du format ePub

J'essaie de développer une application iPhone pour lire les fichiers ePub. Existe-t-il un framework disponible pour développer cela ? Je n'ai aucune idée de la façon de lire ce format de fichier. J'ai essayé d'analyser un exemple de fichier avec l'extension .epub à l'aide de NSXML Parser, mais sans succès.

313voto

Euan Points 2765

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.

0 votes

Vraiment un bon tutorial cool man j'ai passé beaucoup de temps pour une telle démo

16 votes

C'est une honte qu'il ne soit possible de donner qu'un seul vote positif à cette réponse.

0 votes

Excellente réponse. Cela devient une FAQ :)

21voto

p4bl0 Points 2583

Apparemment, EPUB est "juste" un format XML, donc si vous avez un analyseur xml et la spécification ça devrait aller.

Plus un petit tuto ? Amusez-vous bien !

EDIT : vous pouvez aussi lire du code ici Il s'agit de générer des epubs, pas de les lire, mais le code peut être utile.

EDIT encore : Et voir les liens vers les questions connexes dans la barre latérale droite, il y a quelques liens dans les réponses vers des lecteurs d'ebook gratuits qui supportent ePub.


EDIT 3 : Vous devez ajouter un commentaire lorsque vous modifiez votre question afin que les personnes qui vous répondent puissent poursuivre la discussion (si vous ne commentez pas, nous ne sommes pas informés de votre modification).

Donc, l'analyse syntaxique échoue parce que vous n'avez pas lu la spécification ou les questions connexes sur Stack Overflow ... Le fichier *.epub est un dossier zippé contenant un ou plusieurs fichiers XML, et non pas du xml brut.

6voto

yonkeltron Points 531

J'ai lu ce tutoriel une fois (inscription gratuite requise, désolé) et il m'a donné une excellente introduction à ePub. tutoriel deverloperWorks ici

Je vous conseille vivement de consulter certaines bibliothèques de traitement XML. Si vous souhaitez simplement extraire des informations spécifiques du fichier XML, vous pouvez choisir la bonne stratégie d'analyse.

0 votes

Ce tutoriel est excellent et a été rédigé par la personne qui a créé la plupart des outils ePub open source standard disponibles. Il se lit rapidement et constitue une introduction parfaite au format ePub.

3voto

camino Points 1495

Il existe un projet open source fbreader,

il supporte aussi l'iphone

http://www.fbreader.org/about.php

0 votes

Ou il y a aussi futurepress/epub.js (il lit les epub et les annotations à travers un navigateur web)

2voto

Je m'amuse à créer un cadre epub pour les applications iphone.

Pour l'instant (je viens juste de commencer), je peux générer une page de titre avec des liens vers les chapitres.

Mon approche est la suivante

  • Utiliser le framework iphone quickconnect comme une couche (peut-être que je vais changer pour phonegap) qui permet essentiellement d'utiliser javascript comme des applications iphone
  • Ajouter l'epub dézippé comme ressource au projet.
  • Analyser le tout avec une version personnalisée de epub.js (quelque part sur google-code).

Pour l'instant, j'étudie la possibilité d'un saut de page, d'une sorte d'interface et de problèmes mineurs de convivialité (sauvegarder la page en cours d'affichage).

J'espère que cela vous donne une idée de la façon dont vous pouvez commencer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X