Forcer l’utilisation d’un PDF avec Acrobat Reader

Article revu et augmenté le 6 juillet 2017

Après avoir créé et testé un formulaire PDF quoi de plus décevant que d’avoir des retours du type « ça marche pas », « ça calcule pas », « yapa les menus », « je peux rien saisir », etc. ?

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 Aperçu ?
  • Comment empêcher les utilisateurs de Windows d’utiliser mon formulaire PDF avec 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 ouvrent directement ce format de document, sans recourir à un plugin, ce qui pose un vrai problème pour l’utilisation des formulaires PDF disponibles en ligne.

 

 

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 seul Acrobat et les 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 :

  • Si le logiciel utilisé supporte ces fonctions : l’utilisateur final ne s’aperçoit de rien et utilise le document normalement.
  • Si le logiciel utilisé ne supporte pas ces fonctions : 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 font disparaitre.
  • 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 fait disparaitre.

 

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 fois et 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 avec Acrobat Pro, 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.

 

Avant d’aller plus loin il faut savoir que Acrobat Pro permet d’utiliser et, surtout, de créer les formulaires PDF alors que Acrobat Reader (ex Adobe Reader) ne permet que leur utilisation (visualisation, impression, remplissage). Donc dans ce qui suit, toute la partie création se fera avec Acrobat Pro et on testera toujours soigneusement avec Acrobat Reader avant toute diffusion. Ci-dessous le mot « Acrobat » tout court sous-entend « Acrobat Reader, Acrobat Standard et Acrobat Pro ».

Par ailleurs, je n’ai pas testé mais a priori tout ce qui suit est également réalisable avec le logiciel de mise en page Open Source Scribus.

 

 

Mise en œuvre

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 dans Acrobat Pro (ou dans Scribus).

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).
Champ cache
Panneau Champs
Calque cache
Panneau Calques

 

 

Si on utilise un calque comme cache il faut le créer directement dans le logiciel auteur 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.

Propriétés des calques PDF

 

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.

 

 

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.

Propriétés du bouton

 

 

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"
    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.

 

Print Friendly