Lettura del formato ePub


102

Sto cercando di sviluppare un'applicazione per iPhone per leggere i file ePub. Esiste un framework disponibile per svilupparlo? Non ho idea di come leggere questo formato di file. Ho provato ad analizzare un file di esempio con estensione .epub utilizzando NSXML Parser, ma non riesce.

Risposte:


304

Il formato EPUB riunisce una serie di diverse specifiche / formati:

  • uno per dire come dovrebbe essere il contenuto del libro (un sottoinsieme di XHTML 1.1 + CSS)
  • uno per definire un "manifest" che elenca tutti i file che compongono quel contenuto (OPF, che è un file XML)
  • uno per definire come tutto è impacchettato (OEBPS: un file zip di tutto nel manifest più alcuni file extra)

Le specifiche sembrano un po 'scoraggianti, ma in realtà una volta che hai le basi (decompressione, analisi XML) non è particolarmente difficile o complesso.

Dovrai capire come scaricare l'EPUB, decomprimerlo da qualche parte, analizzare il manifest e quindi visualizzare il contenuto pertinente.

Alcuni suggerimenti se hai appena iniziato:

Per visualizzare il contenuto usa UIWebViewper ora.

Ecco un passo dopo passo di alto livello per il tuo codice:

1) crea una vista con estensione UIWebView

2) scarica il file EPUB

3) decomprimilo in una sottodirectory nella cartella dei documenti della tua app utilizzando la libreria zip, collegata sopra

4) analizzare il file XML in META-INF/container.xml(se questo file non esiste l'EPUB non è valido) utilizzando TBXML, collegato sopra

5) In questo XML, trova il primo "rootfile" con media-type application/oebps-package+xml. Questo è il file OPF del libro.

6) analizza il file OPF (anche XML)

7) ora devi sapere qual è il primo capitolo del libro.

a) ciascun <item>nel <manifest>elemento ha un id e un href. Memorizzali in un punto in NSDictionarycui la chiave è l'id e l'oggetto è l'href.

b) Guarda il primo <itemref>nel file <spine>. Ha un attributo idref che corrisponde a uno degli id ​​in (a). Cerca quell'ID nel NSDictionarye otterrai un href.

c) questo è il file del primo capitolo da mostrare all'utente. Calcola qual è il percorso completo (suggerimento: è ovunque hai decompresso il file zip in (3) più la directory di base del file OPF in (6))

8) crea un NSURLusing fileURLWithPath:, dove il percorso è il percorso completo da (7c). Carica questa richiesta utilizzando il UIWebViewcreato in (1).

Avrai bisogno di implementare pulsanti avanti / indietro o scorri o qualcosa del genere in modo che gli utenti possano spostarsi da un capitolo all'altro. Usa il <spine>per capire quale file mostrare dopo - <itemrefs>i file nell'XML sono nell'ordine in cui dovrebbero apparire al lettore.


davvero un bel tutorial ..! uomo figo ..! Ho passato molto tempo per questa demo
Paresh Thakor

16
è un peccato che sia possibile fornire solo 1 voto positivo per questa risposta
Tim McNamara

Bella risposta. Questa sta diventando una FAQ :)
Nic Gibson

9
Grazie mille Euan ... Per tutti coloro che sono ancora alla ricerca di una soluzione, ho creato un campione e pubblicato su ideveloperworld.blogspot.com/2011/02/epub-reader.html
MobX

Si noti che non è necessario "decomprimerlo da qualche parte" se con questo si intende creare nuovi file separati che sono il contenuto decompresso dell'archivio ZIP. ZIP è un formato piuttosto semplice e dovrebbe essere abbastanza facile creare librerie che forniscano flussi di input per i vari file nell'archivio che vengono letti direttamente dall'archivio al volo, se non si dispone già di tali librerie. Un esempio di tale libreria, con il sorgente completo disponibile, è RubyZip ( rubyzip.sourceforge.net ).
cjs

21

Apparentemente EPUB è "solo" un formato XML, quindi se hai un parser xml e le specifiche dovrebbero andare bene.

Più un po 'di tuto ? Divertiti!

EDIT: potresti anche leggere del codice qui , questo è per generare epub, non per leggerli ma il codice può essere utile.

MODIFICA di nuovo: e vedi i link alla domanda correlata nella barra laterale destra, ci sono alcuni link nelle risposte al lettore di ebook gratuito che supporta ePub.


MODIFICA 3: dovresti aggiungere un commento quando modifichi la tua domanda in modo che le persone che ti rispondano possano continuare la discussione (se non commenti non ci accorgiamo della tua modifica).

Quindi, l'analisi fallisce perché non hai letto le specifiche o le domande correlate su Stack Overflow ... * .epub file sono una cartella compressa contenente file XML, non semplice xml.


6

Ho letto questo tutorial una volta (è richiesta la registrazione gratuita, mi dispiace) e mi ha dato un'ottima introduzione a ePub. tutorial deverloperWorks qui

Ti consiglio caldamente di guardare alcune delle librerie di elaborazione XML. Se vuoi solo ottenere informazioni specifiche dal file XML, puoi scegliere la giusta strategia di analisi.


Questo tutorial è eccellente ed è scritto dalla persona che ha creato molti degli strumenti ePub open source standard disponibili. È una lettura rapida e offre una perfetta introduzione di lavoro al formato ePub.
Brian Moeskau


2

Sto giocando in giro per creare un epub-framework per le app per iPhone.

Al momento (ho davvero appena iniziato) posso generare una pagina del titolo con collegamenti ai capitoli.

Il mio approccio è

  • Usa il framework iphone quickconnect come livello (forse cambio in phonegap) che fondamentalmente consente le app javascript come app per iphone
  • Aggiungi l'epub UNZIPed come risorsa al progetto
  • Analizza il tutto con una versione personalizzata di epub.js (da qualche parte su google-code)

In questo momento sto esaminando il pageflip, una sorta di interfaccia grafica e problemi minori di usabilità (salva la pagina corrente che viene visualizzata)

Spero che ti dia un'idea su come iniziare


ho usato epub.js ho ricevuto un errore come XML Parsing Error: nessun elemento trovato posizione numero riga 1 colonna numero 1.può aiutarmi fornendo alcuni link
user969275

che succede con il tuo framework? l'hai pubblicato da qualche parte?
yasirmturk

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.