Donnez vie à vos documents numériques !
 

Création d’un script pour valider les champs obligatoires avec autre couleur. –

abracadabraPDF Forums PDF – Général Création d’un script pour valider les champs obligatoires avec autre couleur. –

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #44221
    thomasgb
    Membre

    Bonjour à tous,

    J’ai réalisé un formulaire contenant des champs obligatoires devant être complétés par un utilisateur avant toute possibilité d’impression.
    Par conséquent, j’ai créé un script sur un bouton impression qui vérifie que l’ensemble des champs en question respectent les options de saisies et de format.

    Si l’utilisateur a saisi correctement les informations appropriées dans les champs, il pourra donc imprimer le formulaire.

    Cependant, je suis bloqué à un autre niveau!
    Je souhaiterai, avec votre aide, disposer d’un script ou d’une autre solution qui devra valider les conditions suivantes:

    – Je dispose de plusieurs champs obligatoires (le champ apparait avec un contour rouge)
    – L’utilisateur saisie l’information exacte dans les champs
    – Dès que l’information est saisie et que l’utilisateur clique sur un autre champ, je souhaiterai que la couleur du champ “rouge” (parce que obligatoire) devienne automatiquement de couleur “verte“.

    Enfin, dès que tous les champs obligatoire deviennent verts, je souhaiterai disposer d’un message informant l’utilisateur que le formulaire a été correctement rempli et qu’il peut l’imprimer.

    Merci pour l’aide que vous m’apporterez.

    Thomas

Affichage de 4 réponses de 1 à 4 (sur un total de 4)
  • Auteur
    Réponses
  • #53295
    Merlin
    Maître des clés

    Bonjour et bienvenue,

    C’est une question qui revient régulièrement, mais :

    – rien ne peut empêcher l’utilisateur d’imprimer en utilisant le menu Fichier ou bien le raccourci-clavier correspondant, donc sans utiliser ton bouton…

    – par nature l’impression est destinée à permettre éventuellement de finir le remplissage à la main, et/ou ailleurs, et/ou plus tard, etc.
    Donc autant le principe des champs obligatoires à du sens quand il s’agit d’expédier un formulaire numérique par email ou à un serveur, autant c’est complètement inadapté à un formulaire papier.

    Ce n’est pas un hasard si cette fonction n’est pas implémentée dans Acrobat ni aucun autre logiciel créateur de formulaires.
    :Smiley01:

    #53296
    thomasgb
    Membre

    Bonjour,

    Merci pour ta réponse!

    Effectivement je n’avais pas souligné cette problématique dans mon message précédent car je l’avais correctement identifié.

    Toutefois, sais-tu comment je pourrai mettre en place un script concernant la validation d’un champ “obligatoire” en couleur verte dès que celui ci est rempli?

    #53297
    Merlin
    Maître des clés

    Du fait de ma réponse précédente je n’ai aucune expérience dans ce genre de script.
    Il va falloir attendre le passage d’un de nos experts…
    :priere:

    #53298
    maxwyss
    Membre

    Comme il a déjà été mentionné, il n’est pas possible d’empecher l’utilisateur d’imprimer le document. Il y a un événement “WillPrint” qui permet de executer du JavaScript avant l’impression, mais quand ça se passe, il est trop tard pour arrêter l’impression.

    Donc, tout ce qu’on peut faire s’il est important que tout les champs obligatoires sont rempli, est de faire une indication que le formulaire n’est pas valable. On peut faire ça avec un champ invisible sur écran mais qui imprime, qui contient un message “pas valable” etc.

    Pour implementer cela, appelons ce champ “invcvr”. Dans l’événement WillPrint, on va executer le script suivant:

    this.getField(“invcvr”).display = display.noView ; // preparer le champ d’indication
    var cntr = 0 ; // initialiser un compteur
    for (var i = 0 ; i var mf = this.getField(this.getNthFieldName(i)) ;
    if (mf.type != “button” && mf.type != “signature”) {
    if (mf.required == true) {
    if (mf.value === mf.defaultValue) {
    cntr++ ;
    }
    }
    }
    }

    if (cntr == 0) {
    this.getField(“invcvr”).display = display.hidden ;
    }

    Maintenant, l’indication de champ obligatoire. Ceci est un peu plus difficile, parce que le contour rouge est fourni par Acrobat quand l’option de marquer les champs est activée. On n’a donc pas de controle sur cette option, parce qu’elle est une préference d’utilisateur.

    On a la possiblilité de créer un mechanisme similaire au “champ obligatoire”, qui n’utilise pas la proprieté required. Dans ce cas, on n’a pas de contour rouge fourni de Acrobat. Ca devient un petit peu plus complexe, mais pas trop…

    On va créer un script au niveau document dans lequel on execute le code suivant (important: ce code doit être hors d’une definition de fonction:

    var chobli = new Array() ;
    chobli[0] = “myField” ;
    chobli[1] = “anotherField” ;

    etc. En autre mots, on define un array contenant les noms des champs obligatoires.

    Le prochain script est executé quand la premiere page du document s’ouvre:

    for (var co = 0 ; co this.getField(chobli[co]).lineWidth = 3 ;
    this.getField(chobli[co]).strokeColor = color.red ;
    }

    Ce script fait un contour rouge epais autour des champs définis comme obligatoires dans l’array chobli.

    Le prochain script va dans l’événement Format de chaque champ defini comme obligatoire dans chobli:

    if (event.value != event.target.defaultValue) }
    event.target.lineWidth = 1 ;
    event.target.strokeColor = color.green ;
    } else {
    event.target.lineWidth = 3 ;
    event.target.strokeColor = color.red ;
    }

    Et pour augmenter la confusion, le script pour la validation avant l’impression change egalement… mais il se simplifie:

    var cntr = 0 ;
    for (var mf = 0 ; mf if (this.getField(chobli[mf]).value === this.getField(chobli[mf]).defaultValue) {
    cntr++ ;
    }
    }

    if (cntr == 0) {
    this.getField(“invcvr”).display = display.hidden ;
    }

    Et ça devrait fonctionner. Note: Je n’ai pas testé les scripts actuels; il est donc toujours possible qu’il y a des erreurs.

    HTH.

    Max Wyss.

Affichage de 4 réponses de 1 à 4 (sur un total de 4)
  • Vous devez être connecté pour répondre à ce sujet.