Формат 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) проанализируйте файл OPF (также XML)
7) теперь вам нужно знать, что такое первая глава книги.
а) каждый элемент <item>
в <manifest>
элементе имеет идентификатор и href. Сохраните их в папке, NSDictionary
где ключ - это идентификатор, а объект - это href.
б) Посмотрите на первое <itemref>
в <spine>
. У него есть атрибут idref, который соответствует одному из идентификаторов в (a). Посмотрите этот идентификатор в, NSDictionary
и вы получите href.
c) это файл первой главы, который должен показать пользователю. Определите полный путь (подсказка: куда бы вы ни распаковали zip-файл в (3) плюс базовый каталог OPF-файла в (6))
8) создать NSURL
using fileURLWithPath:
, где путь - это полный путь из (7c). Загрузите этот запрос, используя UIWebView
созданный вами в (1).
Вам нужно будет реализовать кнопки вперед / назад, смахивания или что-то еще, чтобы пользователи могли переходить от одной главы к другой. Используйте, <spine>
чтобы определить, какой файл показывать следующим - <itemrefs>
в XML они находятся в том порядке, в котором они должны отображаться для читателя.