DocBook – Améliorer la présentation en PDF

DocBook. Dans le premier article de cette série sur l’utilisation de DocBook, nous avons vu comment produire un document cible au format PDF à partir du contenu initial. Dans cet article on verra comment améliorer la présentation de ce document. Cet article fait partie d’une série qui traite de l’utilisation de DocBook et qu’il convient de lire dans l’ordre indiqué:

  1. Installation et utilisation de base
  2. Utilisation avancée et amélioration de la présentation en HTML
  3. Cet article: Utilisation avancée et amélioration de la présentation en PDF
  4. Créer le contenu du document

Le contenu à transformer

Dans cet article nous allons utiliser un document de contenu prêt à l’emploi: le fichier document.xml_.txt qu’il convient de télécharger et enregistrer sur le disque de votre machine. Pour cela, faites un Click droit sur le lien et choisir « Enregistrer le lien sous.. » dans le menu. Renommer ensuite en document.xml.

Générer le format PDF

Pour générer le document au format PDF exécuter:
xsltproc -o document.fo /usr/share/xml/docbook/stylesheet/nwalsh/fo/docbook.xsl document.xml
fop -pdf document.pdf -fo document.fo
Le document obtenu est composé de 5 pages (cliquer pour agrandir si besoin): [gallery size="medium" ids="705,709,710"] [gallery size="medium" ids="706,712"] Par défaut DocBook:
  • Crée une page pour le titre du livre
  • Une page pour le verso du titre
  • Une page pour la table des matières
  • Insère un saut de page à la fin de chacun des chapitres (2 chapitres dans notre exemple)
  • Le format des page est celui de l’Amérique du nord: US Letter (279 × 216 mm)
Dans la suite, on va améliorer cette présentation.

Améliorer le contenu des chapitres

Comme pour la personnalisation du contenu du document HTML, on doit créer une feuille de style XSL qui sert à modifier certains paramètres en plus d’importer la feuille de style originale. Cette partie s’appelle cutom layer (la couche personnalisée). Pour créer cette feuille de style:
vi pdf_document.xsl
Ensuite saisir et enregistrer:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:import href="/usr/share/xml/docbook/stylesheet/nwalsh/fo/docbook.xsl"/>
  <xsl:param name="paper.type">A4</xsl:param>
  <xsl:param name="page.orientation">portrait</xsl:param>
  <xsl:param name="chapter.autolabel">I</xsl:param>
  <xsl:param name="section.autolabel">1</xsl:param>
  <xsl:param name="section.label.includes.component.label">0</xsl:param>
  <xsl:param name="toc.max.depth">3</xsl:param>
  <xsl:attribute-set name="section.title.level1.properties">
    <xsl:attribute name="font-size">11pt</xsl:attribute>
    <xsl:attribute name="color">#008080</xsl:attribute>
  </xsl:attribute-set>
  <xsl:attribute-set name="section.title.level2.properties">
    <xsl:attribute name="font-size">10pt</xsl:attribute>
    <xsl:attribute name="color">#007070</xsl:attribute>
  </xsl:attribute-set>
  <xsl:attribute-set name="component.title.properties">
    <xsl:attribute name="font-size">14pt</xsl:attribute>
    <xsl:attribute name="color">#009595</xsl:attribute>
    <xsl:attribute name="text-align">center</xsl:attribute>
  </xsl:attribute-set>
</xsl:stylesheet>
Remarquer l’import du fichier XSL origine /usr/share/xml/docbook/stylesheet/nwalsh/fo/docbook.xsl. Avec cet import 9 paramètres sont modifiés:
  1. paper.type: Format du papier positionné à A4 qui est le format européen (297 x 210 mm)
  2. page.orientation : Orientation des pages positionnée à portrait.
  3. Les 4 paramètres suivants sont similaires à ceux modifiés pour le format HTML: numérotation des paragraphes et profondeur de la table des matières.
  4. section.title.level1.properties: Taille et couleur des caractères des titres des paragraphe de niveau 1.
  5. section.title.level2.properties: Taille et couleur des caractères des titres des paragraphe de niveau 2.
  6. component.title.properties: Taille, alignement et couleur des caractères des titres des chapitres.
Ensuite ré-générer le format PDF du document avec les deux commandes successives:
xsltproc -o document.fo pdf_document.xsl document.xml
fop -pdf document.pdf -fo document.fo
Le résultat obtenu pour les deux pages des chapitres, le reste étant inchangé: [gallery columns="2" size="medium" ids="719,720"]

