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
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.
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.ps
2 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.
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.
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.
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...
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.
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.