В этой статье познакомимся в пошаговом режиме с практикой создания простого экземпляра электронной книги в формате 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. Это уже нужно сделать для проверки ошибок форматирования и вычитки текста на предмет грамматических ошибок.
Михаил АСТАПЧИК
Комментарии
Страницы
Я и сейчас способен воспринимать новое, если оно имеет смысл.
>>Лучше бы молча и самому разобраться, какие мобилы были 10 лет назад, и вообще когда и для чего появился формат EPUB.
К сожалению, та мобила, что была у меня 10 лет назад, сдохла. Был вынужден купить КПК с нах ненужной якобы камерой. Видал и андроиды и прочие достижения. НИГДЕ не сталкивался с этим форматом. Почитал, перед тем, как писать первый постинг тут: http://alglib.blogspot.com/2011/02/epub_02.html. У этого автора тоже старческое ворчание?
Потрясающе. Это надо же. А Соня и не знала, что кому-то, кроме русских, нужен FB2. Amazon Kindle, Barnes&Nobles Nook and Sony devices do not support FictionBook directly. Наворовали? Конвертируйтесь!
>>Почитал, перед тем, как писать первый постинг тут: http://alglib.blogspot.com/2011/02/epub_02.html. У этого автора тоже старческое ворчание?
И даже очень. Вот были люди в наше время. Могучее, лихое племя. И тэ дэ. Автор там проливает соплю над прекрасным старым форматом DOC. Бугага. Уж сколько доки ругали, и сколько этих доков и эртээфов было со всеми ихними несовместимостями. Сколько Адобя выкореживалась с пэдээфами, пока они не стандартизировались. Короче, правило простое: умиление старым и неприязнь к новому есть признак ослабления памяти и развития общей импотенции.
Да, это давно отмечено, что ослабление высшей нервной деятельности способствует повышению половой активности и улучшению потенции.
Честно сказать не вижу смысла в этой статье , может на момент написания она и была актуальна , но сейчас есть прекрасная программа для решения данной задачи . Не делаю рекламу , не буду писать ее название , Google Вам в помощь . Да и объяснение слегка непонятно . А ведь сказано : Если не можешь объяснить что-то просто, значит сам не слишком хорошо это понимаешь. ( Альберт Эйнштейн ).
Страницы