Article revu et augmenté le 5 décembre 2022
Tout ça parce-que des utilisateurs l’ouvrent avec un logiciel qui ne gère pas AcroForms, c’est à dire la “couche” interactive des formulaires PDF (champs, JavaScript…), comme les navigateurs web ou la plupart des logiciels lecteurs de PDF bas de gamme, gratuits ou non.
Alors ce sont des questions qui reviennent régulièrement :
- Comment empêcher les utilisateurs d’utiliser mon formulaire PDF avec un navigateur web ?
- Comment empêcher les utilisateurs de MacOS d’utiliser mon formulaire PDF avec le logiciel lecteur par défaut de PDF Apple-Aperçu ?
- Comment empêcher les utilisateurs de Windows d’utiliser mon formulaire PDF avec Edge ou MachinChose PDF Reader ?
- Comment s’assurer que le logiciel utilisé supporte AcroForms ?
Le problème c’est que, par nature, ces demandes sont incompatibles avec l’universalité du format PDF : trop de logiciels différents sont susceptibles d’être utilisés.
D’autant que maintenant même les navigateurs web peuvent ouvrir directement les documents PDF sans recourir à un plugin, ce qui pose un vrai problème pour l’utilisation des formulaires PDF disponibles en ligne parce-que lesdits navigateurs ne supportent pas ou partiellement les fonctions AcroForms et celles de JavaScript.
Alors comment faire ?
Le seul moyen c’est d’aborder le problème sous un autre angle.
Puisqu’on ne peut pas empêcher l’ouverture d’un document PDF dans un ou plusieurs logiciels en particulier il faut s’arranger pour qu’il ait un comportement différent selon le logiciel qui servira à l’ouvrir, pour ça il faut s’appuyer sur une fonction ou une capacité que seuls Acrobat, Foxit, PDF Studio et quelques autres logiciels évolués possèdent.
Et il y en a deux, bien connues : JavaScript et les Calques PDF (OCG).
Il faut donc trouver un moyen d’afficher par défaut et en permanence un avertissement incitant l’utilisateur à :
– ouvrir le document avec Acrobat Reader ou autre,
– sur un support qui disparaitrait à l’ouverture du document de façon complètement transparente pour l’utilisateur final qui utilise un “vrai” PDF Reader,
– et qui resterait apparent dans tous les autres cas :
- Si le logiciel utilisé supporte les fonctions AcroForms : l’utilisateur final ne s’aperçoit de rien et utilise le document normalement.
- Si le logiciel utilisé ne supporte pas les fonctions AcroForms : l’utilisateur final ne voit que l’avertissement.
- Pour être efficace, l’avertissement doit recouvrir entièrement toutes les pages du document.
- De plus, si on en avait besoin l’utilisation de JavaScript permettrait de différencier Acrobat Reader, Acrobat Standard et Acrobat Pro, de différencier leur version, et aussi de différencier ces trois là des logiciels des autres éditeurs.
Et donc, quelles solutions ?
- Utiliser un calque affichant un avertissement qui recouvre toutes les pages, ou au moins la première, sauf si ses Propriétés le faisait disparaitre à l’ouverture du document.
- Ou bien utiliser un champ de formulaire affichant un avertissement qui recouvre toutes les pages, ou au moins la première, sauf si un script JavaScript le faisait disparaitre à l’ouverture du document.
Le calque
Disponibles dans le format PDF depuis la version 1.4, les calques peuvent être créés soit en amont avec un logiciel auteur comme InDesign ou Illustrator, soit ajoutés directement dans le document PDF avec Acrobat Pro. Évidemment, on placera le calque concerné par-dessus tous les autres.
Avantages :
- Ça marche à chaque ouverture car l’avertissement reste toujours actif, que l’utilisateur final modifie et enregistre ou non le document.
- Pas besoin d’utiliser JavaScript ni rien d’autre, ça fonctionne tout seul.
- L’état apparent ou non d’un calque à l’ouverture d’un document PDF dépend de sa propriété État par défaut (activé ou non), pas du fait qu’on l’affiche ou qu’on le masque en cliquant sur la petite icône dans le panneau des Calques (ça c’est la Visibilité). Ce qui signifie que si l’utilisateur modifie et enregistre le document, après sa fermeture le calque sera toujours visible et actif : son État par défaut n’aura pas changé car on n’aura modifié que sa Visibilité.
Inconvénients :
- Les champs de formulaires sont indépendants des calques et flottent par-dessus tous les éléments graphiques d’un document PDF : ils apparaissent toujours par-dessus le calque supérieur et ce n’est donc pas toujours très sexy pour un formulaire PDF.
- Dans Acrobat Pro il faut importer le calque page par page, d’où l’intérêt de le préparer dans le logiciel auteur si le document contient beaucoup de pages.
Le champ de formulaire
Comme pour les calques, on peut créer préalablement des champs de formulaire en amont avec un logiciel auteur (InDesign, Scribus, LibreOffice…) ou bien ensuite (avec Acrobat Pro, Phantom, PDF Studio…) la différence n’est pas là.
Avantages :
- Ça ne sert qu’une seule fois, dans certains cas c’est justement ce qu’on veut.
- Contrairement aux calques, l’état apparent ou non des champs de formulaire n’est commandé que par une seule propriété (hidden), ce qui signifie que si l’utilisateur final modifie et enregistre le document PDF notre avertissement sera définitivement désactivé.
Cependant il faut pas perdre de vue que les anciennes versions de Acrobat Reader ne permettaient pas d’enregistrer les modifications effectuées dans un document PDF qui n’était pas Reader-Extended.
Inconvénient :
- Contrairement aux calques, l’état apparent ou non des champs de formulaire n’est commandé que par une seule propriété (hidden), ce qui signifie que si l’utilisateur final modifie et enregistre le document PDF notre avertissement sera définitivement désactivé. Oui je sais, je me répète mais selon les cas c’est un avantage ou un inconvénient.
- C’est une contrainte pour le créateur qui doit réinitialiser l’état visible du champ “cache” avant d’enregistrer le document dans son état définitif, avec tous les risques d’oublis que ça engendre.
Mise en œuvre
Réalisée ci-dessous avec le logiciel Acrobat Pro mais c’est également faisable avec les autres logiciels éditeurs de documents PDF, ainsi qu’avec les logiciels de mise en page InDesign et Scribus.
Bien entendu, il faut d’abord créer le visuel-avertissement de son choix, avec le logiciel de son choix et le convertir en PDF, de préférence.
On part du principe qu’il faut savoir manipuler les calques et les champs de formulaire.
Pour placer un calque ou un champ au premier-plan il y a essentiellement deux astuces à connaitre :
- On peut modifier l’ordre des calques PDF en appuyant sur la touche ALT avant de les faire glisser dans le panneau de navigation Calques d’Acrobat Pro. Ou sinon via le menu local dudit panneau, l’interface est plutôt spartiate mais elle a le mérite d’être logique.
- Le champ de formulaire qui est au premier plan, au-dessus des autres, c’est celui qui est en dernier dans l’ordre de tabulation. Pour ne pas devenir fou-furieux on peut désactiver le réordonnancement automatique des tabulations, à la fois dans le panneau des outils de formulaire et à la fois dans les Préférences d’Acrobat Pro (Préférences : Formulaire).
Calque
Si on utilise un calque comme cache
il faut le créer directement dans le logiciel auteur (InDesign, Scribus, Illustrator…) avant l’exportation en PDF ou bien Importer sous forme de calque depuis le panneau de navigation Calques d’Acrobat Pro.
D’abord il faut cliquer sur la petite icône en regard du nom du calque pour le masquer. Ensuite il faut faire un clic-droit sur le nom du calque pour afficher ses Propriétés, c’est là qu’il est important de désactiver son État par défaut, de régler ses trois options d’État initial et de le Verrouiller si on ne veut pas que l’utilisateur final puisse l’afficher quand même.
Et puis c’est tout. Enregistrer (sous), terminé.
Dans ce cas on table sur le fait qu’un logiciel qui ne reconnait pas AcroForms ne reconnait pas non plus les Calques PDF, ce qui est le plus souvent le cas.
Il n’y a aucune magie là-dessous, un logiciel qui ne reconnait pas les calques PDF les affiche tous les uns par-dessus les autres quels que soient les réglages appliqués.
Seuls les logiciels “évolués” respecteront les Propriétés du calque et donc n’afficheront pas le calque-avertissement.
Champ de formulaire
Si on utilise un champ de formulaire
comme cache il faut créer un nouveau champ de type Bouton et importer le visuel-avertissement comme une icône : Propriétés du bouton : Options : Choisir l’icône.
Son nom doit être identique à celui utilisé dans le script. S’il y a plusieurs pages à recouvrir on peut ensuite dupliquer ce bouton sur toutes les pages en faisant un clic-droit dessus : Dupliquer dans toutes les pages.
Ensuite il faut ajouter le script JavaScript en script de document, tout est expliqué sur cette page : Les différents niveaux d’utilisation des scripts JavaScript.
Dans l’exemple Masque-JS-champ.pdf à télécharger ci-dessous le script se nomme “a-init” pour être exécuté en premier mais son nom n’a aucune importance.
Dans la nouvelle fenêtre qui s’affiche une fois le script de document créé, il faut effacer le texte par défaut et le remplacer par le script suivant :
// SCRIPT À UTILISER AVEC UN CHAMP // masquer le champ nommé "cache" if (this.getField("cache") != null) {this.getField("cache").display = display.hidden;} // réinitialiser le marqueur de modification (facultatif) this.dirty = false; //
Il ne reste plus qu’à enregistrer le PDF, c’est terminé.
Bien entendu on n’utilisera jamais ces deux méthodes à la fois dans un même PDF car on ne ferait que cumuler les inconvénients des deux, pas les avantages.
Télécharger Masque-calque Télécharger Masque-champ
Ces deux PDF d’exemples à télécharger requièrent Acrobat Reader version 11 ou DC pour fonctionner, ils utilisent donc un script qui en plus détecte la version d’Acrobat Reader utilisée.