Об изготовлении 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, добавив туда ссылки на шрифты. Это делается строчками вида:



    <item id="font2" href="Ubuntu-I.ttf" type="application/x-font-ttf"/>

    в разделе для каждого файла шрифта. Значения параметра 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 должен нормально читаться как на компьютере, так и на книгочиталках.

RSS-материал