2009-09-07 19 views
97

Ich versuche eine iPhone-Anwendung zum Lesen von ePub-Dateien zu entwickeln. Gibt es einen Rahmen, um dies zu entwickeln? Ich habe keine Ahnung, wie man dieses Dateiformat liest. Ich habe versucht, eine Beispieldatei mit .epub-Erweiterung mit NSXML-Parser zu analysieren, aber das schlägt fehl.Lesen von ePub-Format

Antwort

292

Das EPUB-Format bringt eine Reihe von verschiedenen Spezifikationen/Formate zusammen:

  • man zu sagen, was der Inhalt des Buches wie (eine Teilmenge von XHTML 1.1 + CSS)
  • eine definieren aussehen sollte ein "Manifest", das alle Dateien auflistet, aus denen der Inhalt besteht (OPF, eine XML-Datei)
  • um zu definieren, wie alles verpackt ist (OEBPS: eine Zip-Datei von allem im Manifest plus ein paar extra Dateien)

Die Spezifikationen sehen etwas entmutigend aus, aber sobald Sie die Grundlagen (Entpacken, Parsen von XML) haben, ist es nicht besonders schwierig oder komplex.

Sie müssen herausfinden, wie Sie das EPUB herunterladen, es irgendwo entpacken, das Manifest analysieren und dann den relevanten Inhalt anzeigen.

Einige Hinweise, wenn Sie gerade erst anfangen:

Inhalte anzuzeigen verwenden gerade jetzt eine UIWebView für.

Hier ist ein hohes Niveau Schritt für Schritt für Ihren Code:

1) Erstellen Sie eine Ansicht mit einem UIWebView

2) Laden Sie die EPUB-Datei

3) entpacken Sie es in ein Unterverzeichnis in Ihrem App-Dokumente Ordner mit der Zip-Bibliothek, über

4) Parsen der XML-Datei unter META-INF/container.xml (wenn diese Datei nicht existiert das EPUB ist ungültig) mit TBXML, über

01 verbunden

5) Suchen Sie in diesem XML die erste "Rootfile" mit dem Medientyp application/oebps-package+xml. Dies ist die OPF-Datei für das Buch.

6) analysiert, um die OPF-Datei (auch XML)

7) jetzt müssen Sie wissen, was das erste Kapitel des Buchs ist.

a) Jede <item> im <manifest> Element hat eine ID und eine href. Speichern Sie diese in einer NSDictionary, wo der Schlüssel die ID ist und das Objekt die href ist.

b) Betrachten Sie die erste <itemref> in der <spine>. Es hat ein IDRef-Attribut, das einer der IDs in (a) entspricht. Suchen Sie diese ID in der NSDictionary und Sie erhalten eine href.

c) Dies ist die Datei des ersten Kapitels, die dem Benutzer angezeigt wird. Herausfinden, was der vollständige Pfad ist (Tipp: es ist egal wo Sie die Zip-Datei auf dekomprimiert in (3) und das Basisverzeichnis der OPF-Datei in (6))

8) schafft eine NSURL mit fileURLWithPath:, wo der Weg ist der vollständige Weg von (7c). Laden Sie diese Anfrage mit der UIWebView, die Sie in (1) erstellt haben.

Sie müssen vorwärts/rückwärts Schaltflächen oder Swipes oder etwas implementieren, so dass Benutzer von einem Kapitel zum anderen wechseln können. Verwenden Sie die <spine> um herauszufinden, welche Datei als nächstes angezeigt werden soll - die <itemrefs> im XML sind in der Reihenfolge, in der sie dem Leser erscheinen sollen.

+0

wirklich ein gutes Tutorial ..! cooler Mann ..! Ich habe viel Zeit für eine solche Demo verbracht –

+13

es ist eine Schande, dass es nur möglich ist, 1 upvote für diese Antwort zu bieten –

+0

Große Antwort. Dies wird zu einer FAQ :) –

21

Anscheinend EPUB ist "nur" ein XML-Format, also wenn Sie einen XML-Parser haben und the spec sollte es in Ordnung sein.

Plus a little tuto? Habe Spaß!

BEARBEITEN: Sie könnten auch einen Code here lesen, dies ist zum Erzeugen von epub, nicht lesen, aber der Code kann nützlich sein.

BEARBEITEN Sie noch einmal: Und Links zu verwandten Frage in der rechten Seitenleiste sehen, gibt es einige Links in den Antworten auf kostenlose Ebook-Reader, die ePub unterstützen.


EDIT 3: Sie sollten einen Kommentar hinzufügen, wenn Sie Ihre Frage bearbeiten, damit die Menschen, die Sie beantworten die Diskussion fortgesetzt werden kann (wenn Sie nicht kommentieren wir nicht Ihrer bearbeiten bemerkt).

Also, die Analyse fehlschlagen, weil Sie die Spezifikation oder verwandte Fragen zu Stack Overflow nicht gelesen haben ... * .epub-Datei sind ein gezippter Ordner mit XML-Datei (en), nicht einfach xml.

6

Ich habe dieses Tutorial einmal durchgelesen (kostenlose Registrierung erforderlich, sorry) und es gab mir eine tolle Einführung in ePub. deverloperWorks tutorial here

Ich schlage vor, Sie betrachten einige der XML-Verarbeitungsbibliotheken. Wenn Sie nur bestimmte Informationen aus der XML-Datei abrufen möchten, können Sie die richtige Analysestrategie auswählen.

+0

Dieses Tutorial ist ausgezeichnet und wird von der Person geschrieben, die verfügbar viele der Standard-Open-Source-ePub Tools verfasst. Es ist eine schnelle Lektüre und bietet ein perfektes Arbeits-Intro zum ePub-Format. –

2

Ich spiele um ein Epub-Framework für iPhone Apps zu erstellen.

Im Moment (ich habe gerade angefangen) kann ich eine Titelseite mit Links zu den Kapiteln erstellen.

Mein Ansatz ist

  • Verwenden Quick iphone Rahmen als eine Schicht (vielleicht i phonegap ändern) die für Javascript erlaubt grundsätzlich Apps wie iphone apps
  • Fügen Sie den UNZIPed epub als Ressource zu das Projekt
  • Parsen Sie das Ganze mit einer angepassten Version des epub.js (irgendwo auf Google-Code)

Im Moment suche ich in pageflip, eine Art gui und kleineren Usability-Probleme (die aktuelle Seite speichern beingviewed)

Ich hoffe, dass Sie sich auf eine Idee des Gebens Wie startet man?

+0

Ich habe die epub.js verwendet, was ich einen Fehler als * XML Parsing Error: kein Element gefunden * location line number1 column number 1.can Sie mich durch die Bereitstellung einiger Links – user969275

+0

was ist mit Ihrem Framework? hast du es irgendwo veröffentlicht? – yasirmturk

1

Jonathan Wight (schwa) hat eine ObjC-Lösung zum Parsen und Anzeigen von ePub-Dokumenten auf dem iPhone entwickelt. Es ist Teil seines Open Source-Repositorys TouchCode.

+0

Bitte geben Sie mir Link von TouchCode Open Source – Hiren

+0

http://code.google.com/p/touchcode/source/browse/Experimental/?r=e621eadd838d7733f5025e16733fccb967eb2325#Experimental%2FTouchBook –