abracadabraPDF › Forums › PDF – Général › Générateur liste déroulantes
- Ce sujet contient 17 réponses, 3 participants et a été mis à jour pour la dernière fois par
michel c., le il y a 7 mois et 3 semaines.
-
CréateurSujet
-
28 juin 2024 à 07:30 #74581
michel c.
ParticipantBonjour, j’ai un script un script qui me permet de générer des listes déroulantes (en grande partie grâce à vous).
J’aimerais le modifier pour l’adapter à mes besoins :
- J’aimerais que la suite du script ne tourne que pour les champs listes déroulantes dont le nom est de type prefixe.ind1.ind2
- Dans un 2nd temps, j’aimerais qu’elle propose à l’utilisateur de faire un choix parmis les champs prefixe.ind1
- Ensuite je voudrais que le script liste tous les champs dont le nom commence par prefixe.ind1 et que l’utilisateur puisse cocher ceux pour lesquels il souhaite propulser la(les) valeurs(s)
- Ensuite proposer à l’utilisateur d’inscrire la valeur à propulser dans une zone multilignes dans la boite de dialogue.
- Propulser chaque ligne comme élément de choix et en ajoutant la valeur “?” en tête de liste
J’aimerais que tout cela se fasse par boite de dialogue mais je ne maitrise pas du tout celles-ci…
Merci
Attachments:
You must be logged in to view attached files. -
CréateurSujet
-
AuteurRéponses
-
28 juin 2024 à 11:05 #74583
bebarth
Maître des clésbonjour,
Je regarde ça ce weekend.
Dans ta boite de dialogue, faut-il laisser la possibilité d’indiquer le nom de champ manuellement ???@+
Attachments:
You must be logged in to view attached files.28 juin 2024 à 11:22 #74585michel c.
ParticipantNon. Ce n’est pas la peine.
30 juin 2024 à 18:43 #74586bebarth
Maître des clésbonjour,
Voici ma proposition que je partage maintenant, avant d’être de mauvaise humeur… (ce que je n’espère pas, évidemment !).
Tu me dis si je n’ai pas tout compris.
C’est la première fois que je fais une boite de dialogue à éléments variables. Ce n’est pas ce qu’il y a de plus simple, mais lorsqu’on a compris comment fonctionnent les boites de dialogue, ça se fait… et voici le script pour ton fichier :
nbChamps=this.numFields;
if (nbChamps) {
var leChamp="- Liste des champs -";
var listeChamps="var listeChamps \= \{\""+leChamp+"\": "+(nbChamps+1)+",";
for (var i=0; i < nbChamps; i++) {
var nomChamp=this.getNthFieldName(i);
var RegExTest=new RegExp("^(\\w\\.\\d+)\\.(\\d+)$");
var OK=nomChamp.match(RegExTest);
if (OK) {
listeChamps+="\""+OK[1]+"\": "+(-1*(i+1)).toString()+",";
}
}
var listeChamps=listeChamps.substring(0, listeChamps.length-1);
listeChamps+="\}";
eval(listeChamps);
var bDialogue={
initialize: function(bDialogue) {
this.loadDefaults(bDialogue);
},
loadDefaults: function(bDialogue) {
bDialogue.load({
LCha: listeChamps,
})
},
validate: function(bDialogue) {
var oRslt=bDialogue.store();
var elements=bDialogue.store()["LCha"];
var testOK=true;
for (var i in elements) {
if (elements>0) {
valeurListe=listeChamps;
nomListe=i;
}
}
if (valeurListe>0) var testOK=false;
if (!testOK) app.alert("Veuillez sélectionner un nom de champ.",3);
return testOK;
},
description: {
name: "Générer des menus déroulants",
elements: [
{
type: "view",
elements: [
{
type: "view",
alignment: "align_fill",
elements: [
{
type: "static_text",
name: "Champs à double indices",
font: "dialog",
bold: true,
},
{
type: "static_text",
name: "Sélectionnez...",
},
{
type: "popup",
item_id: "LCha",
width: 150,
alignment: "align_fill",
},
]
},
{
type: "gap",
height: 5
},
{
type: "ok_cancel",
},
]
},
]
}
};
if("ok"==app.execDialog(bDialogue)){
debutChamp=nomListe;
lesIndices=[];
var leChamp="- Liste des seconds indices -";
var listeChamps="var listeChamps \= \{\""+leChamp+"\": "+(nbChamps+1)+",";
for (var i=0; i < nbChamps; i++) {
var nomChamp=this.getNthFieldName(i);
var RegExTest=new RegExp("^"+nomListe+"\\.(\\d+)$");
var OK=nomChamp.match(RegExTest);
if (OK) {
lesIndices.push("0"+OK[1].slice(-2));
}
}
var listeChamps=listeChamps.substring(0, listeChamps.length-1);
listeChamps+="\}";
eval(listeChamps);
//
var nbH=Math.ceil(Math.sqrt(lesIndices.length));
var nbV=Math.ceil(lesIndices.length/nbH);
numIndice=0;
champsCaC="[";
for (var i=0; i<nbH; i++) {
champsCaC+="{type: \"view\",elements: [";
for (var j=0; j<nbV; j++) {
if (numIndice<lesIndices.length) {
champsCaC+="{type: \"check_box\",item_id: \"cb"+lesIndices[numIndice]+"\",name: \" ."+Number(lesIndices[numIndice])+"\",},";
numIndice++;
} else break;
}
champsCaC+="]},{type: \"static_text\",name: \" \",},"
}
champsCaC+="]";
//
var bDialogue={
validate: function(bDialogue) {
var oRslt=bDialogue.store();
for (var i=0; i<lesIndices.length; i++)eval("theCB"+i+"=oRslt[\"cb"+lesIndices+"\"];")
var testOK0=true;
var txtTest="";
for (var i=0; i<lesIndices.length; i++){
txtTest+="theCB"+i+"==false";
if (i<lesIndices.length-1) txtTest+=" && ";
}
if (eval(txtTest)) var testOK0=0;
var testOK1=true;
lesElements=oRslt["elem"].replace(/^\s+|\s+$/g,"").replace(/\s+/g,"\r");
if (lesElements=="") var testOK1=0;
if (!testOK0) app.alert("Veuillez sélectionner au moins un indice pour le champ "+debutChamp+".",3);
else if (!testOK1) app.alert("Veuillez indiquer les éléments à ajouter pour les indices sélectionnés pour le champ "+debutChamp+".",3);
var testOK=(testOK0 && testOK1);
return testOK;
},
description: {
name: "Générer des menus déroulants",
elements: [
{
type: "view",
elements: [
{
type: "view",
alignment: "align_fill",
elements: [
{
type: "static_text",
name: "Seconds indices du champ "+debutChamp,
font: "dialog",
bold: true,
},
{
type: "static_text",
name: "Sélectionnez...",
},
{
type: "view",
align_children: "align_top",
elements: eval(champsCaC)
},
{
type: "gap",
height: 5
},
{
type: "static_text",
name: "Élément des menus déroulants",
font: "dialog",
bold: true,
},
{
type: "static_text",
name: "Indiquez une liste à intégrer",
},
{
type: "edit_text",
item_id: "elem",
multiline: true,
alignment: "align_fill",
height: 150
}
]
},
{
type: "gap",
height: 5
},
{
type: "ok_cancel",
},
]
},
]
}
};
if("ok"==app.execDialog(bDialogue)){
lesElements=lesElements.split("\r");
lesElements.unshift("?");
for (var i=0; i<lesIndices.length; i++) {
if (eval("theCB"+i)) this.getField(debutChamp+"."+i).setItems(lesElements);
}
}
}
} else app.alert("Il n'y a pas de champ dans ce document.",3);
@+
Attachments:
You must be logged in to view attached files.30 juin 2024 à 20:36 #74588Merlin
Maître des clésChapeau !
1 juillet 2024 à 18:11 #74591michel c.
ParticipantBonjour et merci.
Il y avait une erreur à la ligne 31 :
Doc:Open:37: ReferenceError: valeurListe is not defined
j’ai misvar valeurListe=listeChamps
à la place devaleurListe=listeChamps
idem à la ligne 80 :
var debutChamp=nomListe;
au lieu dedebutChamp=nomListe
mais cette fois l’erreur est toujours là…Attachments:
You must be logged in to view attached files.1 juillet 2024 à 18:36 #74593Merlin
Maître des clésFait attention au fait que déclarer une variable en commençant par “var = ” signifie que c’est une variable locale, uniquement accessible dans la boucle ou dans la fonction dans laquelle elle a été créée.
Contrairement à la déclaration sans “var = ” qui en fait une variable globale.
1 juillet 2024 à 18:41 #74594bebarth
Maître des clésbonjour,
Il n’y avait pas d’erreur chez moi, et par contre ton fichier ne fonctionne pas (chez moi également) !@+
2 juillet 2024 à 08:05 #74595michel c.
ParticipantBonjour, avec le script proposé, j’ai toujours cette erreur :
Field:Mouse Up:35: ReferenceError: valeurListe is not defined
J’essayerai avec adobe acrobat DC en rentrant ce soir.
-
Cette réponse a été modifiée le il y a 7 mois et 4 semaines par
michel c..
Attachments:
You must be logged in to view attached files.2 juillet 2024 à 08:11 #74599michel c.
ParticipantFait attention au fait que déclarer une variable en commençant par “var = ” signifie que c’est une variable locale, uniquement accessible dans la boucle ou dans la fonction dans laquelle elle a été créée. Contrairement à la déclaration sans “var = ” qui en fait une variable globale.
Oui, j’ai vérifié, dans d’autres scripts, les variables globales fonctionnent avec PDF-XChange Editor. Je ne comprend pas pourquoi dans ce script ça bloque à cette ligne. Je cherche…
J’ai ajouté ces 3 lignes après la ligne 27 :
console.println("oRslt : " + oRslt);
console.println("listeChamps : " + listeChamps);
console.println("LCha : " + LCha);
console.println("elements : " + elements);
juste après la déclaration de la variable :
valeurListe=listeChamps;
La console renvoie :
oRslt : [object Object]
listeChamps : [object Object]
Field:Mouse Up:30: ReferenceError: LCha is not defined
Je me demandais si la variable listeChamps ne devrait pas être la liste de tout les champs.
Je suis loin de tout maitriser dans ce script mais bon, je vais essayer quand même de m’y retrouver…
-
Cette réponse a été modifiée le il y a 7 mois et 4 semaines par
michel c..
-
Cette réponse a été modifiée le il y a 7 mois et 4 semaines par
michel c..
-
Cette réponse a été modifiée le il y a 7 mois et 4 semaines par
michel c..
-
Cette réponse a été modifiée le il y a 7 mois et 4 semaines par
michel c..
-
Cette réponse a été modifiée le il y a 7 mois et 4 semaines par
michel c..
-
Cette réponse a été modifiée le il y a 7 mois et 4 semaines par
michel c..
Attachments:
You must be logged in to view attached files.2 juillet 2024 à 14:19 #74608bebarth
Maître des clésbonjour,
Fonctionne correctement avec PDF-XChange pour moi alors que j’ai un message d’erreur avec ton dernier fichier !@+
Attachments:
You must be logged in to view attached files.3 juillet 2024 à 07:21 #74611michel c.
ParticipantC’est à n’y rien comprendre.
Je n’avais pas vu que tu avais partagé ton fichier quelques posts avant …. Du coup j’insistais en essayant de corriger cette erreur…
Du coup je vais me servir de ton fichier.
Merci beaucoup
-
Cette réponse a été modifiée le il y a 7 mois et 3 semaines par
michel c..
3 juillet 2024 à 08:00 #74614bebarth
Maître des clésbonjour,
Je partage (pratiquement) toujours un fichier lorsque je fournis un script et il vaut mieux utiliser le script du fichier plutôt que celui affiché sur le post.
J’avais remarqué qu’il y a un problème d’affichage lorsqu’on indique un “i” entre crochets (disparait à l’affichage, doit être interprété comme une balise).
En tout cas, j’utilise souvent ce” i” entre crochets lorsque j’écris un script et des fois je pense à le modifier avant de partager ce script et d’autres fois je n’y pense pas…
Dans ce script, il y a effectivement plusieurs fois ce “i” entre crochets et si tu as utilisé celui affiché sur le post de réponse, je pense que l’erreur doit venir de là !!!
Essaye donc avec celui fourni dans le fichier et (normalement) ça devrait beaucoup mieux fonctionner…@+
-
Cette réponse a été modifiée le il y a 7 mois et 3 semaines par
bebarth.
Attachments:
You must be logged in to view attached files.3 juillet 2024 à 13:34 #74619michel c.
ParticipantLe script fonctionne nickel mais lorsque je l’implémente dans mon document, rien ne se passe et aucun message d’erreur à la console.
J’ai essayé avec le champ Q.1.5 et rien.
Décidément, quand ça ne veut pas…
Attachments:
You must be logged in to view attached files.3 juillet 2024 à 17:52 #74621bebarth
Maître des clésEn fait, dans ton fichier précédent, les champs à double indices n’étaient que des menus déroulants alors que dans celui-ci il y a tous types de champs.
J’ai donc modifié le script pour qu’il ne tienne compte que des menus déroulants (2 fois : en lignes 9 et 88) :
if (OK && this.getField(nomChamp).type=="combobox") {
Ce qui entraine une modification en ligne 195 que je n’écris pas ici car elle comporte un “i” entre crochets, mais je fais une copie d’écran !@+
Attachments:
You must be logged in to view attached files.3 juillet 2024 à 21:36 #74630michel c.
ParticipantMerci beaucoup, ça fonctionne.
Par contre les espaces sont interprétés comme un nouvel item de la liste.
Attachments:
You must be logged in to view attached files.4 juillet 2024 à 11:42 #74633bebarth
Maître des clésbonjour,
Oups ! Je suppose que tout le monde aura rectifié de lui-même ce dysfonctionnement… on ne peut pas penser à tout.
Pour ma part, j’ai donc modifié les expressions régulières en ligne 124 qui servent à supprimer/rectifier certains caractères inutiles (pour éviter d’avoir des lignes vierges ou des espaces multiples par exemple). Dans la théorie, on a pas besoin de ça si l’on fait attention à ce qu’on frappe…
La nouvelle ligne est :
lesElements=oRslt["elem"].replace(/[ ]{2,}/g," ").replace(/^\s+|\s+$/g,"").replace(/[^\S ]+/g,"\r").replace(/\s{3,}/g,"\r");
Explications sur demande…
J’espère avoir pensé à tout ce coup ci !@+
Attachments:
You must be logged in to view attached files.4 juillet 2024 à 14:20 #74635michel c.
ParticipantMerci beaucoup. Les explications j’en aurait besoin mais le problème c’est que j’en aurais besoin de beaucoup trop. Il faudrait que je me penche vraiment sur les expressions régulières avant. Parce que là, je nage total…
-
Cette réponse a été modifiée le il y a 7 mois et 4 semaines par
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.