Imprimer un formulaire sans les valeurs par défaut  (Lu 3084 fois) Partager ce sujet Imprimer

1 B


dragon8207  19 février 2018 : 13:01

Bonjour,
J'ai un formulaire pdf avec des champs dont j'ai indiqué des valeurs par défaut.
Le souci c'est qu'à l'impression ces valeurs par défaut restent.
Il y aurait-il un moyen d'imprimer le formulaire sans valeur par défaut (champs vides)?
Merci,

IP archivée


Merlin  19 février 2018 : 14:34

Bonjour.

Selon les cas soit on peut réinitialiser les champs avant l'impression, soit on peut ajouter un script en action de document "sera imprimé" qui change la couleur des textes en blanc, et un autre qui le remet en noir en action "a été imprimé".

IP archivée


dragon8207  19 février 2018 : 14:51

Comme il y a des cases à cocher, je suppose qu'une réinitialisation des champs est plus cohérent.
Néanmoins, s'il y a des champs qui sont remplis, cela risque de tout réinitialiser ? Une différenciation est-elle possible au niveau du document ?
Merci de prendre le temps pour cette réponse.

IP archivée


Merlin  19 février 2018 : 15:04

Rien n'empêche de changer la couleur des cases-à-cocher.
Et il n'est pas plus compliqué de modifier tous les champs que seulement certains.


Citer
s'il y a des champs qui sont remplis, cela risque de tout réinitialiser ?
Ce n'est pas un risque, c'est une certitude.  :Smiley03:

L'autre problème que ça pose c'est si les champs utilisent l'option "Valeur par défaut", auquel cas la réinitialisation affichera les valeurs par défaut.

IP archivée


dragon8207  19 février 2018 : 16:24

Ok, c'est bien ce que je me disais.
J'étais parti sur un script de document qui allait prendre la valeur de chaque champ, regarder si cela correspond à la valeur par défaut, et si c'était le cas, mettre du texte vide à la place genre "".
comment procède-t-on pour le passer les textes en blanc quand ils sont égaux à la valeur par défaut ?

IP archivée


bebarth  19 février 2018 : 16:34

bonjour,
//pour passer le texte en blanc
this.getField("myField").textColor = color.white;
//pour passer le texte en noir
this.getField("myField").textColor = color.black;
Pour plus d'informations sur les couleurs :
https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2Fcolor_properties.htm
@+
 :bonjour:

IP archivée


Merlin  19 février 2018 : 20:08

comment procède-t-on pour le passer les textes en blanc quand ils sont égaux à la valeur par défaut ?

Seuls les champs textes et les listes ont une valeur par défaut, ça ne fonctionnera pas avec les boutons ou les cases-à-cocher par exemple. Il leur faudrait un autre script.

Ce script ne concerne que les champs de type texte.
À placer en action "sera imprimé" :

for (var i=0; i<this.numFields; i++) {
    var oFld = this.getField(this.getNthFieldName(i));
    if((oFld.type == "text") && (oFld.valueAsString == oFld.defaultValue)) {
            oFld.textColor = color.
white;
    }
}



À placer en action "a été imprimé" :

for (var i=0; i<this.numFields; i++) {
    var oFld = this.getField(this.getNthFieldName(i));
    if((oFld.type == "text") && (oFld.valueAsString == oFld.defaultValue)) {
            oFld.textColor = color.
black;
    }
}

IP archivée


bebarth  20 février 2018 : 08:26

bonjour,
personnellement je ne pense jamais à utiliser les scripts des actions du document !  :bravo:
J'aurais fait une usine à gaz pour arriver à ce résultat !!!
Si les champs ont un fond, il faudra utiliser "oFld.textColor = color.transparent" plutôt que "oFld.textColor = color.white" !
Et si les textes ont des couleurs différentes, il faudra stocker les stocker dans une table avant de les récupérer.
Je dis ça au cas ou car cela m'arrive fréquemment d'avoir des fonds de champs et des couleurs de textes différents mais on ne m'a jamais demandé de cacher les valeurs à l'impression...

@+
 :bonjour:

IP archivée


Merlin  20 février 2018 : 10:31

il faudra utiliser "oFld.textColor = color.transparent" plutôt que "oFld.textColor = color.white"
Ça ne fonctionnera pas : le texte ne peut pas être transparent.
Seuls le contour et le fond des champs le peuvent.

personnellement je ne pense jamais à utiliser les scripts des actions du document !
J'aurais fait une usine à gaz pour arriver à ce résultat !!!
Ça m'est arrivé aussi, et il n'y a pas si longtemps que ça…
 :geek:

IP archivée


