Создаем книгу в формате EPUB

В этой статье познакомимся в пошаговом режиме с практикой создания простого экземпляра электронной книги в формате EPUB.


Скориновские традиции

На страницах "КВ" темам о цифровых книгах и оцифровке изданий, как могли заметить постоянные читатели, уделяется много внимания. Возможно, это в какой-то степени неосознанная дань истории. Ведь именно у нас в Беларуси когда-то родился первопечатник и основатель восточнославянского книгопечатания Франциск Скорина.

В этом году мы уже прошли общее знакомство с форматом электронных книг EPUB. На страницах газеты мы также увидели возможности некоторых программных читалок этого формата для платформы "Андроид". А эта статья является практическим примером пошагового создания самой простой версии книги в формате EPUB без защиты контента.

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


Инструменты и навыки

EPUB - это открытый стандарт электронных книг, использующий открытые текстовые стандарты XML, CSS и XHTML. Соответственно главным инструментом для работы у нас будет простой редактор текста. Подойдёт даже "Блокнот" Windows с поддержкой сохранения в UTF-8.

Ещё понадобится любой графический растровый редактор для создания и редактирования картинок. В зависимости от художественных способностей может подойти и простой Paint Windows.

Также понадобится утилита архивирования zip. Например, в Linux-системах она имеется по умолчанию.

Для тестирования подойдёт браузер Firefox и расширение EpubReader. Для полного тестирования нам понадобится интерпретатор Java версии не ниже 1.5 и утилита Adobe EpubCheck (code.google.com/p/epubcheck).

Из необходимых знаний нужно иметь хоть небольшие навыки работы с HTML. Думаю, для всех, кто хотя бы баловался созданием html-страничек, проблемы с форматом не будет.


Общая структура

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

То же требуется и для электронного варианта, начиная с обложки и заканчивая содержанием. В электронной книге всё это делается в виде файлов xml, html, css и файлов изображений. А собственно сама книга представляет собой zip-архив всех этих файлов. Вот все эти файлы по порядку и создадим.


Делай раз. Содержание

В основном содержание электронной книги EPUB делается в размётке XHTML. Также в формате EPUB может использоваться стандарт кодирования книг для людей со слабым зрением DTBook и формат PDF. Но мы будем использовать только XHTML.

Размётка текста XHTML - это строгий HTML без всяких вольностей. В файлах XHTML должно быть только логическое форматирование, все теги должны быть закрытым. Кодировка текста - UTF8. А форматирование визуального вида выносится в файл каскадных таблиц стилей CSS.

Приступая к деланию книги, создадим каталог проекта, который будет корневым для нашей электронной книги. В этом корневом каталоге создадим папку OPS, в которой и расположим файлы содержания книги. Для начала создадим здесь файл содержания content.html. Это обычный xhtml-файл с привычными для веб-кодеров тегами.

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <title>Моя первая книга</title>
 <link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body>
 <h1>Моя первая книга</h1>
 <!- Какой-нибудь контент ->
</body>
</html>


Делай два. Обложка

В качестве обложки создадим файл cover.html в этой же папке OPS. Здесь напишем то же, что и пишут на обложках обычных книг - название книги. Для экономии места в газете файл cover.html сделаем просто из копии content.html.

Дополнительно в этом же каталоге в растровом редакторе картинок подготовим графическую обложку в виде файла изображения cover.jpg. Сейчас модным размером обложки-изображения в электронных книгах является 600х800. Эта картинка-обложка будет показываться, например, в виде иконки на виртуальных полках в программах-читалках, что очень удобно.


Делай три. Форматирование

Форматирование текста - шрифт, размер и всё такое - нужно вынести в отдельный файл CSS. Поэтому создаём файл style.css опять же в каталоге OPS. Здесь для примера напишем стиль заголовка h1. Сделаем его синим, записав в этот файл строчку:

h1 {color: Blue}


Делай четыре. Метаинформация

Для формата EPUB необходим важный специальный файл OPF. Это XML-файл, в котором содержится техническая информация о нашей книге: общие сведения об издании, перечисление всех входящих в данную книгу файлов, а также "переплёт".

Обычно этот файл называют content.opf. Создадим его. А ниже приведём необходимые комментарии.