Améliorer la présentation du titre du document

Le titre du document et son sous-titre occupent les deux premières pages:
  • Première page: la couverture du livre (puisqu’il s’agit ici d’un livre)
  • Deuxième page: le verso de la couverture et qui reprend le titre et le sous titre.
L’amélioration qu’on se propose d’effectuer ici est de modifier la position, la couleur et les tailles de caractère de ces titres d’un côté et de supprimer la page de verso qui ne sert pas à grand chose dans le contexte d’un document électronique, d’un autre côté. La démarche pour arriver à cet objectif est légèrement plus complexe que la première modification effectuée. Elle se compose de trois étapes:

1. Copier le modèle par défaut

Pour ne pas modifier les fichiers d’origine de DocBook, il convient de copier le fichier-modèle du titre de document (titlepage) dans le dossier de travail:
cp -p /usr/share/xml/docbook/stylesheet/nwalsh/fo/titlepage.templates.xml document_titlepage.xml
Le nom de fichier cible utilisé ici: document_titlepage.xml, est un nom au choix.

2. Modifier et/ou ajouter les paramètres cibles de la modification

Editer le fichier copie du modèle, par exemple:
vi document_titlepage.xml
Repérer l’endroit qui concerne les titres et sous titre du livre, c’est à dire la portion du fichier entre les lignes:
<t:titlepage t:element="book" t:wrapper="fo:block">
 ....
 ....
</t:titlepage>
Remarquer t:titlepage qui veut dire les pages de titre et t:element=’book’ qui veut dire qu’il s’agit du type livre (pas article ni slide ..). Dans cette portion on s’intéresse d’abord à la partie: <t:titlepage-content t:side=’recto’>, qui est la première page du livre. Modifier comme indiqué ci-après. Les lignes modifiées ou ajoutées sont en gras:
<title
        t:named-template="division.title"
        param:node="ancestor-or-self::book[1]"
        text-align="left" 
        font-size="&hsize2;" 
        space-before="&hsize2space;" 
        color="#009595" 
        margin-top ="60%"
        font-weight="bold"
        font-family="{$title.fontset}"/>
  <subtitle
         text-align="left" 
         font-size="&hsize1;" 
         font-style='italic' 
         font-weight="normal" 
         color="#008080" 
         space-before="&hsize1space;"
         font-family="{$title.fontset}"/>
Ces modifications concernent l’alignement et la taille des caractères des titres et sous-titres qui ont été modifiés en alignement à gauche au lieu de centre et des tailles de caractères plus petites. Elles concernent également les paramètres de couleur et de position verticale (margin-top) qui ont été ajoutés au titre. Les paramètres de style (font-style) et de couleur qui ont été ajoutés au sous-titre. Ensuite on s’intéresse à la partie <t:titlepage-content t:side=’verso’> qui contrôle le contenu de la deuxième page,  ainsi qu’à <t:titlepage-before t:side=’verso’> qui contrôle le saut de page. On supprime tout ce qui se trouve dans ces deux paramètres:
<t:titlepage-content t:side="verso">
</t:titlepage-content>
...
<t:titlepage-before t:side="verso">
</t:titlepage-before>
Ceci élimine cette deuxième page du document.

3. Générer la feuille de style à partir du modèle et l’intégrer au custom layer

Pour générer la feuille de style à partir de ce modèle modifié:
xsltproc --output document_titlepage.xsl /usr/share/xml/docbook/stylesheet/nwalsh/template/titlepage.xsl document_titlepage.xml
Ceci génère le fichier document_titlepage.xsl qu’il convient d’intégrer au custom layer c’est à dire le fichier pdf_document.xsl comme suit:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:import href="/usr/share/xml/docbook/stylesheet/nwalsh/fo/docbook.xsl"/>
  <xsl:import href="document_titlepage.xsl"/>
  <xsl:param name="paper.type">A4</xsl:param>
  .....
  .....
</xsl:stylesheet>
La ligne ajoutée (en gras) importe cette feuille de style créée. Ensuite il convient de ré-générer le document PDF comme précédemment, c’est à dire avec les deux commandes successives:
xsltproc -o document.fo pdf_document.xsl document.xml
fop -pdf document.pdf -fo document.fo
On obtient un document au format PDF avec 4 pages cette fois et dont la présentation a été améliorée: [gallery size="medium" columns="2" ids="740,741"] [gallery size="medium" columns="2" ids="742,743"]  ]]>