Тут не так давно я уже упоминал, что из DocBook можно делать, в том числе, и EPUB. Однако процесс не вполне тривиальный; мне кажется, его стоит расписать несколько подробнее.
Вот тут в IBM DeveloperWorks описан такой процесс. Однако изготовленный по этому рецепту файл будет обладать парой недостатков:
- Это будет файл устаревшего формата «Open Epub»;
- В нём не будет внедрённых шрифтов.
Такой файл благополучно открывается чем-нибудь типа Okular. Однако AdobeViewer на читалках типа PocketBook 301+ в таких файлах показывает русские буквы вопросиками. Это происходит из-за того, что встроенного шрифта в файле нет, AdobeViewer пытается использовать шрифт по умолчанию, а в нём нет русских букв.
Так что будем делать «более правильный» EPUB. «Нормальный» EPUB-файл — это zip-архив, в котором содержатся следующие вещи:
- Файл с именем «mimetype»; этот файл обязательно должен идти первым в архиве, не должен быть сжат, и его содержимым должна быть строка «application/epub+zip» (без символа новой строки в конце).
- Директория с именем «META-INF»; в ней — файл container.xml. Примеры содержимого этого файла можно нагуглить, главное что в нём должно быть прописано — ссылка на файл contents.opf (OPS/contents.opf).
- Директория с именем «OPS»; В ней — HTML-файлы с собственно содержимым книги, картинки к ним, шрифты (файлы *.ttf), и файл contents.opf и таблица стилей CSS.
Для того, чтобы сделать такой файл из имеющегося DocBook-файла book.xml, нужно проделать следующее:
- Выполнить команду вида:
xsltproc --stringparam epub.oebps.dir OPS/ --stringparam epub.embedded.font Ubuntu-R.ttf --stringparam html.stylesheet style.css /usr/share/xml/docbook/stylesheet/docbook-xsl/epub/docbook.xsl book.xml
Здесь вместо «Ubuntu-R.ttf» можете указать какое-нибудь другое имя шрифтового файла. Путь к epub/docbook.xsl на вашей системе может быть и другим, подставьте ваш. Эта команда создаст директори META-INF и OPS в текущей директории.
- Скопировать откуда-нибудь или написать таблицу стилей OPS/style.css. Стили можно настраивать на ваш вкус, но надо учитывать следующее:
- Если вы предполагаете, что документ будут читать на E-Ink устройстве, то не делайте слишком сложную цветовую гамму; экран мало того что чёрно-белый, так ещё не очень хорошо показывает тонкие оттенки. Идеально было бы обойтись 4мя или 8ю оттенками серого (включая чёрный и белый).
- В таблице должны быть правила, указывающие конкретные шрифты, наподобие следующих:
@font-face { font-family: "Ubuntu"; font-style: normal; font-weight: normal; src: url(Ubuntu-R.ttf) }
@font-face {
font-family: «Ubuntu»;
font-style: normal;
font-weight: bold;
src: url(Ubuntu-B.ttf)
}@font-face {
font-family: «Ubuntu»;
font-style: italic;
font-weight: normal;
src: url(Ubuntu-I.ttf)
}@font-face {
font-family: «Ubuntu»;
font-style: italic;
font-weight: bold;
src: url(Ubuntu-BI.ttf)
}@font-face {
font-family: «DroidSansMono», monospace;
font-style: normal;
font-weight: normal;
src: url(DroidSansMono.ttf)
}pre {
white-space: pre-wrap;
font-family: «DroidSansMono», monospace;
font-size: 85%;
}(имена шрифтов, конечно, укажите ваши).
- Скопировать откуда-нибудь файлы шрифтов (*.ttf) в директорию OPS/.
- Исправить файл OPS/content.opf, добавив туда ссылки на шрифты. Это делается строчками вида:
в разделе для каждого файла шрифта. Значения параметра id ни на что не влияют и могут быть любыми, лишь бы не повторялись.
- Собрать собственно EPUB-файл командами вида
$ echo "application/epub+zip" > mimetype $ zip -0Xq my-book.epub mimetype $ zip -Xr9D my-book.epub META-INF OPS
- (Опционально) Проверить получившийся файл при помощи программы epubcheck командой вида
java -jar epubcheck.jar my-book.epub
Получившийся файл my-book.epub должен нормально читаться как на компьютере, так и на книгочиталках.
Автор: Portnov