web-dev-qa-db-fra.com

Lecture du format ePub

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.

101
MobX

Le format EPUB rassemble un tas 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 emballé (OEBPS: un fichier Zip de tout 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 déterminer 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 UIWebView pour l'instant.

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

1) créer une vue avec un UIWebView

2) téléchargez le fichier EPUB

3) Décompressez-le dans un sous-répertoire du dossier de 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 "fichier racine" avec le type de support 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) chaque <item> dans l'élément <manifest> a un id et une href. Stockez-les dans un NSDictionary où 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 NSDictionary et vous obtiendrez un href.

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

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

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

301
Euan

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

De plus n petit 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 les questions connexes dans la barre latérale droite, il y a des liens dans les réponses au lecteur d'ebook gratuit qui prennent en charge 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 remarqués de votre modification).

Ainsi, l'analyse é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 des fichiers XML, pas du XML brut.

21
p4bl0

J'ai lu ce tutoriel une fois (inscription gratuite requise, désolé) et cela 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 obtenir des informations spécifiques du fichier XML, vous pouvez choisir la bonne stratégie d'analyse.

6
yonkeltron

il y a un fbreader de projet open source,

il prend également en charge l'iphone

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

3
camino

Je joue autour pour créer un cadre epub pour les applications iphone.

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

Mon approche est

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

En ce moment, je suis en train de regarder pageflip, une sorte de gui et des problèmes mineurs d'utilisation (enregistrer la page en cours de visualisation)

J'espère que ça vous donne une idée sur comment commencer

2
user254770

Jonathan Wight (schwa) a développé une solution ObjC pour analyser et afficher des documents ePub sur l'iPhone. Cela fait partie de son référentiel open source TouchCode.

1
Dwight Kelly