Чтение формата ePub
Я пытаюсь разработать приложение для iPhone для чтения файлов ePub. Есть ли какие-либо рамки для разработки этого? Я понятия не имею о том, как читать этот формат файла. Я попытался проанализировать образец файла с расширением.epub с помощью NSXML Parser, но это не удалось.
6 ответов
Формат 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 найдите первый "rootfile" с медиа-типом application/oebps-package+xml
, Это файл OPF для книги.
6) разобрать файл OPF (также XML)
7) теперь вам нужно знать, что такое первая глава книги.
а) каждый <item>
в <manifest>
Элемент имеет идентификатор и ссылку. Храните их в NSDictionary
где ключ - это идентификатор, а объект - это href.
б) посмотри на первое <itemref>
в <spine>
, Он имеет атрибут idref, который соответствует одному из идентификаторов в (a). Посмотрите этот идентификатор в NSDictionary
и вы получите HREF.
в) это файл первой главы, чтобы показать пользователю. Выясните, что такое полный путь (подсказка: куда вы разархивировали zip-файл в (3) плюс базовый каталог OPF-файла в (6))
8) создать NSURL
с помощью fileURLWithPath:
где путь является полным путем из (7c). Загрузите этот запрос, используя UIWebView
Вы создали в (1).
Вам нужно будет внедрить кнопки "вперед / назад" или пролистывания или что-то еще, чтобы пользователи могли переходить из одной главы в другую. Использовать <spine>
выяснить, какой файл показать дальше - <itemrefs>
в XML-порядке они должны отображаться для читателя.
Очевидно, что EPUB является "просто" форматом XML, поэтому, если у вас есть анализатор xml и спецификации, все должно быть в порядке.
Плюс немного туто? Повеселись!
РЕДАКТИРОВАТЬ: вы также можете прочитать некоторый код здесь, это для генерации epub, а не для чтения их, но код может быть полезным.
РЕДАКТИРОВАТЬ еще раз: и увидеть ссылки на соответствующий вопрос в правой боковой панели, есть некоторые ссылки в ответах на бесплатное приложение для чтения электронных книг, которые поддерживают ePub.
РЕДАКТИРОВАТЬ 3: Вы должны добавить комментарий, когда вы редактируете свой вопрос, чтобы люди, которые отвечают на вас, могли продолжить обсуждение (если вы не комментируете, мы не заметили ваше изменение).
Итак, синтаксический анализ не удался, потому что вы не читали спецификацию или связанные с ней вопросы по переполнению стека... *.epub - это заархивированная папка, содержащая файлы XML, а не обычный xml.
Я прочитал этот урок один раз (требуется бесплатная регистрация, извините), и он дал мне отличное представление о ePub. учебник deverloperWorks здесь
Я настоятельно рекомендую вам взглянуть на некоторые библиотеки обработки XML. Если вы просто хотите получить конкретную информацию из XML-файла, вы можете выбрать правильную стратегию синтаксического анализа.
Есть проект с открытым исходным кодом fbreader,
это также поддерживает iphone
Я играю вокруг, чтобы создать epub-framework для приложений для iphone.
На данный момент (я действительно только начинаю) я могу создать титульную страницу со ссылками на главы.
Мой подход
- Используйте фреймворк для быстрого соединения iphone в качестве слоя (возможно, я перехожу на телефонный разрыв), который в основном позволяет использовать приложения javascript в качестве приложений для iphone
- Добавьте разархивированный EPUB в качестве ресурса в проект
- Разобрать все это с помощью настроенной версии epub.js (где-то в google-коде)
Прямо сейчас я изучаю pageflip, некоторые графические интерфейсы и незначительные проблемы с юзабилити (за исключением текущей просматриваемой страницы)
Я надеюсь, что это даст вам представление о том, как начать
Джонатан Уайт (schwa) разработал решение ObjC для анализа и отображения документов ePub на iPhone. Это часть его хранилища с открытым исходным кодом TouchCode.