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.

Installation

Pré-requis

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

Remarque

Dans l'article, nous utiliserons le processeur XSLT xalan-j. Il fonctionne bien avec docbook-xsl et, écrit en java, il est compatible toutes plateformes.

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 choisis à 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.75.2
JAVA_PATH=/usr/local/diablo-jre1.6.0/bin
XALAN_PATH=/usr/local/java/xalan
EPUB_CHECK=/usr/local/java/epubcheck/epubcheck-1.0.5.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}/epub/docbook.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  -q0X ${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 ============="
${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, 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 :

Exemple avec XXE

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

Exemple avec OpenOffice 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.