<?xml version="1.0" encoding="UTF-8"?>
<package xmlns="http://www.idpf.org/2007/opf"
  unique-identifier="BookId" version="2.0">
 <metadata xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:dcterms="http://purl.org/dc/terms/"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:opf="http://www.idpf.org/2007/opf"> 
  <dc:title>Моя первая книга</dc:title>
  <dc:creator>Me</dc:creator>
  <dc:identifier id="BookId">mybook123</dc:identifier>
  <dc:date>2010-12-19</dc:date>
  <meta name="cover" content="cover-image"/>
 </metadata>
 <manifest>
  <item id="toc" href="toc.ncx"
   media-type="application/x-dtbncx+xml" />
  <item id="cover-image" href="cover.jpg"
   media-type="image/jpeg" />
  <item id="cover" href="cover.html"
   media-type="application/xhtml+xml" />
  <item id="style" href="style.css"
   media-type="text/css" />
  <item id="content" href="content.html"
   media-type="application/xhtml+xml" />
 </manifest>
 <spine toc="toc">
  <itemref idref="cover" linear="no" />
  <itemref idref="content" />
 </spine>
</package>

Файл content.opf состоит из нескольких разделов. Раздел metadata содержит выходные данные издания. Обязательными являются название (dc:title) и идентификатор (dc:identifier). Но сюда включают информацию об авторе, дате выпуска, аннотацию, язык, издателя, информацию об авторских правах.

Заметим, что значение атрибута id элемента dc:identifier должно совпадать с атрибутом unique-identifier элемента. В качестве самого элемента dc:identifier издатели, как правило, указывают ISBN или каталожный номер Библиотеки Конгресса. Но можно использовать URL или идентификатор, сгенерированный случайным образом.

Раздел manifest содержит список всех файлов-ресурсов нашей конкретной книги. Каждый файл, который входит в цифровую книгу, должен быть указан в манифесте кроме самого файла OPF.

Раздел spine - это так называемый переплет нашей книги. Здесь указан порядок и последовательность чтения файлов содержания сверху-вниз для программ-читалок. Но это ещё не оглавление книги.

В качестве ссылок на файлы, как видите, в разделе spine используются не прямые ссылки на файл, а идентификаторы этих файлов из раздела manifest.


Делай пять. Оглавление

Оглавление в книге формата EPUB делается в виде отдельного файла, имеющего обычно название toc.nxc. Расположим его опять-таки в каталоге OPS. Структура этого файла хотя и громоздкая, но суть довольно проста.

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE ncx PUBLIC "-//NISO//DTD ncx 2005-1//EN"
 "http://www.daisy.org/z3986/2005/ncx-2005-1.dtd">
<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/"
 version="2005-1">
 <head>
  <meta name="dtb:uid" content="mybook123"/>
  <meta name="dtb:depth" content="1"/>
  <meta name="dtb:totalPageCount" content="0"/>
  <meta name="dtb:maxPageNumber" content="0"/>
 </head>
 <docTitle>
  <text>Моя первая книга</text>
 </docTitle>
 <navMap>
  <navPoint id="point-1" playOrder="1">
   <navLabel>
    <text>Обложка</text>
   </navLabel>
   <content src="cover.html"/>
  </navPoint>
  <navPoint id="point-2" playOrder="2">
   <navLabel>
    <text>Содержание</text>
   </navLabel>
   <content src="content.html"/>
  </navPoint>
 </navMap>
</ncx>

В заголовке head элемент uid должен соответствовать идентификатору dc:identifier файла OPF. Элемент depth: отражает уровень иерархии оглавления. В данном примере уровень всего один, и у нас это значение равно 1.

Содержание элемента docTitle/text должно совпадать со значением dc:title OPF.

Раздел navMap определяет оглавление книги. В этом разделе каждый элемент оглавления navPoint содержит атрибут порядкового номера playOrder, а также элементы названий и ссылку на физический файл.


Делай шесть. Дополнительные данные

Итак, все файлы содержания книги мы сделали. Осталось подготовить два файла, необходимых непосредственно формату EPUB.

Сначала в корневом каталоге нашего проекта сделаем файл с названием mimetype без всякого расширения. Содержимое этого файла - всего одна строчка, и файл mimetype не должен содержать никаких символов перевода строки или возврата каретки:

application/epub+zip

Потом сделаем папку META-INF, содержащей файл с именем container.xml. Этот файл всего лишь указывает, где находится наш главный файл метаданных книги content.opf.

<?xml version="1.0"?>
<container version="1.0"
  xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
 <rootfiles>
  <rootfile full-path="OPS/content.opf"
   media-type="application/oebps-package+xml" />
 </rootfiles>
</container>


Делай семь. Сборка

Всё, все необходимые файлы мы сделали. У нас в каталоге проекта должны находиться:

  • файл mimetype
  • каталог META-INF с файлом container.xml
  • и каталог OPS с файлами content.html, cover.html, style.css, cover.jpg, content.opf и toc.ncx.

