В этой статье познакомимся в пошаговом режиме с практикой создания простого экземпляра электронной книги в формате 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. Это уже нужно сделать для проверки ошибок форматирования и вычитки текста на предмет грамматических ошибок.
Михаил АСТАПЧИК
Комментарии
Страницы
Неужели у виндового 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, там есть ряд параметров архивирования. Нет ли среди них тех, которые аналогичны этим командам в консоли?
зачем?
по той же причине, по которой сделали пульт для телевизора
Страницы