Reconfigurer l’installation par défaut de PostgreSQL 10

Dans cet article nous reconfigurerons le serveur de base de données PostgreSQL version 10 après une installation faite lors du précédent article. Cette reconfiguration consiste essentiellement en le remplacement du cluster de bases de données installé par défaut. L’objectif est d’obtenir une installation qui convient pour une utilisation dans un environnement de développement sur une machine de bureau.

Cet article fait partie d’une série qui concerne le serveur de bases de données PostgreSQL et son utilisation dans un environnement de développement:

  1. Installation de base de PostgreSQL
  2. Utiliser Postgres pgAdmin 3 pour administrer PostgreSQL
  3. Installer PostgreSQL 10
  4. Cet article: Reconfigurer l’installation par défaut de PostgreSQL 10
  5. Utiliser PostgreSQL 10 dans un environnement de développement
  6. Administrer PostgreSQL avec psql
  7. Postgres pgAdmin 4 : installation et configuration
  8. Postgres pgAdmin 4: Utilisation courante

L’installation par défaut ne convient pas pour un environnement de développement

La première installation de PostgreSQL crée un utilisateur système: postgres. Le cluster créé lors de cette installation appartient à cet utilisateur: fichiers et droits système. Un utilisateur de base de données (BDD) de même nom: postgres, est également créé. Cet utilisateur est le super administrateur du cluster. Un accés local au serveur de base de données est configuré pour l’utilisateur système postgres. Cet accés local permet à postgres de se connecter au serveur sans authentification supplémentaire en tant qu’utilisateur BDD postgres.

Ce comportement convient à une installation sur un serveur réel. En revanche, il rend contraignant son utilisation sur une machine de développement. Le contrôle du fonctionnement du serveur, la modification de la configuration et l’accès local au serveur doivent se faire en passant par l’utilisateur système postgres. Pour une gestion plus simple du serveur, la meilleure solution est de substituer le login de l’utilisateur-développeur à postgres.

Supprimer le cluster PostgreSQL installé par défaut

Il faut arrêter le serveur s’il est démarré et supprimer le cluster créé par défaut: main. Pour cela exécuter:

sudo pg_dropcluster --stop 10 main

Créer un cluster PostgreSQL personnalisé

Si le login du développeur sur sa machine est jdupond (Pour Jean Dupond), le système lui attribue systématiquement un groupe système jdupond et un répertoire personnel: /home/jdupond. Dans /home/jdupond tout est permis pour l’utilisateur. Ceci nous amène à exécuter la commande suivante pour créer le cluster:

sudo pg_createcluster -u jdupond -g jdupond --locale=fr_FR.UTF-8 -l /home/jdupond/pgtest.log -d /home/jdupond/pgtest 10 pgtest

Cela veut dire, créer le cluster pgtest avec les paramètres:

  • Le propriétaire (fichiers, droits et utilisateur BDD d’administration) est jdupond
  • La locale qui détermine le format des données et le mode de recherche est le français de France avec encodage unicode UTF-8.
  • Le fichier de log qui est très utile pour le développement parcequ’il permet de visualiser les requêtes SQL exécutées par l’application est /home/jdupond/pgtest.log
  • Les données sont dans /home/jdupond/pgtest/ ce qui permet leur manipulation directe par l’utilisateur-développeur.

Contrôle du serveur de base de données PostgreSQL

