Читання формату ePub


102

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

Відповіді:


304

Формат 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>елементі має id та href. Зберігайте їх у an, NSDictionaryде ключовим є ідентифікатор, а об'єктом є href.

б) Подивіться на перше <itemref>в <spine>. Він має атрибут idref, який відповідає одному з ідентифікаторів у (a). Подивіться на цей id в NSDictionaryі ви отримаєте href.

в) це файл першої глави для показу користувачеві. Дізнайтеся, що таке повний шлях (підказка: там, де ви розпакували zip-файл у (3) плюс базовий каталог файлу OPF в (6))

8) створити за NSURLдопомогою fileURLWithPath:, де шлях - це повний шлях від (7c). Завантажте цей запит, використовуючи UIWebViewстворений вами (1).

Вам потрібно буде реалізовувати кнопки вперед / назад або пальці або щось подібне, щоб користувачі могли переходити з однієї глави в іншу. Використовуйте для того, <spine>щоб визначити, який файл буде показано далі - <itemrefs>XML у тому порядку, у якому вони повинні з’явитися читачеві.


дійсно хороший підручник ..! крутий чувак..! я витратив багато часу на таку демонстрацію
Paresh Thakor

16
прикро, що за цю відповідь можна надати лише 1 пропозицію
Тім Макнамара

Чудова відповідь. Це стає поширеним запитанням :)
Нік Гібсон

9
Дякую багато Euan ... Для всіх тих, хто ще шукає рішення, я створив зразок і розмістив у ideveloperworld.blogspot.com/2011/02/epub-reader.html
MobX

Зауважте, що немає особливої ​​необхідності "розпаковувати його десь", якщо ви маєте на увазі створення окремих нових файлів, які є розпакованим вмістом архіву ZIP. ZIP - це досить простий формат, і створювати бібліотеки, які дають вам потоки введення для різних файлів в архіві, які читаються безпосередньо з архіву, на ходу, слід досить легко, якщо таких бібліотек у вас ще немає. Одним із прикладів такої бібліотеки з повним доступним джерелом є RubyZip ( rubyzip.sourceforge.net ).
cjs

21

Мабуть, EPUB "просто" формат XML, тому якщо у вас є аналізатор xml і специфікація, це повинно бути добре.

Плюс трохи туто ? Веселіться!

EDIT: ви також можете прочитати тут якийсь код , це для створення epub, а не для читання, але код може бути корисним.

Знову редагуйте: І дивіться посилання на відповідне запитання в правій бічній панелі, є деякі посилання у відповідях на безкоштовний читач книг, який підтримує ePub.


РЕДАКТІВ 3: Ви повинні додавати коментар, коли ви редагуєте своє запитання, щоб люди, які відповідають вам, могли продовжити обговорення (якщо ви не коментуєте, ми не помітили вашої редакції).

Отже, розбір не вдається, оскільки ви не прочитали специфікації або пов'язаних питань щодо переповнення стека ... * .epub файл - це папка з блискавками, що містить XML-файли, а не прості xml.


6

Я прочитав цей підручник один раз (потрібна безкоштовна реєстрація, вибачте), і це дало мені чудове ознайомлення з ePub. тут навчальний посібник deverloperWorks

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


Цей підручник є чудовим і його написав той, хто є автором багатьох стандартних доступних інструментів ePub з відкритим кодом. Це швидке зчитування та дає ідеальне робоче введення у формат ePub.
Брайан Москау


2

Я граю навколо, щоб створити рамку epub для додатків iphone.

На даний момент (я дійсно просто починаю) я можу генерувати титульну сторінку із посиланнями на глави.

Мій підхід такий

  • Використовуйте швидкий підключення iphone Framework як шар (можливо, я переходжу до фонегапу), що в основному дозволяє використовувати програми javascript як програми для iphone
  • Додайте UNZIPed epub як ресурс до проекту
  • Проаналізуйте всю справу за допомогою спеціалізованої версії epub.js (десь на google-коді)

Зараз я переглядаю перегортання сторінки, якісь гуї та незначні проблеми у користуванні (збережіть перегляд поточної сторінки)

Я сподіваюся, що дайте вам уявлення про те, як почати


я використав epub.js, що я отримав помилку як помилка розбору XML: жоден елемент не знайшов місце рядка номер1 стовпець номер 1.може допомогти мені, надавши кілька посилань
user969275

що з вашими рамками? ви його десь опублікували?
yasirmturk

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.