2009-09-07 3 views
97

Я пытаюсь разработать приложение iPhone для чтения файлов ePub. Есть ли какие-либо рамки для его разработки? Я не знаю, как читать этот формат файла. Я попытался проанализировать образец файла с расширением .epub, используя NSXML Parser, но это не удается.Чтение формата ePub

ответ

292

Формат EPUB объединяет кучу разных спецификаций/форматов:

  • один, чтобы сказать, что содержание книги должно выглядеть (подмножество XHTML 1.1 + CSS)
  • один для определения «манифест», в котором перечислены все файлы, составляющие этот контент (OPF, который является XML-файлом)
  • один, чтобы определить, как все упаковано (OEBPS: zip-файл всего в манифесте плюс несколько дополнительных файлы)

Спецификации выглядят немного сложными, но на самом деле, как только у вас есть основы (распаковка, разбор XML), это не особенно сложно или сложно.

Вам нужно будет разобраться, как загрузить EPUB, разархивировать его где-нибудь, проанализировать манифест, а затем отобразить соответствующий контент.

Некоторых указатели, если вы только начинаете:

Для отображения содержимого просто использовать UIWebView сейчас.

Вот шаг высокого уровня за шагом для вашего кода:

1) создать представление с UIWebView

2) скачать файл EPUB

3) распаковать его в подкаталог в вашей папка документов приложения, использующая zip-библиотеку, связанную выше

4) проанализируйте файл XML по адресу META-INF/container.xml (если этот файл не существует, EPUB недействителен) с использованием TBXML, связанного выше

5) В этом XML найдите первый «корневой файл» с медиа-типом application/oebps-package+xml. Это файл OPF для книги.

6) разобрать БКП файл (также XML)

7) Теперь вы должны знать, что первая глава книги.

a) каждый <item> в элементе <manifest> имеет идентификатор и href. Сохраните их в файле NSDictionary, где ключ - это идентификатор, а объект - href.

b) Посмотрите на первый <itemref> в <spine>. Он имеет атрибут idref, который соответствует одному из идентификаторов в (a). Посмотрите этот идентификатор в NSDictionary, и вы получите href.

c) Это файл первой главы, чтобы показать пользователя. Работа, что полный путь (подсказка: это место, куда вы распаковали файл почтового индекса в (3), а также базовый каталог БКП файла (6))

8) создать NSURL с помощью fileURLWithPath:, где путь является полным путем из (7c). Загрузите этот запрос, используя UIWebView, который вы создали в (1).

Вам нужно будет использовать кнопки вперед или назад или щелчки или что-то еще, чтобы пользователи могли перемещаться из одной главы в другую. Используйте <spine>, чтобы определить, какой файл будет показан дальше - <itemrefs> в XML-формате в порядке, в котором они должны появляться читателю.

+0

действительно хороший учебник ..! крутой чувак..! Я потратил много времени на такую ​​демонстрацию –

+13

, это позор, что можно дать только 1 upvote для этого ответа –

+0

Отличный ответ. Это становится часто задаваемым вопросом :) –

21

Очевидно, EPUB является «просто» XML-форматом, поэтому, если у вас есть синтаксический анализатор xml и the spec, все должно быть в порядке.

Plus a little tuto? Повеселись!

EDIT: вы также можете прочитать код here, это для создания epub, а не для чтения, но код может быть полезен.

РЕДАКТИРОВАТЬ снова: и посмотреть ссылки на соответствующий вопрос в правой боковой панели, есть некоторые ссылки в ответах на бесплатный ebook reader, которые поддерживают ePub.


EDIT 3: Вы должны добавить комментарий, когда вы изменить свой вопрос, чтобы люди, которые вы ответите могут продолжить обсуждение (если вы не комментируете, мы не заметили ваше редактирование).

Итак, синтаксический анализ завершился неудачно, потому что вы не прочитали спецификацию или связанные с ней вопросы в Stack Overflow ... * .epub-файл - это ZIP-папка, содержащая XML-файл (ы), а не простой xml.

6

Я прочитал этот учебник один раз (требуется бесплатная регистрация, извините), и это дало мне отличное введение в ePub. deverloperWorks tutorial here

Я настоятельно рекомендую вам взглянуть на некоторые из библиотек обработки XML. Если вы хотите получить определенную информацию из XML-файла, вы можете выбрать правильную стратегию синтаксического анализа.

+0

Этот учебник является прекрасным и написана человеком, который является автором многих стандартных инструментов с открытым исходным кодом EPUB доступны. Это быстрое чтение и дает отличное рабочее введение в формат ePub. –

2

Я играю arround для создания epub-рамки для приложений iphone.

В настоящий момент (я действительно просто начинаю) я могу создать титульную страницу со ссылками на главы.

Мой подход

  • Использование рамки QuickConnect iphone, как слой (возможно, я изменить к PhoneGap) , которая в основном позволяет JavaScript приложений, как iPhone приложений
  • Добавьте EPUB UNZIPed как Ressource к проект
  • Проанализируйте все это с помощью индивидуальной версии epub.JS (где-то на Google-код)

Сейчас я ищу в PageFlip, своего рода проблем графического интерфейса и незначительные юзабилити (сохранить текущую страницу beingviewed)

Я надеюсь, что дать ты идею о как начать

+0

Я использовал epub.js, что я получил ошибку как * XML Parsing Error: не найден элемент * номер строки номера 1 номер столбца 1.can u hel me, предоставляя некоторые ссылки – user969275

+0

Что происходит с вашей картой? вы его где-то публиковали? – yasirmturk

1

Джонатан Уайт (schwa) разработал решение ObjC для анализа и отображения документов ePub на iPhone. Это часть его хранилища с открытым исходным кодом TouchCode.

+0

, пожалуйста, дайте мне ссылку на TouchCode с открытым исходным кодом – Hiren

+0

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

3

есть открытый проект FBReader,

он также поддерживает Iphone

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

+0

или есть также futurepress/epub.js (it читает epub и аннотацию через веб-браузер) – JinSnow

Смежные вопросы