Создаем книгу в формате 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!
 

Комментарии

Страницы

Аватар пользователя Семен Попов
хорошая статья, только не хватает все-таки инструкции по архивации в Windows
Аватар пользователя Savely
>не хватает все-таки инструкции по архивации в Windows

Неужели у виндового ZIP другие ключи???? :)))

Аватар пользователя Инкогнито
бл*[удалено цензурой]не все ж пингвины ё*[удалено цензурой] [удалено цензурой]
Аватар пользователя Керк
А Семен прав, я тоже не пингвин и эти ключи хз где смотреть, что так сложно написать что-ли?
Аватар пользователя Астапчик Михаил
А Savely прав, у виндового ZIP теже самые ключи, что и приведены в статье. :)

ZIP для [в]индюков где-то здесь:

http://gnuwin32.sourceforge.net/packages/zip.htm

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

Аватар пользователя Керк
Михаил, это все линуксоиды такие? У тебя же простой вопрос спрашивают - как сделать то же самое с архиватором в Винде?

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

Аватар пользователя Астапчик Михаил
С Новым Годом, Керк!

Подробно.

1. Качваем архиватор zip для Windows и устанавливаем. Прямая ссылка(929 килобайт):

http://gnuwin32.sourceforge.net/downlinks/zip.php

Архиватор установится по умолчанию в папку C:\Program Files\GnuWin32\bin

2.Открываем командную строку (в Windows ХР это "пуск - все программы - стандартные - командная строка").

В появившейся консоли устанавливаем путь к исполняемым файлам архиватора zip. Вводим следующую команду:

SET PATH=C:\Program Files\GnuWin32\bin

Установленный путь можно проверить, набрав в командной строке команду zip. Должен быть выведен список всех возможных ключей, то есть параметров этого архиватора.

Ключи или параметры - это те буквы и цифры, что идут после дефиса после команды zip. Каждый символ означает какую-нибудь опцию, Например:

zip -0Xq

здесь опция 0 означает создание только архива без сжатия

3. Допустим, каталог с файлами книги лежит в каталоге C:\myepub. Заходим в командной строке в этот каталог через следующую команду:

cd C:\myepub

4. И опять в консоли выполняем последовательно команды написанные в статье:

zip -0Xq mybook.epub mimetype

zip -Xr9Dq mybook.epub *

В каталоге myepub должен появиться файл mybook.epub.

Усё.

Аватар пользователя Керк
И тебя, Михаил, тоже с Новым годом!

Спасибо за информацию, попробую воспользоваться.

Но все-таки, а нельзя ли еще проще - вот у меня есть архиватор Rar, там есть ряд параметров архивирования. Нет ли среди них тех, которые аналогичны этим командам в консоли?

Аватар пользователя Инкогнито
>а нельзя ли

зачем?

Аватар пользователя Керк
>зачем?

по той же причине, по которой сделали пульт для телевизора

Страницы