Laurent Verdier a demandé sur la liste de diffusion des personnes ressources TICE de l’académie de Bordeaux (http://listes.ac-bordeaux.fr/wws/info/pressour) comment créer une image à partir d’un document de traitement de texte. Il a l’habitude de passer par Open Office, puis Gimp pour faire ces manipulations à la main : enregistrement en postscript avec la fonction ‘imprimer dans un fichier’, puis ouverture dans The Gimp et enregistrement au format d’image souhaité. Cependant, il souhaiterait éviter cette procédure répétitive.
Je proposerai la démarche suivante (qui ne marche que sous Linux, en tout cas dans son intégralité) :
Dans un premier temps, je vais créer une imprimante de conversion en PDF en utilisant l’utilitaire spadmin
d’OOo. Sur ma Fedora Core 3, cet outil n’est pas dans le $PATH
par défaut, j’ai donc dû le chercher avec la commande :
$ locate spadmin
qui m’a permis de le trouver sous le nom /usr/lib/ooo-1.1/program/spadmin.bin
. Il est important que toutes les instances d’Open Office soient fermées pour que la suite fonctionne normalement.
Je clique sur le bouton ‘Nouvelle imprimante’, puis je choisis ‘Connecter un convertisseur PDF’, puis ‘Pilote par défaut’. J’accepte la ligne de commande qui m’est proposée par défaut et je choisis un nom de répertoire pour stocker mes fichiers PDF, par exemple mes_pdf
dans mon répertoire personnel.
Je choisis alors “conversion_pdf” comme nom pour l’imprimante (je pourrais mettre des espaces, mais je préfère toujours l’éviter) et je clique sur ‘Créer’.
J’ai désormais tout ce qu’il faut pour pouvoir convertir n’importe quel document OOo (ou tout document compatible) en PDF, en ligne de commande, avec la commande :
$ ooffice -invisible -pt conversion_pdf fichier_a_convertir.sxw
qui me crée un document appelé fichier_a_convertir.sxw.pdf
dans le répertoire que j’ai choisi.
Il ne me reste plus qu’à convertir ces PDF en images. Ce qui se fait assez facilement avec l’utilitaire convert
de la suite Imagemagick
, qui est installée par défaut sur la plupart des distributions récentes.
$ convert fichier.pdf fichier.png
Me fait un fichier PNG à partir de mon fichier PDF. Ce qui est bien ce que l’on recherchait !
Mais le lecteur tâtillon va me dire que cette méthode ne prend pas en compte les fichiers PDF comportant plusieurs pages et que si je donne un tel fichier à ma commande, l’image produite sera celle de la dernière page de mon document…
Qu’à cela ne tienne :
$ convert fichier.pdf png:fichier.png
Va me générer autant de fichiers PNG qu’il y a de pages dans mon document de départ, en leur donnant un numéro : fichier-1.png, fichier-2.png etc.
C’est déjà bien, mais comme je suis paresseux, je veux automatiser tout cela. Il me suffit donc d’écrire un script shell qui va d’abord créer les fichiers PDF, puis les transformer en images :
#! /bin/bash
# Types de fichiers à convertir
TYPES='*.doc *.rtf *.sxw'
# Répertoire à surveiller
REP_A_SURV=~/a_convertir
# Répertoire contenant les fichiers PDF générés (tel que défini avec spadmin)
REP_PDF=~/mes_pdf
# Répertoire contenant les images
REP_IMG=~/mes_pdf/img
# Je me place dans le répertoire à surveiller, puis je convertis tous les documents dont l'extension est dans $TYPES en PDF
cd $REP_A_SURV
ooffice -invisible -pt conversion_pdf $TYPES
# Je convertis ensuite les documents du répertoire contenant les PDF
cd $REP_PDF
ls *.pdf
|sed 's/((.*).pdf)$/convert "1" png:"2.png"/'
|sh
# Eventuellement, je supprime les fichiers PDF
# rm *.pdf
mv *.png $REP_IMG
La ligne qui commence par ls *.pdf
est un peu plus compliquée : je fais la liste des fichiers portant l’extension .pdf, et pour chacun des fichiers de cette liste, j’applique une fonction de l’éditeur sed
qui crée une commande en concaténant la chaîne “convert”, le nom du fichier pdf (1, qui correspond à la première paire de parenthèses, soit l’ensemble du nom du fichier)) et le nom du fichier PNG à créer : le nom du fichier PDF sans l’extension .pdf et avec l’extension .png (le nom du fichier sans extension est obtenu avec 2, qui correspond à la deuxième paire de parenthèses dans l’expression régulière.
Voilà ! Mes fichiers images sont dans le répertoire que j’ai choisi. Je peux même ajouter une tâche à ma crontab, de façon à ce que cette conversion soit faite toutes les nuits, pour que je n’aie qu’à enregistrer un document dans le répertoire à surveiller pour retrouver les images correspondantes à l’emplacement approprié.
Si je le souhaite, je peux également utiliser les innombrables options de convert
pour choisir la taille des images, par exemple, ou pour leur faire subir n’importe quel traitement.