Непосредственно сам файл с расширением epup является zip-архивом всех этих файлов. Но архивировать надо по особенному. Во-первых, нельзя просто упаковать корневую папку, и сам архив ZIP не должен быть зашифрован. Во-вторых, файл mimetype в архиве должен быть не сжат.

Процесс архивирования в zip-архив я даю для системы Linux, где имеется консольная команда zip. Заходим в консоли в наш корневой каталог проекта и делаем следующую команду:

zip -0Xq mybook.epub mimetype

После чего в появившийся файл mybook.epub добавляем все остальные файлы нашего проекта:

zip -Xr9Dq mybook.epub *

Вот практически и всё, теперь мы имеем полностью готовую книгу в виде файла mybook.epub


Тестирование

Полученную книгу нужно проверить. Для этого есть специальная утилита Adobe EpubCheck. Это кроссплатформенная консольная java-утилита. Она запускается следующим образом из командной строки:

java -jar /path-to/epubcheck.jar mybook.epub

Если в файле электронной книги имеются ошибки синтаксиса, то она выведет их описание, а также файл и строку, в которой находится эта ошибка.

Если же ошибок самого формата EPUB нет, то можно просмотреть полученную книгу в браузере Firefox через замечательное расширение EpubReader. Это уже нужно сделать для проверки ошибок форматирования и вычитки текста на предмет грамматических ошибок.

Михаил АСТАПЧИК

Версия для печатиВерсия для печати

Номер: 

50 за 2010 год

Рубрика: 

На заметку
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Комментарии

Страницы

Аватар пользователя Виктор
Пожалуй, лучшая статья про создание книг в формате ePub. Спасибо автору.
Аватар пользователя Эдуард
Перечитал за последние лет десять гору книг в электронном виде на мобильном телефоне, ни разу не видал этого формата.
Аватар пользователя Инкогнито
Эдуард, это возраст. Лет 10 назад на этом форуме вы были мягче, гибче, способнее воспринимать новое, чем теперь. Старческое ворчание. Лучше бы молча и самому разобраться, какие мобилы были 10 лет назад, и вообще когда и для чего появился формат EPUB.
Аватар пользователя Эдуард
>>Эдуард, это возраст. Лет 10 назад на этом форуме вы были мягче, гибче, способнее воспринимать новое, чем теперь. Старческое ворчание.

Я и сейчас способен воспринимать новое, если оно имеет смысл.

>>Лучше бы молча и самому разобраться, какие мобилы были 10 лет назад, и вообще когда и для чего появился формат EPUB.

К сожалению, та мобила, что была у меня 10 лет назад, сдохла. Был вынужден купить КПК с нах ненужной якобы камерой. Видал и андроиды и прочие достижения. НИГДЕ не сталкивался с этим форматом. Почитал, перед тем, как писать первый постинг тут: http://alglib.blogspot.com/2011/02/epub_02.html. У этого автора тоже старческое ворчание?

Аватар пользователя Эдуард
Добавлю. Как уже говорил, книга в классическом представлении предполагает линейное развитие сюжета. Я не говорю о справочниках и словарях, это частный случай. Так что в моем понимании, проще использовать фб2, либо, поддерживаемый всеми хтмл, если есть желание навставлять в текст свистоперделок.
Аватар пользователя Инкогнито
>>НИГДЕ не сталкивался с этим форматом

Потрясающе. Это надо же. А Соня и не знала, что кому-то, кроме русских, нужен FB2. Amazon Kindle, Barnes&Nobles Nook and Sony devices do not support FictionBook directly. Наворовали? Конвертируйтесь!

>>Почитал, перед тем, как писать первый постинг тут: http://alglib.blogspot.com/2011/02/epub_02.html. У этого автора тоже старческое ворчание?

И даже очень. Вот были люди в наше время. Могучее, лихое племя. И тэ дэ. Автор там проливает соплю над прекрасным старым форматом DOC. Бугага. Уж сколько доки ругали, и сколько этих доков и эртээфов было со всеми ихними несовместимостями. Сколько Адобя выкореживалась с пэдээфами, пока они не стандартизировались. Короче, правило простое: умиление старым и неприязнь к новому есть признак ослабления памяти и развития общей импотенции.

Аватар пользователя Эдуард
>>ослабления памяти и развития общей импотенции.

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

Аватар пользователя CapDan

      Честно сказать не вижу смысла в этой статье , может на момент написания она и была актуальна , но сейчас есть прекрасная программа для решения данной задачи . Не делаю рекламу , не буду писать ее название , Google Вам в помощь . Да и объяснение слегка непонятно . А ведь сказано : Если не можешь объяснить что-то просто, значит сам не слишком хорошо это понимаешь. ( Альберт Эйнштейн ). 

 

Страницы