2010-10-10 Gérer les méta-données d'un fichier PDF

L'âne à l'école - Détail 1

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:

http://www.k1ka.be/pics/jpdftweak1.jpg

On peut également ajouter un champs prédéfini:

http://www.k1ka.be/pics/jpdftweak2.jpg

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.

Footnotes:

1. Pas tellement à cause de l'usage de la ligne de commande, mais parce que sa syntaxe ne correspond pas aux usages répandus. Si on ne l'a pas utilisé depuis un certain temps, il est inévitable de relire la page de man...
2. Pour cet usage, il est plus facile d'utiliser pdfinfo qui fait partie du paquet poppler-utils.