Odczyt formatu ePub

Próbuję stworzyć aplikację na iPhone ' a do odczytu plików ePub. Czy istnieją jakieś ramy, aby to rozwinąć? Nie mam pojęcia jak odczytać ten format pliku. Próbowałem przeanalizować przykładowy plik .rozszerzenie epub za pomocą parsera NSXML, ale to się nie powiedzie.

 99
Author: Bill the Lizard, 2009-09-07

6 answers

Format EPUB łączy kilka różnych specyfikacji / formatów:

    [18]} jeden, aby powiedzieć, jak powinna wyglądać treść książki (podzbiór XHTML 1.1 + CSS) W przeciwieństwie do innych formatów, które nie są w pełni kompatybilne z formatem XML, nie są w pełni kompatybilne z formatem XML.]} Jest to jeden z najbardziej znanych i najbardziej znanych programów komputerowych na świecie.]}

Specyfikacja wygląda trochę zniechęcająco, ale w rzeczywistości, gdy już masz podstawy (rozpakowanie, parsowanie XML) w dół nie jest to szczególnie trudne lub złożone.

Musisz dowiedzieć się, jak pobrać plik EPUB, rozpakować go gdzieś, przeanalizować manifest, a następnie wyświetlić odpowiednią zawartość.

Kilka wskazówek, jeśli dopiero zaczynasz:

Aby wyświetlić zawartość wystarczy użyć UIWebView Na razie.

Oto wysoki poziom krok po kroku dla Twojego kodu:

1) Utwórz widok za pomocą UIWebView

2) pobierz plik EPUB

3) rozpakuj go do podkatalogu w folderze Dokumenty aplikacji za pomocą biblioteki zip, połączonej powyżej

4) przeanalizuj plik XML w META-INF/container.xml (Jeśli ten plik nie istnieje, plik EPUB jest nieprawidłowy) za pomocą tbxml, połączonego powyżej

5) w tym XML znajdź pierwszy "plik rootfile" z typem nośnika application/oebps-package+xml. To plik OPF do książki.

6) parse the OPF file (also XML)

7) Teraz musisz wiedzieć, jaki jest pierwszy rozdział książki.

A) każdy <item> w elemencie <manifest> ma id i href. Przechowuj je w NSDictionary, gdzie kluczem jest id, a obiektem jest href.

B) spójrz na pierwszy <itemref> w <spine>. Posiada atrybut idref, który odpowiada jednemu z identyfikatorów w (a). Sprawdź ten identyfikator w {[6] } i dostaniesz href.

C) jest to plik pierwszego rozdziału, który pokazuje użytkownikowi. Wypracuj co pełna ścieżka to (podpowiedź: jest wszędzie tam, gdzie rozpakowałeś plik zip do in (3) oraz katalogu bazowego pliku OPF w (6))

8) Utwórz NSURL używając fileURLWithPath:, gdzie ścieżka jest pełną ścieżką z (7c). Załaduj to żądanie używając UIWebView, które utworzyłeś w (1).

Będziesz musiał zaimplementować przyciski do przodu / do tyłu lub przesunięcia, aby użytkownicy mogli przenosić się z jednego rozdziału do drugiego. Użyj <spine>, aby ustalić, który plik ma być następny - <itemrefs> w XML są w kolejności powinny pojawić się czytelnikowi.

 297
Author: Euan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-28 01:28:44

Najwyraźniej EPUB jest" tylko " formatem XML, więc jeśli masz parser xml i spec powinno być w porządku.

Plus Małe tuto ? Baw się dobrze!

EDIT: możesz też przeczytać jakiś kod tutaj, służy do generowania epub, a nie do ich odczytywania, ale kod może być przydatny.

Edytuj ponownie: i zobacz linki do powiązanych pytań w prawym pasku bocznym, są pewne linki w odpowiedziach do darmowego czytnika ebooków, które obsługują ePub.


EDIT 3: You powinieneś dodać komentarz podczas edycji pytania, aby osoby, które odpowiedzą, mogły kontynuować dyskusję (jeśli nie skomentujesz, nie zauważymy Twojej edycji).

Więc parsowanie nie powiodło się, ponieważ nie przeczytałeś specyfikacji lub powiązanych pytań dotyczących przepełnienia stosu... *.plik epub to spakowany folder zawierający pliki XML, a nie zwykły xml.

 21
Author: p4bl0,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-07 18:11:12

Przeczytałem ten tutorial raz (wymagana darmowa rejestracja, przepraszam) i dał mi świetne wprowadzenie do ePub. deverloperworks tutorial tutaj

Sugeruję, abyś przejrzał niektóre biblioteki przetwarzania XML. Jeśli chcesz tylko uzyskać określone informacje z pliku XML, możesz wybrać odpowiednią strategię parsowania.

 6
Author: yonkeltron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-07 18:32:23

Istnieje projekt open source fbreader,

Obsługuje również iphone

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

 3
Author: camino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-09 09:49:42

Gram arround, aby utworzyć epub-framework dla aplikacji iphone.

W tej chwili (naprawdę dopiero zaczynam) mogę wygenerować stronę tytułową z linkami do rozdziałów.

Moje podejście to

  • Użyj QuickConnect iphone framework jako warstwę (może zmienię na phonegap) który w zasadzie pozwala na obsługę javascript aplikacje jako aplikacje na iphone ' a
  • Dodaj UNZIPed epub jako ressource do projektu
  • przeanalizuj całość za pomocą dostosowanej wersji pliku epub.js (somewhere na google-code)

W tej chwili patrzę na pageflip, jakiś gui i drobne problemy z użytecznością (zapisz bieżącą stronę)

Mam nadzieję, że to da ci pomysł, jak zacząć

 2
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-20 10:07:30

Jonathan Wight (schwa) opracował rozwiązanie ObjC do parsowania i wyświetlania dokumentów ePub na iPhonie. To część jego repozytorium TouchCode open source.

 1
Author: Dwight Kelly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-29 15:36:04