Об изготовлении EPUB из DocBook

Тут не так давно я уже упоминал, что из 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, нужно проделать следующее:

  1. Выполнить команду вида:
    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 в текущей директории.

  2. Скопировать откуда-нибудь или написать таблицу стилей 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%;
      }

      (имена шрифтов, конечно, укажите ваши).

  3. Скопировать откуда-нибудь файлы шрифтов (*.ttf) в директорию OPS/.
  4. Исправить файл OPS/content.opf, добавив туда ссылки на шрифты. Это делается строчками вида: 

    в разделе для каждого файла шрифта. Значения параметра id ни на что не влияют и могут быть любыми, лишь бы не повторялись.

  5. Собрать собственно EPUB-файл командами вида
    $ echo "application/epub+zip" > mimetype
    $ zip -0Xq  my-book.epub mimetype
    $ zip -Xr9D my-book.epub META-INF OPS
  6. (Опционально) Проверить получившийся файл при помощи программы epubcheck командой вида
    java -jar epubcheck.jar my-book.epub

Получившийся файл my-book.epub должен нормально читаться как на компьютере, так и на книгочиталках.

Автор: Portnov