Lecture du format ePub


102

J'essaie de développer une application iPhone pour lire les fichiers ePub. Existe-t-il un cadre 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 cela échoue.

Réponses:


305

Le format EPUB rassemble un ensemble de spécifications / formats différents:

  • un pour dire à quoi devrait ressembler le contenu du livre (un sous-ensemble de XHTML 1.1 + CSS)
  • un pour définir un "manifeste" qui répertorie 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 se trouve dans le manifeste plus quelques fichiers supplémentaires)

Les spécifications semblent un peu intimidantes, mais en fait, une fois que vous avez les bases (décompression, analyse XML), ce n'est pas particulièrement difficile ou complexe.

Vous devrez trouver comment télécharger l'EPUB, le décompresser quelque part, analyser le manifeste, puis afficher le contenu pertinent.

Quelques conseils si vous débutez:

Pour afficher le contenu, utilisez simplement un UIWebViewpour le moment.

Voici une étape par étape de haut niveau pour votre code:

1) Créez une vue avec un UIWebView

2) Téléchargez le fichier EPUB

3) Décompressez-le dans un sous-répertoire dans le dossier des documents de votre application à l'aide de 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, lié ci-dessus

5) Dans ce XML, recherchez le premier "rootfile" avec le type de média application/oebps-package+xml. Il s'agit du fichier OPF du livre.

6) analyser le fichier OPF (également XML)

7) Vous devez maintenant savoir quel est le premier chapitre du livre.

a) chacun <item>dans l' <manifest>élément a un id et un href. Stockez-les dans un NSDictionaryoù la clé est l'id et l'objet est le href.

b) Regardez le premier <itemref>dans le <spine>. Il a un attribut idref qui correspond à l'un des identifiants de (a). Recherchez cet identifiant dans le NSDictionaryet vous obtiendrez un href.

c) c'est le fichier du premier chapitre à montrer à l'utilisateur. Déterminez quel est le chemin complet (indice: c'est là où vous avez décompressé le fichier zip dans (3) plus le répertoire de base du fichier OPF dans (6))

8) créez un NSURLusing fileURLWithPath:, où le chemin est le chemin complet de (7c). Chargez cette demande en utilisant le que UIWebViewvous avez créé dans (1).

Vous devrez implémenter des boutons avant / arrière, des balayages ou quelque chose pour que les utilisateurs puissent passer d'un chapitre à un autre. Utilisez le <spine>pour déterminer quel fichier afficher ensuite - les <itemrefs>dans le XML sont dans l'ordre dans lequel ils doivent apparaître au lecteur.


vraiment un bon tutoriel ..! homme cool..! J'ai passé beaucoup de temps pour une telle démo
Paresh Thakor

16
c'est dommage qu'il ne soit possible de fournir qu'une seule voix positive pour cette réponse
Tim McNamara

Très bonne réponse. Cela devient une FAQ :)
Nic Gibson

9
Merci beaucoup Euan ... Pour tous ceux qui sont encore à la recherche d'une solution, j'ai créé un échantillon et publié dans ideveloperworld.blogspot.com/2011/02/epub-reader.html
MobX

Notez qu'il n'y a aucun besoin particulier de "le décompresser quelque part" si vous entendez par là créer de nouveaux fichiers séparés qui sont le contenu décompressé de l'archive ZIP. ZIP est un format assez simple, et il devrait être assez facile de créer des bibliothèques qui vous donnent des flux d'entrée pour les différents fichiers de l'archive qui lisent directement depuis l'archive à la volée, si vous ne disposez pas déjà de telles bibliothèques. RubyZip ( rubyzip.sourceforge.net ) est un exemple d'une telle bibliothèque, avec une source complète disponible .
cjs

21

Apparemment, EPUB est "juste" un format XML, donc si vous avez un analyseur xml et les spécifications, cela devrait être correct.

Plus un peu de tuto ? S'amuser!

EDIT: vous pouvez également lire du code ici , c'est pour générer epub, pas pour les lire mais le code peut être utile.

MODIFIER à nouveau: Et voir les liens vers la question connexe dans la barre latérale droite, il y a des liens dans les réponses au lecteur de livre électronique gratuit qui prend en charge ePub.


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

Ainsi, l'analyse échoue parce que vous n'avez pas lu les spécifications ou les questions associées sur Stack Overflow ... * Le fichier .epub est un dossier compressé contenant des fichiers XML, et non du xml.


6

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 suggère fortement de regarder certaines des 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.


Ce didacticiel est excellent et a été écrit par la personne qui a créé de nombreux outils ePub open source standard disponibles. C'est une lecture rapide et donne une introduction parfaite au format ePub.
Brian Moeskau le


2

Je joue pour créer un framework epub pour les applications iPhone.

Pour le moment (je viens de commencer), je peux générer une page de titre avec des liens vers les chapitres.

Mon approche est

  • Utilisez le framework iphone quickconnect comme couche (peut-être que je change pour phonegap) qui permet essentiellement les applications javascript comme applications iphone
  • Ajouter le epub UNZIPed en tant que ressource au projet
  • Analysez le tout avec une version personnalisée de epub.js (quelque part sur google-code)

En ce moment, je suis à la recherche de pagesflip, d'une sorte d'interface graphique et de problèmes mineurs d'utilisation (enregistrez la page en cours de visualisation)

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


J'ai utilisé le epub.js ce que j'ai eu une erreur en tant qu'erreur d' analyse XML: aucun élément trouvé numéro de ligne de localisation1 numéro de colonne 1.Pouvez-vous m'aider en fournissant des liens
user969275

quoi de neuf avec votre cadre? l'avez-vous publié quelque part?
yasirmturk

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.