Donnez vie à vos documents numériques !
 

Répondre à : 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. – Répondre à : Création d’un script pour valider les champs obligatoires avec autre couleur. –

#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 < this.numFields ; 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 < chobli.length ; 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 < cobli.length ; 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.