Introduction
Il peut arriver de rencontrer des pdf avec des zones éditables, par exemple dans le cas de certains documents administratifs (je crois me souvenir que les formulaires pour les transferts de carte grise de véhicule en ont) ou, plus récemment, et je suppose que personne n’est passé à côté, l’attestation de déplacement du gouvernement pour avoir le droit de sortir dehors sans se prendre une prune de 135 €.
Vous pouvez voir sur l’image ci-dessous la visualisation de ces champs via mon logiciel (Okular)
Vu que la loi n° 2016-1321 du 7 octobre 2016 « pour une République numérique » visant à, je cite :
encourager l’utilisation des logiciels libres et des formats ouverts lors du développement, de l’achat ou de l’utilisation, de tout ou partie, de ces systèmes d’information […] à compter du 1er janvier 2018.
Loi pour une République numérique
est belle dans la théorie, dans la pratique tout le monde s’en fout, le pdf fourni par le gouvernement a été édité par Microsoft Word.
Parce que cela m’amuse d’écrire du code \(\LaTeX\) sur mon temps libre, je me suis occupé un petit moment pour recréer ce document avec les mêmes zones éditables. En effet, le langage permet de créer aussi dans un pdf des champs pour des formulaires. C’était aussi l’occasion de vous présenter ici cette fonctionnalité assez peu connue.
Des pdf éditables avec hyperref
Cela peut paraître étrange, mais le package permettant de réaliser des champs modifiables avec \(\LaTeX\) est le même qui permet d’éditer les métadonnées du document (auteur, titre, sujet, mots clefs, etc.) et d’ajouter des hyperliens dans un texte.
Naturellement, avant de pouvoir l’utiliser, il faut d’abord importer le package dans le préambule de la façon suivante :
\usepackage{hyperref}
Pour toutes les macros que nous verrons plus bas, chaque environnement éditable sera codé dans le fichier .tex
dans un environnement Form
obligatoire. Celui-ci peut cependant inclure l’ensemble du document pour alléger le code.
\begin{Form}
<code>
\end{Form}
En tout, il existe 6 types de champs éditables disponibles dans le package, mais je vais vous présenter les trois principaux qui permettent de faire l’essentiel pour un document classique. De nombreuses options de personnalisation sont disponibles, elles seront abordées au fur et à mesure de la présentation des différentes macros.
\TextField[]{}
La macro \TextField
permet d’intégrer au document un champ éditable par du texte. Il est possible d’écrire avant la case un quelques mots pour l’introduire, par exemple :
\begin{Form}
\TextField{Mme/M. :}
\end{Form}
Par défaut, la case est créée avec une bordure rouge, il est possible de modifier le contour avec ces quelques options :
borderwidth
: donne la largeur de la bordure. Avec l’optionborderwidth=0pt
celle-ci sera invisible sur le pdf.bordercolor
: définit la couleur de la bordurebackgroundcolor
: définit la couleur d’arrière plan de la casealign
: permet d’aligner le texte dans case à gauche (align=0
, par défaut), au centre (align=1
) ou à droite (align=2
)
D’autres options permettent de personnaliser ce champ :
width
etheight
: donne la longueur et la hauteur de la casecharsize
: donne la taille du texte, par exemplecharsize=12pt
default
: remplis la case avec un texte par défautmultiline
: permet d’écrire plusieurs lignes dans la casepassword=true
: cache le texte affiché par des *maxlen
: définit un nombre de caractère maximal dans la case (pour des dates par exemple)
\CheckBox[]{}
La macro \CheckBox
permet ici d’ajouter une case à cocher ou non, comme ci-dessous :
\begin{Form}
\CheckBox{Case à cocher :}
\end{Form}
Il est possible de personnaliser la case en ajoutant quelques options :
-
checked=true
: coche la case par défaut dans le pdf checkboxsymbol
: permet de personnaliser le symbole utilisé (voir pifont et psnfss pour les symboles disponibles)
\ChoiceMenu[]{}
L’option \ChoiceMenu
permet de lister plusieurs choix pour en choisir un, comme dans l’exemple ci-dessous :
\begin{Form}
\ChoiceMenu{Âge :}{
0--18 ans,
18--45,
45--65,
plus de 65
}
\end{Form}
Chaque terme dans la liste est séparé par une virgule. Comme vous le voyez, la mise en page du champ est assez moche avec tous les champs visibles. Il est possible de créer un menu déroulant avec l’option combo
:
\begin{Form}
\ChoiceMenu[combo]{Âge :}{
0--18 ans,
18--45,
45--65,
plus de 65
}
\end{Form}
Exemple
Comme dit dans l’introduction, j’ai réédité le document d’attestation de déplacement pour appliquer ces quelques macros, vous pouvez retrouver le code sur ce lien.
Attention : ce fichier est réalisé juste pour le fun et le défi personnel (et parce que m’ennuie), mais je ne peux pas attester que ce document soit valable en cas de contrôle de police dehors. En gros ne l’utilisez pas pour aller dehors.
Sources
Vous pouvez retrouver toutes les macros et options disponibles dans la documentation de hyperref au chapitre 7.
Crédit photo
Photo by Kelly Sikkema on Unsplash
6 Comments
Samuel ADABIA
C’est l’outil le plus pratique qu’il m’est donné de voir surtout en ce moment où je dois faire du télétravail avec des jeunes. Comment fais-tu pour limiter le nombre de caractères dans un cadre lorsqu’on utile FORM . Comment fais-tu si tu veux autoriser un certain nombre de lignes dans un cadre rouge ou pas pour obtenir la réponse. Bien cordialement à toi
Nicolas
Bonjour Samuel,
Pour limiter le nombre de caractères dans un cadre, l’option à utiliser est maxlen comme dans l’exemple suivant :
\TextField[width=1cm,borderwidth=0pt,maxlen=2]{à}
Par contre, je n’ai malheureusement pas de solution pour limiter le nombre de lignes dans un environnement \TextField, ça n’a pas l’air possible à ma connaissance.
Frédéric
Parfait ! J’ai essayé de bricoler quelque chose, sans aboutir à quelque chose de probant. J’ai mis cette solution sur le site TeXnique (https://texnique.fr/osqa/questions/9440/attestations-covid-modifiables?page=1&focusedAnswerId=9441#9441).
Une question (avant que j’essaie avec mes petits moyens) : comment faire pour mettre différents noms (par ex.) dans un menu déroulant à la place de \TextField[width=5cm,borderwidth=0pt]{Mme/M. :} ?
Merci encore !
Frédéric
Au fait, le lien RSS (https://la-bibliotex.fr/feed/) ne semble pas fonctionner avec l’agrégateur Liferea (Debian) : je n’ai pas de mise à jour depuis le 12 avril…
Frédéric
Réponse pour Liferea : normal, car le dernier article date justement du 12 avril 2020.
Ensuite, pour insérer un menu déroulant (ce qui permettra à un nombre défini de personnes d’utiliser la formulaire), il suffit d’ajouter :
\ChoiceMenu[combo,name=M-Mme]{Nom:}{Dudule, Schmurtz}\vspace{0,25cm}
\ChoiceMenu[combo,name=nom]{Nom:}{Dudule, Schmurtz}\vspace{0,25cm}
\ChoiceMenu[combo,name=prenom]{Prénom:}{Zeus, Jupiter}\vspace{0,25cm}
\ChoiceMenu[combo,name=birthdate]{Né(e) le:}{01/01/1901, 01/01/1902}\vspace{0,25cm}
\ChoiceMenu[combo,name=birthplace]{À:}{Ici, Là}\vspace{0,25cm}
\ChoiceMenu[combo,name=street]{Demeurant rue:}{Denhaut, Denbas}\vspace{0,25cm}
\ChoiceMenu[combo,name=town]{Commune:}{Là-Bas, Ici}\vspace{0,25cm}
Nicolas
Bonjour Frédéric,
Je crois que tu as répondu à tes propres questions. ^^
En ce qui concerne le flux RSS, en effet mon blog n’est pas très actif depuis un bon moment, difficile de consacrer beaucoup de temps à l’écriture d’articles. Je fais par ailleurs beaucoup moins de code qu’à une période du coup je trouve moins de chose à dire.
Mais j’ai toujours quelques articles en cours de rédaction dans les tuyaux, j’espère pouvoir les sortir un jour, mais ils prennent du temps à faire vu que je passe beaucoup de temps sur les docs pour faire des condensés (TikZ, pgf et l’écriture de code notamment).
Comme demandé sur texnique.fr, faudrait que j’actualise mon code sur Gitea pour la nouvelle version. Cependant, je continue de dissuader les gens à utiliser ma version, ne sachant pas à quel point on peut tomber sur des gens un peu trop zélés. 🙂
L’idée de faire l’attestation initialement me servait surtout à avoir un exemple pour écrire mon article sur la gestion des pdf éditables.
Nicolas