Générer du ePub (v 3)

Générer des fichiers ePub (version 3) à partir de docbook

Sommaire

Installation

Pré-requis

Mise en plase

Configuration

Mise en situation

Réalisation d'un fichier source (docbook)

Conversion

Lecture

Docbook permet de générer un grand nombre de formats, y compris du ePub. La mise en oeuvre n'est pas très complexe.

Pour faire un fichier au format ePub, il y a plusieurs possibilités :

  • A partir de Sigil, un éditeur ePub prometteur, écrit en C++. Il génèrera directement un fichier epub. Vous n'aurons donc même pas besoin de générer d'abord du docbook pour avoir votre document final.

  • Avec LibreOffice, à l'aide de l'extension writer2epub pour générer directement du format ePub à partir de l'application.

  • A partir du format docbook et de feuilles de style associées.

Installation

Pré-requis

La génération epub nécessite les outils suivants :

Remarques

Dans notre réalisation, nous utiliserons :

  1. Le processeur XSLT xalan-j. Il fonctionne bien avec docbook-xsl et, écrit en java, il est compatible toutes plateformes. Saxon semble poser quelques petits problèmes lors de l'utilisation de chunk.xsl

  2. Les feuilles de style docbook-xsl. En effet, la toute nouvelle version docbook-xsl-ns ne semble pas fonctionner encore parfaitement avec ePub.

Mise en place

  1. Décompresser les feuilles de style docbook-xsl (ici dans /usr/local/xslt/).

  2. Décompresser le supplément epub v3 dans docbook-xsl : le supplément ajoute les répertoires epub3 et xhtml5.

Configuration

Pour permettre de générer du epub (ou tout autre format), il faut lier les outils les uns aux autres.

java exécute le processeur XSLT qui va appliquer les transformations choisies à l'aide des paramètres. Pour cela nous allons créer un script qui va s'occuper de tout cela.

Remarque

docbook-xsl fournit un script de création epub écrit en python, ce qui oblige à l'installer si ce n'est pas le cas. Cependant, python ne fait rien de plus que ce qu'un shell unix est capable de faire. Pour montrer la simplicité de l'opération, nous réalisons entièrement un script pour ces traitements.

#!/bin/sh
#transformation du format docbook en epub.

SOURCE=${1}
[ ! -f ${SOURCE} ] && echo "Le fichier source n'existe pas !" && exit 1
RACINE=/tmp/epub/
DOCBOOK_ROOT=/usr/local/xslt/docbook-xsl-1.76.1
JAVA_PATH=/usr/local/diablo-jre1.6.0/bin
XALAN_PATH=/usr/local/java/xalan
EPUB_CHECK=/usr/local/java/epubcheck/epubcheck-3.0b3.jar
MIMETYPE="application/epub+zip"
META_DIR="META-INF"
OEBPS_DIR="OEBPS"
SESSION=$(date +'%Y%m%d%H%M%S')$$
SOURCE_PATH=$(dirname ${SOURCE})
TARGET_FILE=$(basename ${SOURCE} | awk -F"." '{print $1}')

[ ! -d ${RACINE} ] && mkdir ${RACINE}
mkdir ${RACINE}/${SESSION}

echo "============= CONVERSION ============="
${JAVA_PATH}/java -jar ${XALAN_PATH}/xalan.jar -in ${SOURCE} -xsl ${DOCBOOK_ROOT}/epub3/chunk.xsl -out ${RACINE}/${SESSION}/test.xml 
[ $? -ne 0 ] && exit 1
# Suppression du fichier vide
# Inutile d'un point de vue purement technique, mais plus propre 
rm -f ${RACINE}/${SESSION}/test.xml
echo "============= COMPLEMENTS ============="
echo "copie de mimetype"
echo "${MIMETYPE}" > ${RACINE}/${SESSION}/mimetype
echo "copie des icônes"
cp -R ${DOCBOOK_ROOT}/images ${RACINE}/${SESSION}/${OEBPS_DIR}/
echo "copie du CSS"
echo "============= COMPRESSION ============="
[ -f ${RACINE}/${SESSION}.epub ] && rm -f ${RACINE}/${SESSION}.epub
cd ${RACINE}/${SESSION}/
# le type MIME ne doit pas être compressé
/usr/local/bin/zip -qX0 ${RACINE}/${SESSION}.epub ./mimetype
# puis nous compressons le reste
/usr/local/bin/zip -qXr9D ${RACINE}/${SESSION}.epub ./

cd ..

echo "============= MISE A DISPOSITION ============="
cp ${RACINE}/${SESSION}.epub ${SOURCE_PATH}/${TARGET_FILE}.epub
[ $? -eq 0 ] && {
rm -f ${RACINE}/${SESSION}.epub
rm -Rf ${RACINE}/${SESSION} 
}

echo "============= CONTROLE DU FICHIER ============="
[ -f ${SOURCE_PATH}/${TARGET_FILE}.epub ] && ${JAVA_PATH}/java -jar ${EPUB_CHECK} ${SOURCE_PATH}/${TARGET_FILE}.epub

Bien entendu, il faudra avoir installé java au bon endroit (ici diablo-jre sous FreeBSD), et copié les fichiers du processeur xalan, les feuilles de style XSL, ainsi qu'installé le programme zip.

Le nom du fichier de sortie est fixe car il ne nous intéresse pas. Les feuilles de styles vont créer automatiquement leur arborescence et leurs fichiers.

Les sources (docbook, shell unix) sont disponibles ici.

Mise en situation

Réalisation d'un fichier source (docbook)

Pour faire un fichier au format docbook, il y a plusieurs possibilités :

  • A partir d'un éditeur de texte (Notepad, Notepad++, etc.), ce qui permet de contrôler avec précision le code mais oblige à taper chaque balise et surtout connaître leur enchaînement.

  • A partir d'un éditeur docbook (XML Mind Editor, etc.) : qui permet de ne pas se préoccuper des balises, gère automatiquement les enchaînements mais nécessite un petit apprentissage du logiciel.

  • A partir d'un éditeur de texte standard qui permet des exports en docbook. OpenOffice Writer le fait très bien.

Exemple avec XXE

Nous prendrons pour exemple un document docbook (cette page web) généré par XXE et convertie en ePub par notre script. L'ensemble des fichiers est disponible ici.

Exemple avec LibreOffice Writer

Il suffit juste d'enregistrer le fichier sous le format docbook (Fichier/Enregistrer sous...) et de traiter notre fichier obtenu par le script unix.

Nous prendrons pour exemple un document au format doc (Word) : L'art de la guerre (Sun Tzu), de l'enregistrer au format docbook et de le convertir pour obtenir un résultat plus que convainquant ici.

Remarque

Dans le cas de cet exemple, c'est l'éditeur XXE (XML Mind Editor) qui sera utilisé pour générer le document au format docbook.

Conversion

Il ne reste plus qu'à appeler le script en passant le fichier à convertir en paramètre.

dbk2epub.sh mon_chemin/mon_fichier

Après quelques instants, on dispose d'un fichier epub dans le même répertoire que le fichier source.

Lecture

Pour visionner le résultat, il y a plusieurs logiciels disponibles. Certains nécessitent une installation sur le système. Le plus simple est d'utiliser Mozilla Firefox avec l'extension EPUBReader.

Si vous disposez d'une tablette numérique, vous devez disposez d'un lecteur par défaut qui prend le format ePub en charge.