Format EPUB łączy kilka różnych specyfikacji / formatów:
- jedno, aby powiedzieć, jak powinna wyglądać treść książki (podzbiór XHTML 1.1 + CSS)
- jeden do zdefiniowania „manifestu”, który zawiera listę wszystkich plików tworzących tę zawartość (OPF, który jest plikiem XML)
- jeden do określenia, jak wszystko jest pakowane (OEBPS: plik zip zawierający wszystko w manifeście plus kilka dodatkowych plików)
Specyfikacje wyglądają nieco zniechęcająco, ale w rzeczywistości po opanowaniu podstaw (rozpakowywanie, parsowanie XML) nie jest to szczególnie trudne ani skomplikowane.
Musisz dowiedzieć się, jak pobrać plik EPUB, gdzieś go rozpakować, przeanalizować manifest, a następnie wyświetlić odpowiednią zawartość.
Kilka wskazówek, jeśli dopiero zaczynasz:
Aby wyświetlić zawartość, użyj UIWebView
na razie.
Oto wysoki poziom, krok po kroku, dotyczący Twojego kodu:
1) utwórz widok za pomocą pliku UIWebView
2) pobierz plik EPUB
3) rozpakuj go do podkatalogu w folderze dokumentów aplikacji za pomocą biblioteki zip, do której link znajduje się powyżej
4) przeanalizuj plik XML pod adresem META-INF/container.xml
(jeśli ten plik nie istnieje, plik EPUB jest nieprawidłowy) przy użyciu TBXML, do którego link znajduje się powyżej
5) W tym kodzie XML znajdź pierwszy „plik główny” z typem nośnika application/oebps-package+xml
. To jest plik OPF dla książki.
6) przeanalizuj plik OPF (również XML)
7) Teraz musisz wiedzieć, jaki jest pierwszy rozdział książki.
a) każdy <item>
w <manifest>
elemencie ma identyfikator i href. Przechowuj je w NSDictionary
miejscu, w którym klucz jest identyfikatorem, a obiektem jest href.
b) Spójrz na pierwszy <itemref>
w <spine>
. Posiada atrybut idref, który odpowiada jednemu z identyfikatorów w (a). Wyszukaj ten identyfikator w, NSDictionary
a otrzymasz href.
c) jest to plik z pierwszego rozdziału do pokazania użytkownikowi. Sprawdź, jaka jest pełna ścieżka (wskazówka: jest to miejsce, w którym rozpakowałeś plik zip w (3) oraz katalog podstawowy pliku OPF w (6))
8) utwórz NSURL
using fileURLWithPath:
, gdzie ścieżka jest pełną ścieżką z (7c). Załaduj to żądanie, korzystając z UIWebView
utworzonego w (1).
Będziesz musiał zaimplementować przyciski do przodu / do tyłu, przesunięcia lub coś w tym rodzaju, aby użytkownicy mogli przechodzić z jednego rozdziału do drugiego. Użyj, <spine>
aby dowiedzieć się, który plik pokazać jako następny - <itemrefs>
w XML są w kolejności, w jakiej powinny pojawić się czytelnikowi.