Packages

Créer des pdf éditables avec \(\LaTeX\)

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)

Copie d’écran partielle de l’attestation de déplacement dérogatoire

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’option borderwidth=0pt celle-ci sera invisible sur le pdf.
  • bordercolor : définit la couleur de la bordure
  • backgroundcolor : définit la couleur d’arrière plan de la case
  • align : 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 et height : donne la longueur et la hauteur de la case
  • charsize : donne la taille du texte, par exemple charsize=12pt
  • default : remplis la case avec un texte par défaut
  • multiline : permet d’écrire plusieurs lignes dans la case
  • password=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

    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