Il est dommage que ceux qui diffusent des fichiers PDF ne fassent pas plus souvent usage des méta-données. Un système d'indexation bien conçu accordera plus de poids à un mot clé inclus dans ces méta-données, ou plus généralement à tout ce qui figure dans le titre ou dans le résumé, plutôt qu'à des mots enfouis dans le corps du texte.
Lorsqu'il s'agit en plus de documents scannés stockés sous-forme d'image, c'est souvent la seule manière d'intégrer des informations indexables.
Sous Linux, la seule manière que je connaissais d'ajouter ou de modifier des méta-données à un fichier existant était d'utiliser pdftk, en ligne de commande, ce qui n'était pas particulièrement convivial1. Depuis peu j'ai appris l'existence d'un logiciel en java et en mode graphique, jpdftweak, ce qui est nettement plus facile.
Je commence quand même par la procédure avec pdftk, ça peut encore servir.
Extraire les méta-données existantes:
gv@fantasio:~$ pdftk test.pdf dumpdata output metadata.txt gv@fantasio:~$ cat metadata.txt InfoKey: Title InfoValue: test.pdf InfoKey: Producer InfoValue: ImageMagick 6.3.7 08/07/09 Q16 http://www.imagemagick.org InfoKey: ModDate InfoValue: D:20101010160046 InfoKey: CreationDate InfoValue: D:20101010160046 NumberOfPages: 1
Il s'agit ici d'un PDF mono-page obtenu en convertissant une image avec Image Magick. Noter au passage la syntaxe tordue de pdftk qui impose de placer en premier lieu le fichier source, puis une commande (sans tiret ), puis un mot clé output suivi du nom de fichier où les enregistrer. Pour les afficher dans le terminal, on peut remplacer le nom de fichier par un tiret2.
Pour les éditer directement, on peut faire
gv@fantasio:~$ pdftk test.pdf dumpdata output - | vi -
On peut éliminer du fichier en question les valeurs qu'on ne souhaite pas modifier, elles resteront inchangées. Ici, on insère un titre avec des caractères accentués:
gv@fantasio:~$ cat metadata.txt InfoKey: Title InfoValue: Un titre avec des accents: éèà
Puis on crée un nouveau PDF de cette manière:
gv@fantasio:~$ pdftk test.pdf update_info metadata.txt output test2.pdf
...et on constate que les caractères accentués ne s'affichent pas correctement .
Il faut en fait les encoder de la même manière qu'en html. Heureusement, une conversion ultérieure est posible gràce à recode:
gv@fantasio:~$ recode utf8..h0 metadata.txt gv@fantasio:~$ cat metadata.txt InfoKey: Title InfoValue: Un titre avec des accents: éèà
Bref, ça n'est pas de tout repos.
Signalons enfin que lorsqu'un PDF ne contient aucune métadonnée (ce qui est quand même assez rare), pdftk ne peut en ajouter:
gv@fantasio:~$ pdftk test.pdf update_info metadata.txt output outputfile.pdf Internal Error: no Info dictionary found, so no Info added. Warning: no Info added to output PDF.
Heureusement, jpdftweak propose une manière plus intuitive d'agir sur un fichier PDF:
On peut également ajouter un champs prédéfini:
Comme pour pdftk, il est cependant nécessaire d'enregistrer les changements dans un autre fichier, le fichier ouvert n'étant pas modifiable.
Je n'ai pas encore exploré toutes les possibilités de jpdftweak; il n'est pas inclus dans les dépôts de la Debian, j'ai installé le jar dans /usr/local/lib/jpdftweak/ et, dans /usr/local/bin, ce petit script:
#!/bin/bash /usr/bin/java -jar /usr/local/lib/jpdftweak/jpdftweak.jar $*
Il semble également utilisable en ligne de commande, comme le montre la sortie assez bavarde produite par un «jpdftweak -help» (pas «--help», encore un écart de langage ;)), mais je n'ai pas réussi à en tirer quoique ce soit de cette manière...
Mais c'est une critique assez mineure. Pour le reste, c'est quand même un programme assez riche en fonctionnalités, je ne lui connais pas d'équivalent - en libre tout au moins - et il faut vraiment se féliciter de l'initiative de son auteur.