dragon8207  20 février 2018 : 13:56

ça marchhhheeeeeeeeee (je n'en doutais pas)
Merci ! ;)

IP archivée


dragon8207  20 février 2018 : 14:04

J'ai voulu rajouter une ligne :
for (var i=0; i<this.numFields; i++) {
    var oFld = this.getField(this.getNthFieldName(i));
    if((oFld.type == "text") && (oFld.valueAsString == oFld.defaultValue)) {
            oFld.textColor = color.white;
    }{
            oFld.textColor = color.black;
    }
}
Pour spécifier le blanc uniquement sur les champs qui avaient leur valeur par défaut, mais je crois que n'ai pas compris toute la syntaxe du coup ...

IP archivée


bebarth  20 février 2018 : 14:10

...il manque un else !
for (var i=0; i<this.numFields; i++) {
    var oFld = this.getField(this.getNthFieldName(i));
    if((oFld.type == "text") && (oFld.valueAsString == oFld.defaultValue)) {
            oFld.textColor = color.white;
    } else {
        oFld.textColor = color.black;
    }
}

@+
 :bonjour:

IP archivée


dragon8207  20 février 2018 : 15:51

idiot que je suis lol
ça marche
En tous les cas merci les gars, vous gérez.
Du coup on peut le mettre en résolu ;)

Arigato Gozaimasu !!!!!!!!!
Suis content

IP archivée


Merlin  20 février 2018 : 16:29

J'ai voulu rajouter une ligne :

Pour spécifier le blanc uniquement sur les champs qui avaient leur valeur par défaut

Si les champs ont déjà le noir comme couleur de texte c'est inutile.
Ça ne sert que si certains champs ont une couleur de texte ni noire ni blanche.
 :idee:

IP archivée


DavidFeder  08 octobre 2020 : 19:35

Hello,

Loin moi l'idée de faire le malin... Je me content de mettre ensemble les merveilles de code que je vois :)Pourquoi changer la couleur alors qu'on peut simplement remplacer la valeur par "", comme ci-dessous?
for (var i=0; i<this.numFields; i++) {
    var oFld = this.getField(this.getNthFieldName(i));
    if((oFld.type == "text") && (oFld.valueAsString == oFld.defaultValue)) {
            oFld.value = "";
    }
}
En fait j'avais aussi un problème: dans mon cas c'est pour le print, mais aussi pour enregistrer une version "non modifiable" du document.
du coup, avec le code ci-dessous, si après avoir enregistré la version "read only" du document, l'utilisateur cliquait sur le champs, la valeur par défaut revenait (j'ai un autre script qui remet la valeur par défaut si le champ a été cliqué, puis finalement laissé vide...), du coup j'ai ajouté
oFld.defaultValue= "";
le code pour remettre la valeur par défaut si après avoir cliqué, finalement on ne rentre pas de contenu:
if (event.target.value=="") {
    event.target.value = event.target.defaultValue;
}
et le code avant enregistrer version "read only":
for (var i=0; i<this.numFields; i++) {
    var oFld = this.getField(this.getNthFieldName(i));
    if((oFld.type == "text") && (oFld.valueAsString == oFld.defaultValue)) {
            oFld.value = "";
            oFld.defaultValue = "";
    }
}


IP archivée


DavidFeder  08 octobre 2020 : 20:05

ok, fini de faire le mariole :)
j'ai essayé de "condenser" mon code pour éviter de boucler 2x tous les champs en mettant le read-only et le nettoyage des valeurs par défaut comme ceci:
function finalize() {

//DEFAULT TEXT IN FIELDS & READ ONLY
for (var i=0; i<this.numFields; i++) {
    var oFld = this.getField(this.getNthFieldName(i));
    if((oFld.type == "text") && (oFld.valueAsString == oFld.defaultValue)) {
            oFld.value = "";
            oFld.defaultValue = "";
    }
    oFld.readonly = true;
}
}
mais ça ne fonctionne pas.
Si je nettoie d'abord les valeurs par défaut, puis mets en read-only dans 2 fonctions séparées ça marche.
Mais je suppose que c'est faire tourner la boucle pour rien, non?



IP archivée


bebarth  08 octobre 2020 : 20:38

bonsoir,
Et si tu modifiais le paramètre "display" des champs dont la valeur correspond à la valeur par défaut :
for (var i=0; i<this.numFields; i++) {
    var oFld=this.getField(this.getNthFieldName(i));
    if(oFld.type=="text" && oFld.value==oFld.defaultValue) oFld.display=display.noPrint;
}
Après l'impression tu remets tous ces champs en "display.visible" !
@+
 :bonjour:

IP archivée