Donnez vie à vos documents numériques !
 

Générateur liste déroulantes

abracadabraPDF Forums PDF – Général Générateur liste déroulantes

  • Créateur
    Sujet
  • #74581
    michel c.
    Participant

    Bonjour, 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.
Affichage de 17 réponses de 1 à 17 (sur un total de 17)
  • Auteur
    Réponses
  • #74583
    bebarth
    Maître des clés

    bonjour,
    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.
    #74585
    michel c.
    Participant

    Non. Ce n’est pas la peine.

    #74586
    bebarth
    Maître des clés

    bonjour,
    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.
    #74588
    Merlin
    Maître des clés

    Chapeau !

     

    #74591
    michel c.
    Participant

    Bonjour et merci.

    Il y avait une erreur à la ligne 31 : Doc:Open:37: ReferenceError: valeurListe is not defined
    j’ai mis var valeurListe=listeChamps à la place de valeurListe=listeChamps

    idem à la ligne 80 : var debutChamp=nomListe; au lieu de debutChamp=nomListe
    mais cette fois l’erreur est toujours là…

    Attachments:
    You must be logged in to view attached files.
    #74593
    Merlin
    Maître des clés

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

    #74594
    bebarth
    Maître des clés

    bonjour,
    Il n’y avait pas d’erreur chez moi, et par contre ton fichier ne fonctionne pas (chez moi également) !

    @+
    😎

    #74595
    michel c.
    Participant

    Bonjour, 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 1 semaine et 6 jours par michel c..
    Attachments:
    You must be logged in to view attached files.
    #74599
    michel c.
    Participant

    Fait 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 1 semaine et 6 jours par michel c..
    • Cette réponse a été modifiée le il y a 1 semaine et 6 jours par michel c..
    • Cette réponse a été modifiée le il y a 1 semaine et 6 jours par michel c..
    • Cette réponse a été modifiée le il y a 1 semaine et 6 jours par michel c..
    • Cette réponse a été modifiée le il y a 1 semaine et 6 jours par michel c..
    • Cette réponse a été modifiée le il y a 1 semaine et 6 jours par michel c..
    Attachments:
    You must be logged in to view attached files.
    #74608
    bebarth
    Maître des clés

    bonjour,
    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.
    #74611
    michel c.
    Participant

    C’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 1 semaine et 5 jours par michel c..
    #74614
    bebarth
    Maître des clés

    bonjour,
    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 1 semaine et 5 jours par bebarth.
    Attachments:
    You must be logged in to view attached files.
    #74619
    michel c.
    Participant

    Le 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.
    #74621
    bebarth
    Maître des clés

    En 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.
    #74630
    michel c.
    Participant

    Merci 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.
    #74633
    bebarth
    Maître des clés

    bonjour,
    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.
    #74635
    michel c.
    Participant

    Merci 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…

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