Epub — открытый формат электронных книг

epub
Приветствую тебя, хабрачеловек! Новогодние празднества подходят к концу, студенты скоро начнут готовиться к сессии, человеки постарше выйдут на работу и жизнь снова пойдет своим чередом. Отдыхая и тунеядствуя дома, я вспомнил свою старую затею — сделать конвертор html текстов в формат электронных книг. В идеале мое программное нечто должно собирать статьи с, например, хабра и оформлять их в виде одной электронной книги с удобным оглавлением и разбивкой на топики. Цель сего действия простая — чтение материала не с монитора, но с электронных чернил (покетбуков/сони ридеров и их собратьев). Интересно? Добро пожаловать под кат!

В качестве формата-носителя был выбран Epub — как верно гласит википедия, это относительно молодой (релиз вышел в 2007 году) открытый формат электронных книг, разработанный Международным форумом по цифровым публикациям IDPF. Файлы такого формата успешно читаются всеми моделями электронных книг, iPad'ами, Android'ами и прочими популярными девайсами. К тому же, как будет показано ниже, epub предельно просто организован программно, что позволяет составлять книги буквально на коленке, вернее — с использованием стандартного набора приложений из блокнота и zip архиватора.

Давай скачаем любую книгу в epub, вооружимся скальпелем и микроскопом и посмотрим, какие ужасающие тайны скрывает от нас этот файл с неведомым расширением .epub.

В первую очередь, откроем .epub книгу в любимом архиваторе (я предпочитаю 7-zip) и воочью убедимся в том, что это обычный zip архив с кучей XML/xHTML или даже PDF файлов, таблицами стилей CSS (да-да), картинками и шрифтами.
epub structure
Обрати внимание, %username%, что c именами файлов в epub нужно быть очень аккуратным — они чувствительны к регистру.
  • mimetype — корневой файл, который, как ты уже догадался, является обычным текстовым файлом с описанием содержимого архива, в данном случае это
    application/epub+zip
  • container.xml — XML файл в каталоге META-INF, содержащий информацию о директории хранения книги, в приведенном на скриншоте примере это OEBC. Каталог OEBC включает в себя все книжные иллюстрации (директория images), шрифты (директория fonts), стилевые настройки (css). Стоит отметить, что организация каталога OEBC может быть и другой, например, не обязательно выделять css файлы в отдельную директорию и не обязательно ее так именовать, в то время как названия файлов mimetype, container.xml и Content.opf не подлежат изменению, по этим стандартным именам эти файлы будут искаться программами-ридерами
  • Content.opf — XML файл, полностью описывающий издание. Здесь хранится вся информация о названии книги, ее авторе, ISBN, издательстве и т.д., здесь хранятся ссылки на все изображения и иллюстрации, здесь хранятся ссылки на обложку книги и все ее главы и разделы
  • toc.ncx — XML оглавление книги
  • наконец, cover.xhtml, section1.xhtml, section2.xhtml — обычные xHTML файлы с текстом книги
Познакомиться со структурой этих XML файлов можно на примере конкретной книги, благо что ничего сложного и нетривиального в ней нет. Детальная информация по epub стандарту приведена на сайте международного форума по цифровым публикациям.

Таким образом, алгоритм простейшей программы по автоматизации составления электронных книг из статей веб-ресурсов таков: загружаем необходимые страницы; парсим их для выявления дат написания постов/статей и непосредственно ценного контента, также вырезаем адреса изображений, скачиваем их и сохраняем в отдельной директории с уникальными именами; составляем XML оглавление на основе названий статей; сохраняем каждую статью в отдельный xHTML документ; прикрепляем заранее подготовленный стилевой файл css; прикрепляем служебные файлы epub формата и создаем zip архив с расширением epub. Все пункты довольно просто алгоритмизируются и выполняются на, например, Python или PHP.

Здесь может возникнуть вполне резонный и справедливый вопрос — а зачем нам вообще использовать какие-то контейнеры для книг, когда почти все электронные читалки отлично понимают html? Ответ я вижу в следующем: главное отличие кучи html файлов, вручную или автоматически сохраненных с сайта, от одной epub книги — прежде всего в удобстве. Это и удобство навигации по оглавлению, и удобство чтения — ведь текст в книге идет в одну информативную колонку, нет сайдбаров и шапок с навигацией и другими малоинформативными помехами. Читать с электронной бумаги чрезвычайно приятно — светящийся монитор быстро утомляет глаза; модели электронных книг с wi-fi на сегодняшний день дороги, да и комфортной работы в интернет все равно не дают. Именно поэтому я для себя вижу выход в том, чтобы читать большие объемы данных с любых электронных чернил в подготовленных epub документах.

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


0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.