Quelques manipulations des fichiers PDF

Ajout de fichiers en pièces jointes

pdftk (http://www.accesspdf.com/pdftk) permet de joindre des fichiers1 à un PDF :

$> pdftk mon.pdf attach_files mon.tex mon.mp output mon_nouveau.pdf

et de les extraire :

$> pdftk un_fichier.pdf unpack_files

Appliquer des PDFmark

La commande pdfmark est un operateur ajouté au langage PostScript pour gérer les fonctionnalités du format PDF qui ne sont pas présentes dans le format PS (annotations, articles, signets, forms, etc.).

Document : pdfmark reference Manual

GhostScript prend en charge quelques unes de ces fonctionnalités, c'est ce que je vais tenter de décrire partiellement ici.

Mode opératoire

La méthode mise en œuvre ici consiste à produire, à partir d'un fichier PDF existant, un nouveau fichier PDF embarquant des éléments supplémentaires. Cela se fait en invoquant le driver pdfwrite de gs sur une suite de deux fichiers : un fichier prologue.ps2 contenant le code des PDFmark et le fichier PDF à transformer.

$> gs -sDEVICE=pdfwrite -o monout.pdf prologue.ps monin.pdf

Le fichier prologue.ps aura la structure suivante:

%!PS-Adobe-3.0
%%BeginProlog
% Détection de l'opérateur pdfmark
/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse

<liste des PDFmark>

%%EndProlog

Chaque PDFMark étant écrite sous la forme:

[ .... /NOMDELAPDFMARK pdfmark

Les PDFmark intéressantes, pour l'instant : ANN (annotation), OUT (outline, signet, bookmark) et DOCINFO.

Modification des informations

Voici un exemple :

[ /Title    (Courbe d'Aston)
  /Author   (Manuel Luque)
  /Subject  (Construction d'une courbe d'Aston)
  /Keywords (Aston, pstricks, Luque)
  /Creator  (Les mimines)
  /DOCINFO  pdfmark

Comme on peut le voir, cette PDFmark affecte un dictionnaire.

Insertion d'un signet

En voici un :

[ /Count 0
  /Title (Blog de Manuel Luque)
  /Action /Launch
  /URI (http://pstricks.blogspot.com/)
  /OUT pdfmark

Il est bien sûr possible d'en mettre plusieurs à la suite, ils seront en tête de liste.

Insertion d'une annotation

Il peut-être utile d'informer le lecteur de la présence de pièces jointes ou de signets ajoutés à l'aide d'une petite icône, neutre à l'impression.

[ /Rect [70 550 100 580]
  /Open false
  /Title (Information)
  /Contents (Ce fichier embarque des pièces jointes et des signets vers des sites liés.)
  /Color [0.5 0.6 0.3]
  /Border [0 0 0]
  /ANN pdfmark

Il est possible d'insérer un retour à la ligne dans le contenu, soit en le spécifiant avec \n, soit en le réalisant effectivement dans la chaîne.

Cette annotation sera placée sur la première page du document. Pour la placer ailleurs, c'est une autre affaire, cela demande un peu de programmation...

Exemple

Le fichier courbe_aston.pdf a été tranformé selon la méthode indiquée ici. L'intérêt est que, souvent, lors d"une recherche internet, on trouve des liens directs vers des fichiers PDF sans avoir d'indications sur la page qui les propose. Là, il est possible de remonter à la source du document.

Remarque

L'application des PDFmark, à l'aide de gs3, supprime les pièces jointes. Mieux vaut commencer par appliquer les PDFmark et, ensuite, charger les pièces jointes.


  1. Pour l'archivage ou pour l'envoi d'une forme complète d'un document (source+réalisation), c'est assez commode !

  2. Le nom n'a pas d'importance.

  3. Il me semble que gs ignore les pièces jointes...