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.
La génération epub nécessite les outils suivants :
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.
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.
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.
Pour faire un fichier au format docbook, il y a plusieurs possibilités :
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.
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.
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.
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.
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.