Avec le cluster personnalisé le contrôle du serveur PostgreSQL devient faisable directement par l’utilisateur authentifié. Voici les commandes principales de contrôle avec, en commentaire (après le caractère #), la signification

pg_ctlcluster 10 pgtest start # démarrage
pg_ctlcluster 10 pgtest stop  # arrêt
pg_ctlcluster 10 pgtest status # affichage du statut marche/arrêt
pg_ctlcluster 10 pgtest reload # recharger la configuration
pg_ctlcluster 10 pgtest restart # redémarrer le serveur

Le contrôle inclu même la suppression de ce cluster. Pour cela exécuter:

pg_dropcluster --stop 10 pgtest

Faire attention, toutefois, car la suppression du cluster entraîne la suppression définitive des données qu’il gère.

Gérer les données avec l’utilitaire psql

L’utilitaire en ligne de commande psql est un client de connexion au serveur PostgreSQL. Entre autres choses, il permet à un utilisateur authentifié sur la machine serveur de se connecter à travers le socket Unix du serveur PostgreSQL sans authentification supplémentaire. La connexion se fait avec la commande du shell:

psql -d <NomDeBaseDeDonnees> 

Avec le cluster personnalisé pour jdupond, le super administrateur des bases de données est jdupond. Il peut se connecter en local à la BDD postgres créée par défaut:

psql -d postgres

Une fois connecté, on peut vérifier le statut de super administrateur de jdupond. Pour cela exécuter:

select rolname, rolsuper from pg_roles;

Le résultat de cette requête doit montrer un ‘t‘ (true) pour jdupond dans le champ rolsuper. Le champ rolsuper est un indicateur pour le profile super administrateur. On remarquera également l’absence de l’utilisateur postgres de la liste.

De la même manière il est possible à l’utilisateur-développeur, en exécutant des requêtes SQL, de créer, consulter, modifier ou supprimer tout type d’objets de bases de données: utilisateurs, bases de données, schémas, tables..

 

Share

Installer PostgreSQL 10

La version 10 de PostgreSQL a marqué une rupture dans la politique d’évolution des numéros de versions de ce serveur de bases de données. Cet article a pour objectif de présenter une démarche concrète pour installer cette version du serveur sur un système GNU/Linux Debian ou compatible et d’expliquer les nouveaux enjeux des futures mises à jour de version.

Cet article fait partie d’une série qui concerne le serveur de bases de données PostgreSQL et son utilisation dans un environnement de développement:

  1. Installation de base de PostgreSQL
  2. Utiliser Postgres pgAdmin 3 pour administrer PostgreSQL
  3. Cet article: Installer PostgreSQL 10
  4. Reconfigurer l’installation par défaut de PostgreSQL 10
  5. Utiliser PostgreSQL 10 dans un environnement de développement
  6. Administrer PostgreSQL avec psql
  7. Postgres pgAdmin 4 : installation et configuration
  8. Postgres pgAdmin 4: Utilisation courante

Spécificité de l’installation de PostgreSQL 10

La version 10 de PostgreSQL a constitué une évolution majeur de ce serveur de bases de données objets, relationnelles et noSQL. Elle a marqué également une rupture avec la politique historique de la progression des numéros de version, spécialement en relation avec la compatibilité avec les données antérieures.

Avant la version 10 (jusqu’à la version 9.6 donc), PostgreSQL n’assurait pas la compatibilité des données quand le numéro de version mineur s’incrémente. A titre d’exemple, la version 9.6 ne peut pas et ne doit pas gérer des données créées avec la version 9.5. Ceci explique l’insertion automatique du numéro de version dans sa forme majeur.mineur dans tous les chemins qui concernent l’installation du serveur. Cette insertion permettrait de minimiser le risque de confusion entre les versions binaires vs données. Cela explique également la présence de ce format de numéro de version dans les paquets d’installation des distributions Debian et Ubuntu. Pour visualiser la version disponible pour votre système, exécuter :

sudo apt-get update
apt-cache search postgresql | egrep "^postgresql-[0-9]+(.[0-9])? "

En réponse à cette commande voici le résultat obtenu pour la dernière version stable de Debian (Le 10/03/2018 – Debian 9.3, Stretch):

postgresql-9.6 - object-relational SQL database, version 9.6 server

Cette contrainte nécessitait, si on voudrait passer à une nouvelle version, de migrer les données en passant par un format texte du dump (dump sous forme d’ordres SQL). Or, cette opération est très lente et devient vite contraignante à partir de quelques dizaines de Go de données. Dans ce cas également, un arrêt du service de l’application qui utilise le serveur, et qui peut être excessivement long, doit être envisagé.

A partir de la version 10, PostgreSQL assurera la compatibilité des données entre les versions mineurs. En d’autres termes, aucune migration de données n’est nécessaire entre les versions 10.1 et 10.2 par exemple. Ceci permettra une plus grande flexibilité pour la mise à jour du serveur. Si on sait que le passage entre la première version 9.0 stable et la 10 stable s’est fait en 7 ans, contre 10 mois entre la 9.5 et la 9.6, il est évident que le gain en terme de stabilité du format des données est substantiel. Pour cette raison, le numéro de version inclut par défaut dans les chemins d’installation du serveur ne comporte plus que le premier chiffre. C’est également le cas pour le numéro qui accompagne les paquets d’installation des distributions Debian et Ubuntu.

Versions disponibles pour le système installé

Même avec la dernière version stable du système (Debian 9.3, Stretch ou Ubuntu 16.04 LTS, Xenial au 10/03/2018), on ne dispose pas encore de la version 10 de PostgreSQL. Ceci a été vérifié avec la commande de visualisation des version disponibles exécutée précédemment. En tout cas vous n’aurez toujours pas la totalité des versions stables publiées de ce serveur.

En réalité ceci est vrai quand on ne référence que le dépôt officiel du système. Pour pouvoir accéder à l’ensemble des versions stables publiées, il faut ajouter le dépôt PostgreSQL à la liste des sources de paquets de la machine. Pour cela il faut créer un fichier de configuration de ce dépôt suivant la version installée de l’OS:

sudo vi /etc/apt/sources.list.d/postgresql-sources.list

Le contenu de ce fichier doit être pour un système Debian 9 – Stretch ou Ubuntu 16.04 LTS – Xenial:

deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main

Après avoir enregistré, exécuter dans l’ordre:

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
apt-cache search postgresql | egrep "^postgresql-[0-9]+(.[0-9])? "

La première commande configure la clé de vérification de l’authenticité des paquets. La troisième liste les versions disponibles. En réponse à cette dernière commande, voici le résultat obtenu toujours pour la dernière version stable de Debian:

postgresql-9.6 - object-relational SQL database, version 9.6 server
postgresql-10 - object-relational SQL database, version 10 server
postgresql-9.2 - object-relational SQL database, version 9.2 server
postgresql-9.3 - object-relational SQL database, version 9.3 server
postgresql-9.4 - object-relational SQL database, version 9.4 server
postgresql-9.5 - object-relational SQL database, version 9.5 server

6 versions stables sont disponibles dont la dernière version 10. Remarquer le nouveau format du nom de paquet de la version 10.

Installation

Pour installer la dernière version stable 10, exécuter:

sudo apt-get install postgresql-10

Cette commande installe le serveur PostgreSQL ainsi que les utilitaires d’administration. La commande crée également un cluster de bases de données par défaut (ou instance de serveur) qui s’appelle ‘main’. Les principaux chemins relatifs à cette installation sont:

  • /var/lib/postgresql/10/main/: les fichiers des données.
  • /var/log/postgresql/postgresql-10-main.log: le fichier de log du cluster.
  • /etc/postgresql/10/main/: les fichiers de configuration.
  • /usr/lib/postgresql/10/: fichiers binaires du serveur, exécutables et librairies.

La locale qui est un paramètre important du cluster est positionnée selon la configuration système de la machine. Pour une machine configurée avec la locale français de France sa valeur doit être fr_FR.UTF-8. Ce paramètre conditionne principalement le format de la date, de l’heure et de la recherche textuelle. Pour vérifier cette configuration du système, exécuter:

locale

C’est la variable LANG qui est la plus importante.

Désinstallation

Pour désinstaller la version 10 du serveur PostgreSQL de votre machine, exécuter:

sudo pg_ctlcluster 10 main stop
sudo apt-get remove postgresql-10 postgresql-client-10 postgresql-client-common postgresql-common
sudo apt-get purge postgresql-10 postgresql-client-10 postgresql-client-common postgresql-common

La troisième commande nettoie les données créées par l’installation.

Share

DocBook – Créer le contenu du document

L’objectif de cet article sur DocBook est de montrer comment construire le contenu d’un document conformément aux spécifications de cet outil. Les trois premiers articles de cette série ayant montré la manière de générer les formats HTML et PDF d’un document DocBook, on verra dans cet article comment créer le contenu lui même.

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. Utilisation avancée et amélioration de la présentation en PDF
  4. Cet article: Créer le contenu du document

Présentation

Le fichier du contenu DocBook est un document au format XML qui correspond à la DTD DocBook. Qui dit format XML, dit une hiérarchie d’éléments XML structurée en arbre. Ces éléments sont délimités par des balises XML et la structure doit correspondre exactement à ce qui est défini par la DTD. La DTD (Document  type definition) étant un ensemble de règles qui définissent le contenu du document et sa structure. Un tel document est dit valide et bien formé.

<racine param1="..." param2="..."> 
  <niveau1a> 
    ...... 
  </niveau1a> 
  <niveau1b> 
    <niveau2a> 
      ...... 
      <niveau3a> 
        ...... 
      </niveau3a> 
      <niveau3b param1="..."> 
        ..... 
      </niveau3b> 
      <niveau3c> 
        ...... 
      </niveau3c> 
    </niveau2a> 
    <niveau2b> 
      ...... 
    </niveau2b> 
  </niveau1b> 
</racine>

Dans cet exemple l’élément « racine » est la racine de l’arbre qui constitue le document. Cet arbre contient deux éléments de niveau 1:

  • « niveau1a »: élément final qui ne contient que des données (matérialisées par 6 points) et aucun élément.
  • « niveau1b »: contient deux éléments:
    • « niveau2a »: contient trois éléments:
      • des données et aussi « niveau3a », « niveau3b » et « niveau3c » qui sont des éléments finaux.
    • « niveau2b »: élément final.

On note également qu’un élément peut avoir un nombre quelconque de paramètres, ou ne pas en avoir du tout.

Les règles de la DTD définissent, principalement, les noms possibles des éléments, leurs contenus possibles, les paramètres et leurs valeurs possibles.

L’en-tête et l’élément racine

Un canevas vide d’un document DocBook doit ressembler à ce qui suit:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE article PUBLIC "-//OASIS//DTD docbook XML V5.0b5//EN" "http://www.oasis-open.org/docbook/xml/5.0b5/dtd/docbook.dtd"> 
<article xmlns='http://docbook.org/ns/docbook' version='5.0' xml:lang='fr'> 
</article>
  • La première ligne est la déclaration de la nature XML du document et de l’encodage de son contenu. Dans l’exemple on utilise « UTF-8 » dont l’usage systématique est fortement conseillé.
  • La deuxième ligne référence la DTD utilisée par le document. le tag de cette déclaration doit correspondre au nom de l’élément racine. Dans l’exemple c’est « article » qui est utilisé.
  • La troisième et la quatrième lignes sont les balises d’ouverture et de fermeture de l’élément racine. L’ensemble du contenu du document doit se trouver entre ces deux balises. Les paramètres de cet élément sont:
    • xmlns: la référence du namespace DocBook, utiliser l’URL indiquée.
    • version: la version de DocBook,  actuellement la dernière version est la 5.0
    • xml:lang : Positionne la langue du document. On utilise un code ISO 639-1 à deux lettres pour définir ce paramètre. Il détermine principalement la langue des termes introduits automatiquement par DocBook dans le contenu, comme: « Table des matières » ou « Chapitre ». Il détermine également l’orientation du texte pour les langues qui s’écrivent de droite à gauche comme l’Arabe ou le Persan.

L’élément racine a une importance capitale car il détermine la nature du document. principalement on utilisera: book pour un livre ou article pour un article dont le contenu est plus court. Dans une moindre mesure on utilisera: journal ou newsposting.

Informations à propos du document

C’est l’élément articleinfo (pour un livre il faudra utiliser bookinfo) qui contient ces informations. Il s’agit du titre, des auteurs, des contributeurs, de la date de publication, du résumé et des mots-clé. Dans la pratique, et ceci est valable pour tous les éléments DocBook, on choisit seulement les rubriques estimées utiles pour le document, aucune n’étant obligatoire.

Concrètement pour notre exemple, il faudra insérer dans le canevas vide ce qui suit:

<articleinfo> 
    <title>Comment débuter avec DocBook</title> 
    <authorgroup> 
      <author> 
        <firstname>Meddeb</firstname> 
        <surname>Abdelhamid</surname> 
        <affiliation> 
          <address><email>a@meddeb.net</email></address> 
        </affiliation> 
      </author> 
      <author> 
        <firstname>Dupond</firstname> 
        <surname>Nathalie</surname> 
      </author> 
    </authorgroup> 
    <othercredit> 
      <firstname>Durand</firstname> 
      <surname>Michel</surname> 
      <contrib>Illustration</contrib> 
    </othercredit> 
    <pubdate>25/02/2018</pubdate> 
    <abstract> 
      <para>Présente de manière simplifiée la création du contenu d'un document DocBook.</para> 
      <para>Texte integral à consulter <ulink url="http://tutoriels.meddeb.net/docbook-installation-utilisation-de-base">sur ce le blog de l'un des auteurs</ulink>.</para> 
    </abstract> 
    <keywordset> 
      <keyword>DocBook</keyword> 
      <keyword>Contenu</keyword> 
    </keywordset>
 </articleinfo>

Cela donne le résultat suivant en PDF:

DocBook

Le corps du document

Le corps d’un document DocBook est constitué d’une succession de sections: élément « section ». Chaque section peut contenir un nombre quelconque de sous-sections qui ne sont en réalité, elles-mêmes, que des sections. Une sous-section est donc une section fille contenue dans une section mère. La profondeur d’imbrication ainsi constituée pouvant être quelconque. Par ailleurs, une section (ou sous-section) est composée d’un nombre quelconque de paragraphes: élément « para ».

L’exemple suivant montre un contenu avec deux sections, dont l’une d’entre elles possède plusieurs sous-sections.

<section>
  <title>Titre de la première section</title>
  <para>
    Le corps d'un document DocBook est constitué d'une succession de sections: élément « section ».
    La section suivante sera une section qui possède plusieurs sous-sections.
  </para>
</section>
<section>
<title>Titre de la deuxième section</title>
  <para>
    Chaque section peut contenir un nombre quelconque de sous-sections qui ne sont en réalité, elles-mêmes, que des sections. Une sous-section est donc une section fille contenue dans une section mère.
  </para>
  <section>
    <title>Titre de la sous-section de niveau 1</title>
    <para>
      Chaque section peut contenir un nombre quelconque de sous-sections qui ne sont en réalité, elles-mêmes, que des sections. Une sous-section est donc une section fille contenue dans une section mère.
    </para>
    <section>
      <title>Titre de la sous-section de niveau 2</title>
      <para>
        La profondeur d'imbrication ainsi constituée pouvant être quelconque. 
      </para>
    </section>  
  </section>
</section>

Ce contenu donne le résultat suivant en PDF:

DocBook

Citer un code informatique

Pour citer un code informatique dans un document, on utilise l’élément programlisting. L’exemple suivant illustre cette utilisation:

<programlisting>
  #include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
  int main(int argc, char *argv[])
  {
    printf("Hello world!");
  }
</programlisting>

Ce contenu donne le résultat suivant en PDF:

DocBook

Insérer une citation

Pour insérer une citation, on utilise l’élément quote.

<title>Le logiciel libre</title> 
  <para> 
    <quote lang="en">Steve Jobs, le pionnier qui a rendu la notion de prison informatique appréciée, est mort. Son invention était de priver les crétins de leur liberté.</quote> 
  </para> 
  <para> 
    Richard Stallman, 6 octobre 2011. 
  </para>

Ce contenu donne en PDF:

DocBook

Insérer une note de bas de page

Pour ajouter une notre de bas de page, on utilise l’élément footnote.

<title>Outils de saisie du contenu DocBook</title> 
<para> 
  Pour saisir le contenu d'un document au format DocBook, on peut utiliser l'éditeur de texte Emacs 
  <footnote> 
    <para>Le mode nXML d'emacs permet la validation du contenu en fonction de la DTD et aussi la complétion en cours de saisie des balises DocBook</para> 
  </footnote> 
  qui est un outil puissant et souple. Il est particulièrement adapaté à ce type de tâche. 
</para> 

Ce contenu donne en PDF:

DocBookNoter la numérotation automatique de la note de bas de page et l’insertion du contenu de l’élément footnote en fin de la page.

Share

DocBook – Améliorer la présentation en PDF

L’objectif de cet article est d’améliorer la présentation du document au format PDF produit par 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):

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é:

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:

 

Share