Forcer l’utilisation d’un PDF avec Acrobat Reader

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 l’interactivité 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’ouvrir mon formulaire PDF avec un navigateur web ?
  • Comment empêcher les utilisateurs de Mac OS d’ouvrir mon formulaire PDF avec Aperçu ?
  • Comment empêcher les utilisateurs de Windows d’ouvrir mon formulaire PDF avec MachinChose PDF Reader ?

 

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 une, bien connue : JavaScript.
(Pas de panique, c’est juste quelques lignes de texte à copier-coller)
De plus, si on en avait besoin JavaScript permettrait de différencier Acrobat Reader, Acrobat Standard et Acrobat Pro, et aussi de différencier ces trois là des logiciels des autres éditeurs.

 

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, sur un support qu’un script JavaScript pourrait supprimer ou faire disparaitre à l’ouverture du document de façon complètement transparente pour l’utilisateur final :

  • Si le logiciel utilisé supporte JavaScript : l’utilisateur final ne s’aperçoit de rien et utilise le document normalement.
  • Si le logiciel utilisé ne supporte pas JavaScript : l’utilisateur final ne voit que l’avertissement.
  • Pour être efficace, l’avertissement doit recouvrir entièrement toutes les pages du document.

 

 

Quelles solutions ?

  • Utiliser un calque qui recouvre toutes les pages en affichant un avertissement, sauf si un script JavaScript le fait disparaitre.
  • Utiliser un champ de formulaire qui recouvre toutes les pages en affichant un avertissement, 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.

Avantage :

  • Ça marche à chaque fois et l’avertissement reste toujours actif, que l’utilisateur final modifie et enregistre ou non le document.
  • 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 une bonne solution pour un formulaire PDF.
  • Dans Acrobat Pro il faut importer le calque page par page, ce qui devient vite laborieux dès qu’il y a beaucoup de pages.
  • Dans le panneau de navigation Pages les miniatures reflètent toujours le calque supérieur, qu’il soit visible ou non, ce qui n’est pas très user-friendly.

 

 

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

Avantage :

  • Ç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.
  • Dans le panneau de navigation Pages, si les prévisualisations de vignettes de pages ne sont pas incorporées, les miniatures se mettent à jour automatiquement et reflètent les « vraies » pages.

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 » après chaque ouverture du formulaire, 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

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 dans le panneau de navigation Calques d’Acrobat Pro, via le menu local. 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

 

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.

 

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

 

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 Champs d’Acrobat Pro.
Son nom doit être identique à celui utilisé dans le script.

 

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 les exemples à 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 l’un des scripts suivants :

 

// 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;
//

Dans le script ci-dessus on utilise un champ nommé « cache », son nom n’a aucune importance.

 

// SCRIPT À UTILISER AVEC UN CALQUE
    var ocgArray1 = this.getOCGs();
    for (var i=0; i < ocgArray1.length; i++) {
        // masquer le calque-cache nommé "cache"
        if (ocgArray1[i].name == "cache") {ocgArray1[i].state = false;}
        }
//

Dans le script ci-dessus on utilise un calque nommé « cache », son nom n’a aucune importance.

 

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.

 

Il ne reste plus qu’à enregistrer le PDF, c’est terminé.

 

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

Les commentaires sont clos.