Publi PDF de la map
Exportation de la map vers html
L'exportation de la map vers un unique document html devrait se faire en utilisant un script Ant, lui même réutilisant les scripts xslt de conversion des topics Dita vers les html à destination de flyingsaucer.
Sur une exportation de type livre/manuel il ne suffit cependant pas de concaténer les éléments les un à la suite des autres. Le document se doit de posséder au moins deux parties supplémentaires : une page de garde et une table des matière.
Toute les informations de la page de garde devront être fournit dans les métadonnées de la Ditamap.
La table des matière quand à elle correspond plus ou moins à la Ditamap en elle même.
Note :
Par faute de temps et au vu de la complexité d'un xslt de transformation d'une map vers un document complet, nous avons ici préféré travailler sur une export réalisé par Oxygen sur laquelle nous avons rajouté les éléments qui nous ont semblé utile à la génération d'un pdf avec une mise en page correct.
Spatialisation du document
La principale différence entre le rendu d'un document html via un navigateur et via flyingsaucer est la gestion des sauts de page.
Une partie du problème a déjà était abordé concernant la publication des tâches et des concepts grâce aux propriétés css : «page-break-inside : avoid»
et «-fs-table-paginate : paginate»
.
Pour pouvoir gérer facilement les sauts de page et obtenir un document aéré nous utilisons la propriété «page-break-brefore : always»
devant tout bloc représentant un niveau de la DitaMap. Ces blocs sont repéré dans le html par les classes «nestedN»
où N représente le niveau de profondeur dans l'arbre de la map.
Cependant, afin d'éviter d'obtenir des pages avec un seul titre il est également nécessaire d'écrire une instruction contraire («page-break-before :avoid»
) pour chaque premier élément d'une suite de bloc de niveau supérieur à 1. C'est bloc étant repéré dans le html par la classe «first»
Table des matières et numérotation des pages
Quoique la structure global de la table des matières peut être facilement définit dans le html en suivant celle de la DitaMap il reste à ce moment un élément encore inconnu car dépendant uniquement de la css utilisée : l'association d'un contenu à une page donnée.
Le problème doit donc être résolu dans la css, en faisant donc ici une entorse à la philosophie générale de cette méthode en générant du contenu via le fichier censé représenter la forme.
La numérotation des pages s'effectue très simplement avec la règle CSS3 : «content: "Page " counter(page);»
qui rajoute un contenu à une position de la page que l'on défini.
Pour référencer ce numéro de page dans la table des matière nous avons récupéré une instruction déjà présente dans le css de conversion en pdf d'Optim Office : content : «leader('.') " " target-counter(attr(href),page);»
Numérotation des chapitres
Bien que celle ci puisse également être effectué au niveau de l'xslt, nous avons ici utilisé une solution très simple basé sur les propriété css et la manipulation des compteurs via les propriétés : «counter-increment»
et «counter-reset»
.
La première incrémentation devant systématiquement être précédé d'une initialisation du compteur via la méthode reset cette dernière doit donc forcément être associée à une balise parente de la balise de l'incrémentation.