Donnez vie à vos documents numériques !
 

bebarth

Toutes mes réponses sur les forums

Affichage de 99 réponses de 1 à 99 (sur un total de 3,174)
  • Auteur
    Réponses
  • en réponse à : Sinus pour baïonnette #74682
    bebarth
    Maître des clés

    bonjour,
    Je n’avais pas vu la vidéo ! Si on la regarde, on peut comprendre que l’opération effectuée n’est pas celle indiquée sur la copie d’écran, mais : coef = déport ÷ sin(22,5) ÷ déport
    Et là on remarque vite que déport ÷ déport = 1… donc coef = 1/sin(angle) quel que soit le cet angle qui est fonction du déport.
    On peut donc écrire :
    event.value=1/Math.sin(this.getField("angle").value*Math.PI/180);
    Ici on transforme les angles en “radian” qui est l’unité trigonométrique utilisée en JavaScript.

    @+
    😎

    PS : les vacances sont pour la fin de semaine, mais j’ai (encore) des soucis avec mes e-mails et je ne reçois pas les notifications ni de ce forum, ni de celui d’adobe…

    • Cette réponse a été modifiée le il y a 3 jours par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Sinus pour baïonnette #74681
    bebarth
    Maître des clés

    bonjour,
    Comment un sinus compris entre -1 et +1 divisé par 500 peut-il être égale à 2,613 ???
    De plus, 541,196/500 ne fait jamais 2,6 mais 1 et des brouettes…
    Il doit y avoir une erreur de formule !

    @+
    😎

    en réponse à : Créer un lien vers une base de donnés en ligne #74640
    bebarth
    Maître des clés

    Il faudrait demander à Thom Parker, ou chercher sur son site, si quelqu’un connaît la réponse c’est lui.

    Tu nous donneras sa réponse…

    @+
    😎

    en réponse à : Créer un lien vers une base de donnés en ligne #74637
    bebarth
    Maître des clés

    bonjour,

    Non ce n’est pas possible !

    @+
    😎

    en réponse à : Générateur liste déroulantes #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.
    en réponse à : Somme des radio boutons en mots #74626
    bebarth
    Maître des clés

    bonjour,
    En script de format personnalisé tu peux écrire :
    if (event.value==1) event.value="Growth";
    else if (event.value==2) event.value="Diversified";
    else if (event.value==3) event.value="Growth or Diversified";
    // etc.
    else event.value="";

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Générateur liste déroulantes #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.
    en réponse à : Générateur liste déroulantes #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 3 semaines par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Générateur liste déroulantes #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.
    en réponse à : Générateur liste déroulantes #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) !

    @+
    😎

    en réponse à : Générateur liste déroulantes #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.
    en réponse à : Générateur liste déroulantes #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.
    en réponse à : Assistant d’actions pour remplir en javascript #74578
    bebarth
    Maître des clés

    … pas tant que ça en fait ! La plupart des zones devraient être inaccessibles et les boutons radios décochées à l’ouverture de la boîte de dialogue.

    La fenêtre de script est également mal placée.

    Je n’est pas testé l’exécution du script.

    @+
    😎

    en réponse à : Assistant d’actions pour remplir en javascript #74574
    bebarth
    Maître des clés

    bonjour,
    Ça à l’air moins pratique qu’avec Acrobat, mais le script semble fonctionner depuis la console PDF-XChange !

    @+
    😎

    • Cette réponse a été modifiée le il y a 4 semaines par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Multiliste déroulante #74571
    bebarth
    Maître des clés

    bonjour,
    Voilà, je redonne l’ensemble des scripts qui ont, pour certains, un peu évolués :
    // Scripts de document
    //
    var nbDepart=0;
    for (var i=0; i<this.numFields; i++) {
    if (/^Départ\.\d+/.test(this.getNthFieldName(i))) nbDepart++;
    }
    var fichier=this.getDataObjectContents("Départ.csv");
    var donnees=util.stringFromStream(fichier);
    var lignes=donnees.split("\r\n");
    var colonnes=new Array();
    for (var ii=0 ; iivar colonne0=[];`
    for (var j=0 ; jif (colonnes[j][0]) colonne0.push([colonnes[j][0]]);`
    }
    for (var i=1; i<=colonne0.length; i++) {
    eval("var colonne"+(i+1)+"=[];");
    for (var j=0 ; jif (colonnes[j][i+1]) eval(“colonne”+(i+1)).push(colonnes[j][i+1]);`
    }
    }
    colonne0[0].push(0);
    for (var ii=1; ii<colonne0.length; ii++) {
    colonne0[ii].push(eval("colonne"+(i+1)))
    }
    // Fichier "Départ Arrivée.csv"
    var fichierDA=this.getDataObjectContents("Départ Arrivée.csv");
    var donneesDA=util.stringFromStream(fichierDA);
    var lignesDA=donneesDA.split("\r\n");
    var colonnesDA=new Array();
    for (var i=0 ; ifor (var i=1; i<=colonnesDA[0].length; i++) {`
    eval("var colonne"+(i+1)+"DA=[\"- Sélectionnez -\"];");
    for (var j=1 ; jif (colonnesDA[j][i+1]) eval(“colonne”+(i+1)+”DA”).push(colonnesDA[j][i+1]);`
    }
    }
    //
    var leCanal=this.getField("Canal").value;
    this.getField("Canal").clearItems();
    this.getField("Canal").setItems(colonne0);
    this.getField("Canal").value=leCanal;
    //
    function menuCanal(laValeur) {
    try {
    for (var i=0; i<nbDepart; i++) {
    this.getField("Départ."+i).clearItems();
    this.getField("Arrivée."+i).clearItems();
    }
    if (laValeur!=0) {
    var leMenu=laValeur.split(",");
    var ind=leMenu[0].substr("Canal ".length);
    leMenu[0]=["- Sélectionnez -",0];
    for (var ii=1; ii<leMenu.length; ii++) {
    leMenu[ii]=[leMenu[ii],eval("colonne"+(i+1)+"DA")];
    }
    for (var i=0; i<nbDepart; i++) {
    this.getField("Départ."+i).clearItems();
    this.getField("Départ."+i).setItems(leMenu);
    }
    }
    } catch(e) {}
    }
    //
    function menuDepart(ind,laValeur) {
    this.getField("Arrivée."+ind).clearItems();
    this.getField("Arrivée."+ind).setItems(laValeur.split(","));
    }
    function menuArrivee(leChamp) {
    try {
    var ind=leChamp.name.substring(leChamp.name.indexOf(".")+1);
    var laTable=this.getField("Départ."+ind).value.split(",");
    for (var i=0; i<nbDepart; i++) {
    if (i==ind) continue;
    for (j=0; j<leChamp.numItems; j++) {
    if (this.getField("Départ."+i).getItemAt(this.getField("Départ."+i).currentValueIndices,false)==this.getField("Départ."+ind).getItemAt(this.getField("Départ."+ind).currentValueIndices,false) && this.getField("Arrivée."+i).value==laTable[j]) laTable.splice(j,1);
    }
    }
    var lArrivee=leChamp.value;
    leChamp.clearItems();
    leChamp.setItems(laTable);
    leChamp.value=lArrivee;
    } catch(e) {}
    }
    //
    function cAc(arrivee) {
    if (this.getField("Canal").value && this.getField("Départ.0").value && arrivee!="- Sélectionnez -") {
    this.getField("Check Box1").display=display.noPrint;
    } else {
    this.getField("Check Box1").display=display.hidden;
    var modeles=this.templates;
    if (this.getField("Check Box1").value!="Off") {
    for (ii=0; ii<modeles.length; ii++) {
    if (modeles[ii].name=="page2") {
    this.deletePages(1);
    break;
    }
    }
    }
    this.getField("Check Box1").value="Off";
    this.pageNum=0;
    }
    }

    // Script de touches personnalisé Menu "Canal"
    if (!event.willCommit) {
    menuCanal(event.changeEx);
    cAc(this.getField("Arrivée.0").value);
    }
    // Script de touches personnalisé des Menus "Départ" sauf "Départ.0"
    if (!event.willCommit) {
    if (event.changeEx!=0) {
    menuDepart(event.target.name.substring(event.target.name.indexOf(".")+1),event.changeEx);
    cAc(this.getField("Arrivée.0").value);
    } else {
    this.getField("Arrivée."+event.target.name.substring(event.target.name.indexOf(".")+1)).clearItems();
    }
    }
    // Script de touches personnalisé Menu "Départ.0"
    if (!event.willCommit) {
    if (event.changeEx!=0) {
    menuDepart(event.target.name.substring(event.target.name.indexOf(".")+1),event.changeEx);
    cAc(this.getField("Arrivée.0").value);
    } else {
    this.getField("Arrivée."+event.target.name.substring(event.target.name.indexOf(".")+1)).clearItems();
    this.getField("Check Box1").display=display.hidden;
    var modeles=this.templates;
    if (this.getField("Check Box1").value!="Off") {
    for (ii=0; ii<modeles.length; ii++) {
    if (modeles[ii].name=="page2") {
    this.deletePages(1);
    break;
    }
    }
    }
    this.getField("Check Box1").value="Off";
    this.pageNum=0;
    }
    }

    // Ajout Script de touches personnalisé de TOUS les Menus "Départ" sauf "Départ.0"
    for (var i=1; i<30; i++) {
    this.getField("Départ."+i).setAction("Keystroke","if (!event.willCommit) {\r\tif (event.changeEx!=0) {\r\t\tmenuDepart(event.target.name.substring(event.target.name.indexOf(\".\")+1),event.changeEx);\r\t\tcAc(this.getField(\"Arrivée.0\").value);\r\t} else {\r\t\tthis.getField(\"Arrivée.\"+event.target.name.substring(event.target.name.indexOf(\".\")+1)).clearItems();\r\t}\r}");
    }

    // Script de touches personnalisé Menu "Arrivée.0"
    if (!event.willCommit) {
    if (event.changeEx!="- Sélectionnez -") cAc(event.changeEx);
    }

    // Souris entrée de tous les Menus "Arrivée"
    menuArrivee(event.target);

    // Ajout Script Souris entrée de TOUS les Menus "Arrivée"
    for (var i=0; i<30; i++) {
    this.getField("Arrivée."+i).setAction("MouseEnter","menuArrivee(event.target);");
    }

    // Script d'ouverture de page
    if (app.viewerType!="Exchange-Pro") this.viewState={overViewMode:2};
    this.viewState={overViewMode:5}

    // Script Affichage Page 2
    if (event.target.value!="Off") {
    var modeles=this.templates;
    for (ii=0; ii<modeles.length; ii++) {
    if (modeles[ii].name=="page2") {
    modeles[ii].spawn(1, false, false);
    break;
    }
    }
    this.pageNum=0;
    } else {
    this.deletePages(1);
    }

    // Ajouter page 4
    var modeles=this.templates;
    for (ii=0; ii<modeles.length; ii++) {
    if (modeles[ii].name=="page4") {
    modeles[ii].spawn(this.numPages-1, false, false);
    break;
    }
    }

    PS : Les [ii] dans les scripts ci-dessus sont en fait de simples “i” entre crochets dans le document joint. Il est donc préférable de se reporter aux scripts contenus dans le fichier ci-joint.

    @+
    😎

    • Cette réponse a été modifiée le il y a 4 semaines par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Assistant d’actions pour remplir en javascript #74565
    bebarth
    Maître des clés

    bonsoir,
    Pas de souci pour te le partager, mais sais-tu si tu peux ajouter un script d’application avec PDF-XChange ? Je n’ai pas l’impression…

    @+
    😎

    en réponse à : Multiliste déroulante #74564
    bebarth
    Maître des clés

    bonsoir,
    Je regarde ça demain… il faut utiliser la méthode spawn qui permet de dupliquer et supprimer des pages modèles avec Acrobat Reader.

    D’autre question, serait-il possible de dupliquer la page4 au besoin, et les pages dupliquer sera toujours avant la dernière page qui est p05? en respect toujours l’ordre des pages

    Pas de problème pour ça, mais peut-on dupliquer cette page plusieurs fois ou juste une fois ?

    @+
    😎

    en réponse à : Assistant d’actions pour remplir en javascript #74551
    bebarth
    Maître des clés

    Il ne faut pas faire de retours lignes mais l’équivalent JavaScript “\r” et il faut échapper les guillemets pour qu’ils soient interprétés correctement. Cela donne :
    this.addScript("init", "if (app.viewerVariation==\"Full\" || (app.viewerVariation!=\"Full\" && app.viewerVersion>=11)) {\rthis.getField(\"cache\").display=display.hidden;\rthis.dirty=false;\r}");

    @+
    😎

    en réponse à : Multiliste déroulante #74548
    bebarth
    Maître des clés

    Je ne me souviens pas où on les trouvait sous Acrobat Pro 9, mais voici ce que j’ai trouvé :
    https://answers.acrobatusers.com/Where-Page-Templates-Windows-Adobe-Acrobat-9-Pro-q21342.aspx
    Menu “Avancé”, sélectionnez “Pages modèles”… ensuite tu devrais les trouver.

    @+
    😎

    en réponse à : Multiliste déroulante #74543
    bebarth
    Maître des clés

    bonjour,
    A vérifier que le script de document “init” est bien intégré à ton fichier et que la page modèle se nome bien “page2”, sinon il faut adapter le script.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Assistant d’actions pour remplir en javascript #74542
    bebarth
    Maître des clés

    bonjour,
    Peux-tu coller dans une réponse ta ligne exacte ou faire une copie d’écran ?

    @+
    😎

    en réponse à : Assistant d’actions pour remplir en javascript #74526
    bebarth
    Maître des clés

    bonjour,
    Tu sais quoi ? Il y a 2 mois j’ai écris un utilitaire suite à une demande que j’avais eu.
    Je donne ici une version minifiée (car c’est un peu de boulot) d’un script qui peut être utilisé depuis l’assistant d’actions ou la console :

    var b2="ffea3337fff70000fff70000fff50f1aff3ca39eff00b0aaff00aea6ff00b4acff00b2aaff00aea6ff00aea6ff00b2abff93c1ccff92c7d7ff92c7d7ff9ccad7ff22b4abff00aea6ff00aea6ff00b4acff00afa8ff00aea6ff00aea6ff00b3abff00afa8ff00aea6ff00aea6ff00bab4ffea3337fff70000fff70000fff50f1aff23aba3ff00aea6ff00aea6ff00b3abff00afa8ff00aea6ff00aea6ff00b3abff00afa8ff00aea6ff00aea6ff00b5afff93c1ccff92c7d7ff92c7d7ff9ccad7ff00afa8ff00aea6ff00aea6ff00b5afff00aca7ff00aea6ff00aea6ff00b2aaffea3337fff70000fff70000ffea3337fff70000ffff0000ffff0000ffff0000ff009c96ff00aca0ff00aaa1ff00b2a8ff00aca3ff00aaa0ff00aaa0ff00b0a6ff84c4d3ff8ccfe6ff8ccfe6ff9bd3e7ff00aea6ff00aa9eff00aaa0ff00b2aaff00aca3ff00aaa0ff00aaa0ff00b2aaff00aba2ff00aaa0ff00aba1ff00b5adffec0000ffff0000ffff0000ffff0000ff00a59cff00ada3ff00aaa0ff00b2aaff00aba2ff00aaa0ff00aaa0ff00b3abff00aba2ff00aaa0ff00aaa0ff00b3abff89c5d5ff8ccfe6ff8ccfe6ff94d0e2ff00aba2ff00aaa0ff00aaa0ff00b3abff00aaa1ff00aba0ff00ada3ff00b1a8fff90000ffff0000ffff0000ffff0000ffec0000ffff0000ffff0000ffff0000ff009c96ff00ada3ff00aba1ff00b2aaff00ada6ff00aba0ff00aba1ff00b2a8ff84c4d3ff8ccfe6ff8ccfe6ff9bd3e7ff00b0aaff00aaa0ff00aba0ff00b5adff00aca3ff00aba1ff00aba1ff00b3abff00aca3ff00aba1ff00ada3ff00b5adffec0000ffff0000ffff0000ffff0000ff00a59cff00ada3ff00aba1ff00b3abff00aba2ff00aba1ff00aba1ff00b3abff00aba2ff00aba1ff00aba0ff00b3aaff89c5d5ff8ccfe6ff8ccfe6ff97d1e4ff00aca3ff00aba1ff00aba1ff00b3aaff00aba2ff00aca0ff00ada3ff00b1a8fff90000ffff0000ffff0000ffff0000fff50f1affff0000ffff0000ffff0000ff2ba19cff00b3acff00b2abff00b9b2ff00b2abff00b2aaff00b2aaff00b7afff92c7d7ff9bd3e7ff9bd3e7ffa6d6e7ff00b5afff00b2aaff00b2aaff00b9b3ff00b2abff00b2aaff00b2aaff00b8aeff00b2abff00b2aaff00b2aaff00b9b3fff50f1affff0000ffff0000ffff0000ff00aca7ff00b5adff00b2aaff00b9b3ff00aea6ff00b0a6ff00b2a8ff00b7afff00b1aaff00b2aaff00b2aaff00b9b3ff9ccad7ff9bd3e7ff9bd3e7ffa6d6e7ff00b1aaff00b2aaff00b2aaff00bbb4ff00b0aaff00b2abff00b2abff00b9b3fff70000ffff0000ffff0000ffff000fff3ca39eff009c96ff009c96ff2ba19cffb8ae91ffd5ad8fffd5ad8fffd1b49cff31aca5ff00ada5ff00ada5ff00b2abff22b4abff00b1aaff00b1aaff00b7b2ff00afa8ff00ada5ff00ada5ff00b4acff00afc5ff00aed3ff00aed3ff00b5d4ff00aca7ff00ada5ff00ada5ff00b4acff3ca39eff009c96ff009c96ff3ca39eff00aca7ff00ada5ff00ada5ff00b4acffdce6c1ffdce6c1ffd6dfbaffe6ecc5ff00afa8ff00ada5ff00ada5ff00b3abff00afa8ff00b2abff00b1aaff00b7b2ff00aca7ff00ada5ff00ada5ff00b3abffcbad93ffd5ad8fffd5ad8fffd1b49cff2ba19cff009c96ff009c96ff31aca5ff00b1a8ff00ada3ff00ada3ff00b2abffcbad93ffffac7effffac7effffb38aff00ada4ff00a9a0ff00aaa0ff00b2aaff00aca3ff00aaa0ff00aaa0ff00b0a6ff00aca3ff00aaa0ff00aaa0ff00b2aaff00aed6ff00ade7ff00ade7ff00b5e7ff00aca3ff00aaa0ff00aaa0ff00b3abff00ada5ff00ada3ff00ada3ff00b5adff00aba2ff00aaa0ff00aaa0ff00b2aafffeffceffb0a889ff83815bfffeffceff00aba2ff00aa9eff00aaa0ff00b3abff00aaa1ff00aaa0ff00aaa0ff00b2aaff00aba2ff00aba0ff00aaa0ff00b3aaffecaa88ffffac7effffac7efff7b591ff00aaa6ff00ada3ff00ada3ff00b8afff00aea6ff00aaa0ff00aba1ff00b2abffcbad93ffffac7effffad80ffffb58dff00ada4ff00aaa1ff00aba1ff00b2aaff00aca3ff00aba1ff00aba1ff00b2aaff00aca3ff00aba1ff00aba0ff00b2aaff00aed3ff00ade7ff00ade7ff00b5e7ff00ada7ff00aba0ff00aba1ff00b3abff00aca3ff00aba1ff00aba1ff00b3abff00aba2ff00aba1ff00aba1ff00b3abfff3f0c7ff7c7863ff615d48ffe6ddb4ff00b19fff00aba1ff00aba1ff00b3abff00aba2ff00aba1ff00aba1ff00b4acff00aba2ff00aca0ff00aba1ff00b3aaffe9ac8bffffad80ffffad80fff7b591ff00aaa1ff00ada3ff00aba0ff00b7afff00b4acff00b2aaff00b2aaff00b9b2ffe0b297ffffb38affffb58dffffb995ff00b2aaff00b2a8ff00b2abff00b9b2ff00b4acff00b2aaff00b2aaff00b9b3ff00b2abff00b2aaff00b2aaff00b8aeff00b5d8ff00b5e7ff00b5e7ff00bce5ff00b1aaff00b2a8ff00b2a8ff00b8aeff00b2abff00b2aaff00b2aaff00b9b3ff00b1aaff00b2a8ff00b2a8ff00b8aeffe6ecc5ffd9d0aaffe6ddb4ffd9d0aaff00b4acff00b2aaff00b2aaff00b9b3ff00b1aaff00b2aaff00b2aaff00b9b3ff00b0aaff00b2a8ff00b2abff00b9b3ffeeb192ffffb38affffb38afff2bb9bff00b1aaff00b2aaff00b2aaff00bbb4ff00b2aaff00ada5ff00ada5ff00b2abff31aca5ff00ada4ff00ada4ff00b2aaffb8ae91ffd5ad8fffd5ad8fffd1b49cff31aca5ff00ada5ff00ada5ff00b2abff00aca7ff00ada5ff00ada5ff00b2abff00aca7ff00aea9ff00aea9ff00b2abff87bdc8ff84c4d3ff84c4d3ff92c7d7ff00afa8ff00ada5ff00ada5ff00b4acff87bdc8ff84c4d3ff84c4d3ff92c7d7fffbf4c7ffe9e9b4ffd9d0aafffcf1c1ff00afa8ff00ada5ff00ada5ff00b4acff00aca7ff00ada5ff00ada5ff00b4acffcbad93ffd5ad8fffd5ad8fffd1b49cff31aca5ff00ada4ff00ada4ff22b4abff00ada4ff00ada5ff00ada5ff00bab2ff00ada5ff00aaa0ff00aba0ff00b2a8ff00aca3ff00a9a3ff00aaa1ff00b2abffd5ad8fffffac7effffac7effffb38aff00aca2ff00aba0ff00aba0ff00b2aaff00aca3ff00aba0ff00aba0ff00b2aaff00aca3ff00aaa1ff00aaa1ff00b2aaff89c5d5ff8ccfe6ff8ccfe6ff9bd3e7ff00ada6ff00aa9eff00aba0ff00b2aaff89c5d5ff8ccfe6ff8ccfe6ff97d1e4ffdce6c1ff8a866effb0a889ffe9e9b4ff00aca3ff00aba0ff00aba0ff00b3abff00aba2ff00aba0ff00aba0ff00b4acffe9ac8bffffac7effffac7efffbb38fff00aaa2ff00aba1ff00aaa1ff00b3abff00aaa2ff00aca0ff00aba0ff00b8afff00ada5ff00aaa0ff00aba1ff00b2aaff00ada6ff00aaa0ff00aba1ff00b2abffd5ad8fffffac7effffad80ffffb58dff00aca2ff00aba1ff00aba1ff00b2aaff00aca3ff00aba1ff00aba1ff00b2aaff00aca3ff00aba1ff00aba1ff00b2aaff89c5d5ff8ccfe6ff8ccfe6ff9bd3e7ff00ada5ff00aba1ff00a9a3ff00b2abff89c5d5ff9ed3e2ffaedbd6ffdce6c1ffe6ddb4ff8a866effc3be9affe9e9b4ff00aca3ff00aba1ff00aba1ff00b3abff00aba2ff00aba1ff00aba1ff00b4acffe9ac8bffffad80ffffad80fff7b591ff00aba2ff00ada3ff00aba1ff00b4acff00aaa2ff00ada3ff00aba0ff00b8afff00b2abff00b2aaff00b2aaff00b7afff00b4acff00b2aaff00b3abff00b9b2ffe0b297ffffb38affffb58dffffb995ff00b2aaff00b0a6ff00b2aaff00b7afff00b1aaff00b2a8ff00b2aaff00b7afff00b1aaff00b2aaff00b2aaff00b7afff92c7d7ff94d0e2ff94d0e2ff9bd3e7ff00b2abff00b2a2ff00c3a7ff80d7adffe9e9b4fffbf5aefffff7acfffffaabfffef8afffc3be9affbfb696ffe6ddb4ff00aca2ff00b2a8ff00b2aaff00b8aeff00b0aaff00b5adff00b5adff00b7aeffe0b297ffffb58dffffb58dfff2bb9bff00b1aaff00b3abff00b3abff00bbb4ff00b0aaff00b2aaff00b2aaff00bbb4ff93c1ccff84c4d3ff84c4d3ff92c7d7ff22b4abff00ada5ff00ada5ff00b2abff23aba3ff00ada4ff00ada4ff00b3abffdce6c1ffe6ecc5ffd6dfbaffe6ecc5ffe6ecc5ffdce6c1ffd6dfbaffe6ecc5ffdce6c1ffd6dfbaffd6dfbaffdce6c1fff3f0c7fff3f0c7fff3f0c7fff4edc0ffe9e9b4ffedf2adfffff9aefffefcaefffffaabfffff7aefffff6adfffff6adfffff7aefffeffb3fff4edc0fff4edc0ffe6ecc5ffdce6c1ffdce6c1ffe6ecc5ffe6ecc5ffc9d3b0ffc9d3b0ffe6ecc5fff4edc0ffd9d0aaffd9d0aaffe9e9b4ff00aca7ff00ada5ff00ada5ff00b5afff87bdc8ff84c4d3ff84c4d3ff9ccad7ff92c7d7ff8ccfe6ff8ccfe6ff9bd3e7ff00b1aaff00a89fff00aba0ff00b2aaff00aca3ff00aba1ff00aba1ff00b2abffe6ecc5fffeffceff959075fffcf1c1fffeffceffb8ae91ff726e51fffeffcefffcf1c1ffa69d7fffb8ae91ffece4a1fffefcb4fffff7aefffff7aefffff7acfffff9aefffff9aefffff7aefffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffffab0ffd6d294ffe9e9b4fffeffceffc3be9affbfb696fffeffcefffcf1c1ff7c7863ff726e51ffe6ddb4fffafccaff959075ff959075fff3f0c7ff00aba2ff00aba0ff00aba0ff00b4acff92c7d7ff8ccfe6ff8ccfe6ff9bd3e7ff92c7d7ff8ccfe6ff8ccfe6ff9bd3e7ff00b1aaff00aaa0ff00aba1ff00b2aaff00ada6ff00aba0ff00aba0ff00b0a6ffe6ecc5ffb8ae91ff7c7863fff3f0c7fffbf4c7ff7c7863ff726e51ffe9e9b4fffefcb4fff3eba3fffef5acfffff8aefffff6acfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffffab0fff9f2b3fffeffceffbfb696ffb8ae91fffeffcefff4edc0ff7b7757ffb8ae91fffcf1c1fffeffceffbfb696ffbfb696fffafccaff00aaa1ff00aba1ff00aba0ff00b4acff92c7d7ff8ccfe6ff8ccfe6ff9bd3e7ff9ccad7ff9bd3e7ff9bd3e7ffa6d6e7ff00b7b2ff00b2aaff00b3abff00b9b3ff00b4acff00b2aaff00b2aaff00b3abffe6ecc5ffc8ca9bffc8ca9bffe9e9b4fff9f2b3ffe4dd9cfffcf5acfffff7aefffff7aefffff9aefffff7aefffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff7aefffff6acfffbf4c7ffe6ddb4ffe6ddb4ffe6ecc5fffcf1c1ffd9d0aafffeffceffe6ddb4fffbf4c7ffe6ddb4ffe9e9b4ffe9e9b4ff00b1aaff00b3abff00b2aaff00bbb4ff9ccad7ff9bd3e7ff9bd3e7ffa6d6e7ff22b4abff00b0aaff00b0aaff00b5afff00afa8ff00aca3ff00aca3ff00b0aaff00aaa3ff00aba2ff00b3abff58c5a6ffc4deb1fffef8affffefcb4fffef5acfffff7acfffefdb1fffff8aefffff8aefffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff7acfffff7a9fff2bb9bffeeb192ffe0b297ff22b4abff00b4a6ff00b0a4ff00b2aaff23aba3ff00b4a6ff00b2abff22b4abff00aaa3ff00ada6ff00aca3ff00b4acff00afa8ff00b0aaff00b0aaff00b7b2ff00ada5ff00aa9eff00aaa0ff00b2a8ff00aba2ff00a7a1ff00b0a6ff00c3aaff80d7adffabe3a9ffedf2adfffffaabfffff9aefffff8aefffff7aefffff7aefffff8aefffefdb1fffdffb9fffdffb5fffefdb1fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff9aefff8f0a8ffffac7efffbb38fff00aba2ff00a9a0ff00aaa1ff00b3abff00aaa2ff00aba1ff00aaa0ff00b3abff00aaa1ff00aca0ff00aba1ff00b4acff00aaa2ff00aba0ff00aa9eff00b4acff00ada5ff00aaa0ff00aaa0ff00b2abff40bfaeffabe3a9ffedf2adfffff9aefffefcaefffefcaefffff9aefffff7aefffff7aefffff7aefffff7aefffffab0fffffab0ffddd99affaca776ff696649ffa4a071fffdffb9fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6acfffefcaefffce1a2fff7b591ff00aba2ff00aba1ff00aba1ff00b4acff00aba2ff00aca0ff00aba1ff00b3aaff00aba2ff00aca0ff00aba1ff00b4acff00aaa1ff00ada3ff00aba0ff00b7afff00b4acff00b3abff00b3abff00b7afffedf2adfffef8affffef8affffef7aefffff7acfffff7aefffff7aefffff7aefffff7aefffff7aefffefdb1ffe4dd9cff4d4c36ff2b2b1eff181712ff14130fff2b2b1effece4a1fffeffb3fffff7aefffff7aefffff7aefffff8affffeffb3fffdffb9fffdffb9fffdffb5fffdffb9fffdffb5fffefdb1fffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff9aefffce1a2ff00b0aaff00b3abff00b3abff00bbb4ff00b1aaff00b3abff00b3abff00bbb4ff00b1aaff00b3abff00b3abff00bbb4ff00b1aaff00b3abff00b3abff00beb7ff00afa8ff00aca3ff00aca3ff00aea9ffcce3b0fffff7a9fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffffab0fff7f8b0ff4d4c36ff161510ff242419ff242419ff161510ff7b7757fffdffb9fffff8aefffff7aefffeffb3fffdffb5ffe4dd9cffaca776ff8a8560ff7b7757ff8a8560ffb4af7bffe4dd9cfffdffb5fffefdb1fffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffffab0ff72c5adff00aba2ff00aca3ff00b2abff00ada4ff00aca3ff00aca3ff00b4acff00accbff00aed3ff00aed3ff00b5d4ff00aaa3ff00ada6ff00aba2ff00bab2ff00ada5ff00aaa0ff00aba1ff00b2abff72c5adfffef5acfffef6acfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffdffb5ffcac48aff1e1d15ff242419ff242419ff212017ff212017ffd0ca8dfffdffb5fffdffb5ffddd99aff696649ff29291cff181712ff161510ff181712ff161510ff181712ff2b2b1eff726e51ffddd99afffdffb5fffff7aefffff6adfffff6adfffff6adfffff6adfffff6adfffff8aeffedf2adff00bda5ff00a7a1ff00b3abff00aba2ff00aca0ff00aba0ff00b4acff00abd8ff00afe9ff00ade7ff00b5e7ff00aaa1ff00aca0ff00aba0ff00b8afff00ada5ff00aaa0ff00aba1ff00b2abff00afc5ffece4a1fffff6acfffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff8affffeffb3ff696649ff181712ff242419ff25241aff181712ff5c593ffffdffb9ffddd99aff313022ff14130fff212017ff242419ff212017ff212017ff242419ff242419ff212017ff161510ff29291cffa4a071fffdffb5fffff9aefffff6adfffff6adfffff6adfffff6adfffef6acfffefcaeffe9e9b4ff00b2a2ff00b2aaff00aba2ff00aca0ff00aba0ff00b3aaff00abd8ff00ade7ff00ade7ff00b5e7ff00aaa1ff00aca0ff00aba0ff00b7afff00b3abff00b3abff00b3abff00b8aeff00b5d8ffb6d6adfffff7acfffff6adfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffdffb5ffd4cc8dff201f17ff212017ff242419ff242419ff1b1b13ffb4af7bff696649ff181712ff242419ff181712ff1e1d15ff2b2b1eff2b2b1eff1b1b13ff1b1b13ff242419ff242419ff1f1e16ff161510ff8a8560fffdffb5fffff8aefffff6adfffff6adfffff6adfffff6adfffef6adfffefcaeffabe3a9ff00b7aeff00b1aaff00b2aaff00b2aaff00bbb4ff00b5d8ff00b5e7ff00b5e7ff00bce5ff00b1aaff00b4acff00b3abff00beb7ff00afa8ff00aca3ff00aca3ff00b1aaff00aca2ff74c19bfffdf2a9fffef5acfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff8affffdffb5ff726e51ff181712ff242419ff242419ff212017ff313022ff2b2b1eff212017ff1e1d15ff696649ffc4c187ffe4dd9cffddd99affb4af7bff4d4c36ff181712ff242419ff242419ff212017ff161510ff999468fffdffb9fffff6adfffff6adfffff6adfffff6adfffff6adfffef6adfffff9aeffc4deb1ff87bdc8ff89c5d5ff89c5d5ff92c7d7ff00ada4ff00ada6ff00ada6ff00b4acff00aaa3ff00aca3ff00aca3ff00bab2ff00ada5ff00aaa0ff00aba1ff00b2a8ff00aba2ff00b19fffece4a1fffff6acfffff7aefffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffeffb3ffddd696ff25241aff212017ff242419ff242419ff212017ff212017ff1b1b13ff8a8560fffdffb9fffdffb9fffeffb3fffeffb3fffdffb9fff7f8b0ff696649ff181712ff242419ff242419ff201f17ff1e1d15ffc4c187fffdffb5fffff6adfffff6adfffff6adfffef6adfffef6adfffff7acfffff7a9ffb8d9caff8ccfe6ff8ccfe6ff97d1e4ff00aba2ff00aba1ff00aba0ff00b4acff00aaa2ff00ada3ff00aba0ff00b8afff00ada5ff00aba1ff00ada3ff00b2a8ff00ada7ff00aaa0ffa5c894fffef5acfffef5acfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff8aefffdffb9ff7b7757ff161510ff242419ff242419ff242419ff212017ff313022ffece4a1fffeffb3fffff7aefffff7aefffff7aefffff7aefffeffb3fffefcb4ff5c593fff181712ff242419ff242419ff1b1b13ff42412efff8f0a8fffffab0fffff6adfffff7aefffefdb1fffdffb5fffeffb3fffff8aefffff7a9ff9ed3e2ff8ccfe6ff97d1e4ff00aba2ff00aba1ff00aba1ff00b4acff00aaa2ff00ada3ff00aca0ff00b8afff00b4acff00b3abff00b5adff00b9b3ff00b4acff00b3abff4eba9cfff8f0a8fffef5acfffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffeffb3ffe4dd9cff2b2b1eff212017ff242419ff242419ff201f17ff383626fff3eba3fffefdb1fffff7aefffff7aefffff7aefffff7aefffff7aefffeffb3ffece4a1ff313022ff201f17ff242419ff242419ff161510ff9f9a6cfffdffb9fffff7aefffeffb3ffd6ce90ff9f9a6cffbdb882fffff7aefffefcaeffedf2adff9ed3e2ff97d1e4ff00b2abff00b3abff00b3abff00bbb4ff00b7aeff00b5adff00b3abff00beb7ffea3337ffec0000ffec0000fff50f1aff3ca39eff00ada7ff00aca2ffd6d294fffff7acfffef6acfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffdffb9ff83815bff161510ff242419ff242419ff242419ff1e1d15ffcac48afffdffb5fffff7aefffff7aefffff7aefffff7aefffff7aefffef7aefffdffb9ff999468ff181712ff242419ff242419ff181712ff4d4c36fffcf5acfffeffb3ff938f64ff42412eff83815bff5c593fff615d48fff3eba3fffefcaeffcce3b0ff00b5afff00aaa3ff00aca3ff00ada6ff00ada4ffea3337ffec0000ffec0000ffea3337fff70000ffff0000ffff0000ffff0000ff009c96ff00ada3ff00a9a3ff74c19bfffdf2a9fffff6acfffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffeffb3ffece4a1ff313022ff201f17ff242419ff242419ff181712ff696649fffdffb9fffff8affffff7aefffff7aefffff7aefffff7aefffff7aefffeffb3ffe4dd9cff2b2b1eff212017ff242419ff212017ff212017ffd6ce90fffeffb3ff383626ffb4af7bfffdffb9fffdffb9ff5c593fff83815bfffdffb5fffff7a9ffa1ddb1ff00a6a1ff00aca0ff00ada3ff00b1a8fff90000ffff0000ffff0000ffff0000fff70000ffff0000ffff0000ffff0000ff009c96ff00ada3ff00aba1ff00b19fffe4dd9cfffff7aefffff6adfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffdffb9ff938f64ff161510ff242419ff242419ff242419ff212017ffcac48afffdffb9fffff7aefffff7aefffff7aefffff7aefffff7aefffffab0fffdf4abff42412eff1e1d15ff242419ff242419ff181712ffb4af7bfffdffb9ff7b7757ff938f64fffdffb5fffdffb9ff7b7757ff696649fffdffb5fffef5acfffffaabff58c5a6ff00a9a3ff00ada3ff00ada7fff90000ffff0000ffff0000ffff0000ffea3337ffff0000ffff0000ffff0000ff31aca5ff00b4acff00b4acff00b7afffc8ca9bfffff7a9fffef5acfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffefdb1fff3eba3ff383626ff1f1e16ff242419ff242419ff1b1b13ff42412effece4a1fffdffb9fffff7aefffff7aefffff7aefffff7aefffeffb3fff3eba3ff313022ff201f17ff242419ff242419ff161510ffaca776fffdffb9fff8f0a8fff3eba3fffeffb3ffe4dd9cff313022ffcac48afffeffb3fffff8aefffff9aeffedf2adff00c2a9ff00b2aaff00bab4fff50f1affff0000ffff0000ffff000fff23aba3ff00a59cff00a59cff00aaa3ff00aca7ff00aba2ff00aca3ff00b0aaffa2bfacfff3eba3fffff7aefffff7aefffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffdffb9ff9f9a6cff161510ff242419ff242419ff25241aff1b1b13ff42412effd6d294fffdffb9fffdffb9fffdffb5fffdffb9fffeffb3ff7b7757ff1b1b13ff242419ff242419ff242419ff181712ffbdb882fffdffb5fffff8affffff9aefffeffb3ff696649ff726e51fffdffb9fffdffb5ffece4a1ffece4a1fffff8aeffedf2adff00b4a6ff00aca2ff00aaa3ff00a59cff00a59cff00b2aaff00aea9ff00ada3ff00ada3ff00b2abff00ada6ff00aaa0ff00aba1ff00b2abff87bdc8ffddd99afffdf4abfffef5acfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffefdb1fff8f0a8ff42412eff1b1b13ff242419ff242419ff25241aff1b1b13ff29291cff7b7757ffbdb882ffc4c187ffa4a071ff4d4c36ff1e1d15ff25241aff242419ff242419ff1b1b13ff383626fff3eba3fffffab0fffef6adfffff9aefff8f0a8ff383626ffd6ce90ffe4dd9cff7b7757ff313022ff999468fffeffb3fffff7acffabe3a9ff00b4acff00aaa6ff00ada3ff00ada3ff00b8afff00ada5ff00aaa0ff00aba1ff00b2aaff00ada6ff00aaa0ff00aca0ff00b0a6ff7fc4d7ffb4ccb9fff8f0a8fffff6acfffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffdffb9ffa4a071ff181712ff242419ff242419ff242419ff242419ff212017ff181712ff1b1b13ff1e1d15ff181712ff1b1b13ff242419ff242419ff242419ff1e1d15ff161510ffaca776fffdffb5fffff6adfffef6adfffff7aefffefdb1ff5c593fff42412eff383626ff696649ffd0ca8dfffcf5acfffef5acfffdf2a9fffff7a9ffa1ddb1ff00a6a1ff00ada3ff00aba0ff00b8afff00b3abff00b3abff00b3abff00b9b3ff00b4acff00b3abff00b4acff00b8aeff92c7d7ffa7cfc6ffe4dd9cfffff7acfffef6adfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffffab0fffbf5aeff42412eff1e1d15ff242419ff242419ff242419ff242419ff25241aff181712ff1e1d15ff242419ff242419ff212017ff1e1d15ff14130fff2b2b1effa4a071fffdffb5fffff7aefffff6adfffef6adfffef6acfffeffb3ffc4c187ff83815bffe4dd9cfffdffb5fffefdb1fffdf4abfffdf2a9fffef6adfffefdb1fff9f2b3ff00b0aaff00b4acff00b3abff00beb7ff00afa8ff00aba2ff00aba2ff00b0a4ff00afc5ff00aed6ff00aed6ff00b5d8ff00aca7ff00aca3ffa5c894fffdf4abfffef5acfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffdffb9ffb4af7bff181712ff242419ff242419ff242419ff201f17ff42412eff8a8560ff42412eff242419ff1f1e16ff27251bff42412eff8a8560ffe4dd9cfffdffb5fffff7aefffff6adfffef6adfffef6adfffef5acfffef5acfffffab0fffdffb5fffffab0fffdf4abfffdf4abfffef7aefffefdb1fffefcaefff3eba3ff62c6c4ff00a7a5ff00aca3ff00aca3ff00b5afff00ada5ff00aaa0ff00aba1ff00b2a8ff00aed3ff00ade7ff00ade7ff00b5e7ff00ada7ff00a9a3ff02b69efffce1a2fffff7acfffff6adfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffffab0fffffab0ff4d4c36ff1b1b13ff242419ff242419ff242419ff181712ffb4af7bfff7f8b0ffd6d294ffcac48affddd696fffdf4abfffdffb9fffefdb1fffff6adfffff6adfffff6adfffef6adfffef6adfffef5acfffef5acfffef5acfffdf4abfffdf4abfffef7aefffefdb1fffef8affff3eba3ffeed78fff40bfaeff00b5e7ff00aaa2ff00aca0ff00aba0ff00b8afff00ada5ff00aaa0ff00aba0ff00b2a8ff00aed3ff00ade7ff00ade7ff00b5e7ff00ada6ff00aca0ff00aca0ffbbcc9bfffff7acfffef5acfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffdffb9ffbdb882ff1b1b13ff212017ff181712ff1b1b13ff42412effaca776fffdffb5fffeffb3fffdffb5fffefdb1fffff8affffff6adfffff6adfffff6adfffff6adfffff6adfffef6adfffef6acfffef5acfffdf4abfffef5acfffff8affffefdb1fffef6adffece4a1ffddd696ffdfcc8cff72c5adff00ade7ff00b5e7ff00aaa1ff00aca0ff00aba0ff00b8afff00b3abff00b3aaff00b3aaff00b9b3ff00b5d4ff00b7e4ff00b5e7ff00bce5ff00b5afff00b4acff00b4acff74c19bfffdf2a9fffef5acfffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff9aefffeffb3ff5c593fff1b1b13ff696649ffbdb882fffbf5aefffdffb5fffff7aefffff7aefffff7aefffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffef6adfffef5acfffef5acfffff9aefffffab0fffcf5acffece4a1ffd6d294ffd4cc8dffdfcc8cffbbcc9bff00b7e4ff00b7e4ff00bce5ff00b2abff00b4acff00b3aaff00beb7ff00afa8ff00aba2ff00aba2ff00b1aaff00aca7ff00aca3ff00aca3ff00b1aaff00aca7ff00aba2ff00aba2ff00ada4ffddd99afffff8aefffef5acfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffefcb4ffddd99affd6ce90fffdffb5fffdffb5fffffab0fffff7aefffff7aefffff7aefffff7aefffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffef5acfffef6adfffff9aefffffab0fff8f0a8ffece4a1ffd6ce90ffd4cc8dffdfcc8cffd0ca8dffa5c894ff00aaa3ff00ada7ff00aca3ff00b2abff00aaa3ff00aca3ff00aca3ff00b5afff00ada5ff00aaa0ff00aba1ff00b2a8ff00ada6ff00aaa0ff00aba0ff00b2aaff00ada6ff00aba0ff00aca0ff00b3acffbbcc9bfffdf2a9fffff6acfffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffeffb3fffeffb3fffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff6adfffff6adfffff7aefffff6acfffef5acfffef6adfffffab0fffff9aefff8f0a8ffe4dd9cffd6ce90ffd4cc8dffdfcc8cffd4cc8dff74c19bff00b0a4ff00b5adff00aaa2ff00aca0ff00aba0ff00b4acff00aaa2ff00ada3ff00aba0ff00b8afff00ada5ff00aaa0ff00aba0ff00b2a8ff00ada6ff00aaa0ff00aba1ff00b2aaff00ada6ff00aba0ff00aaa0ff00b2abff4eba9cffece4a1fffff8aefffef6adfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff8aefffff6adfffef5acfffef5acfffef6adfffffab0fffff8affff3eba3ffddd99affd6ce90ffd0ca8dffdfcc8cffc2ca8fff8ac497ff00b0a4ff00aba1ff00aba0ff00b3aaff00aaa1ff00aca0ff00aba1ff00b4acff00aaa2ff00aca0ff00aba0ff00b8afff00b5afff00b3aaff00b3aaff00b9b3ff00b5afff00b3aaff00b3aaff00b9b3ff00b5afff00b3aaff00b3aaff00b9b3ff00b2aaffbbcc9bfffff7a9fffef5acfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff8aefffff7aefffef6acfffef5acfffef6adfffff9aefffef6adfff3eba3ffddd696ffd4cc8dffd4cc8dffdfcc8cffd6ce90ff98c7a7ff00b4a6ff00b9b3ff00b1aaff00b3aaff00b3aaff00bab4ff00b2abff00b3aaff00b3aaff00bab4ff00b2abff00b3aaff00b3aaff00beb7ff93c1ccff89c5d5ff89c5d5ff9ccad7ff00b2aaff00aba2ff00aca3ff00b1aaff00aca7ff00aba2ff00aba2ff00b0aaffcbad93ffddba87fff3eba3fffff7aefffff6adfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff8aefffff7aefffef6acfffef5acfffef6adfffff8affffef5acffece4a1ffddd696ffd4cc8dffd4cc8dffdfcc8cffc2ca8fff74c19bffd1a989ffd5ad8fffe9ac8bffe0b297ff00aaa3ff00aca3ff00aba2ff00b2abff00aaa3ff00aca3ff00aba2ff00b2abff93c1ccff92c7d7ff89c5d5ff9ccad7ff9ccad7ff8ccfe6ff8ccfe6ff9bd3e7ff00b1aaff00aaa0ff00aba1ff00b2aaff00ada6ff00aba0ff00aba1ff00b2abffd5ad8fffffad80ffddd99afffff8aefffef5acfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff8aefffff7aefffef5acfffdf4abfffef6adfffff8aefffdf2a9ffece4a1ffddd696ffd0ca8dffd4cc8dffdfcc8cffc2ca8fff4eba9cff00b2a2ff00b5adffe9ac8bffffac7effffac7efff7b591ff00aca3ff00ada3ff00aba1ff00b4acff00aaa1ff00aca0ff00aba0ff00b4acff92c7d7ff8ccfe6ff8ccfe6ff9bd3e7ff92c7d7ff8ccfe6ff8ccfe6ff9bd3e7ff00b1aaff00aaa0ff00aba1ff00b2aaff00ada7ff00aba0ff00aba1ff00b3acffd5ad8fffffac7effe6c08dfff8f0a8fffef6adfffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff8aefffff7aefffef5acfffdf4abfffef6acfffff7aefff8f0a8ffece4a1ffd6d294ffd4cc8dffd4cc8dffdfcc8cffa5c894ff58c5a6ff00aca3ff00aaa1ff00aaa1ff00b3abffe9ac8bffffac7effffac7efffbb38fff00aba2ff00ada3ff00aba1ff00b4acff00aaa1ff00aca0ff00aba1ff00b4acff92c7d7ff8ccfe6ff8ccfe6ff9bd3e7ff9ccad7ff94d0e2ff97d1e4ffa6d6e7ff00b7b2ff00b4acff00b3aaff00b9b3ff00b5afff00b4acff00b4acff00b9b3ffd1b49cfffbb38fffe6c08dffece4a1fffef7aefffef5acfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff8aefffff7aefffef5acfffdf4abfffef5acfffff6acfff8f0a8ffe4dd9cffd6ce90ffd4cc8dffd4cc8dffd4cc8dffc8ca9bff74c19bff00b8aeff00b9b3ff00b2abff00b4acff00b3aaff00bab4ffe0b297fffbb38ffffbb38ffff2bb9bff00b4acff00b4acff00b4acff00bab4ff00b2abff00b4acff00b3aaff00bab4ff9ccad7ff97d1e4ff94d0e2ffa6d6e7ff00afa8ff00aba2ff00aca3ff00b1aaff00aca7ff00aca3ff00aca3ff00b0aaffcbad93ffecaa88ffe9ac8bffeeb192ff23aba3ff00aba2ff00aca2ffbbcc9bfffff6acfffef5acfffff7aefffff7aefffff7aefffff8aefffff8aefffff7aefffef5acfffdf4abfffef5acfffff6acfff3eba3ffe4dd9cffd6ce90ffd0ca8dffd4cc8dffd4cc8dffc8ca9bffb4ccb9ff00aaa3ff00aaa6ff00aba2ff00b2abff00aaa3ff00aca3ff00aca3ff00b2abff00aaa3ff00aca3ff00aca3ff00b2abffd5ad8fffe9ac8bffe9ac8bffe0b297ff00aaa3ff00aca3ff00aca3ff00b2abff00aca2ff00ada7ff00aca3ff00b5afff00ada5ff00aaa0ff00aba1ff00b2a8ff00ada6ff00aaa0ff00aca0ff00b3acffd5ad8fffffac7effffad80ffffb38aff00aca2ff00ada3ff00aba1ff4eba9cfff3eba3fffff7aefffef6adfffff9aefffff8affffff7aefffef5acfffdf2a9fffef5acfffdf4abfff3eba3ffddd99affd6ce90ffd4cc8dffdfcc8cffdfcc8cffc8ca9bffa7cfc6ff8ccfe6ff9bd3e7ff00ada7ff00aca0ff00aca0ff00b3abff00aba2ff00aca0ff00aca0ff00b3abff00aaa1ff00aba1ff00aba1ff00b4acffe9ac8bffffac7effffac7efff7b591ff00aba2ff00ada3ff00aca0ff00b4acff00aaa2ff00ada3ff00aba0ff00b8afff00ada5ff00aaa0ff00aba1ff00b2a8ff00ada7ff00aaa0ff00aba1ff00b3acffd5ad8fffffac7effffad80ffffb38aff00aca2ff00aba1ff00aba1ff00b2a2ffddd696fffff8aefffef5acfffff7aefffef5acfffdf2a9fffef5acfffdf2a9fff3eba3ffddd99affd4cc8dffd4cc8dffd4cc8dffdfcc8cff8ac497ff22b4abff84c4d3ff8ccfe6ff8ccfe6ff97d1e4ff00ada7ff00aba0ff00aba0ff00b3abff00aba2ff00aba1ff00aba1ff00b3abff00aba2ff00aba1ff00aba1ff00b3aaffe9ac8bffffac7effffac7efff7b591ff00aaa1ff00ada3ff00aba1ff00b3abff00aaa2ff00ada3ff00aba0ff00b8afff00b5afff00b4acff00b4acff00b9b3ff00b5afff00b4adff00b4adff00b9b3ffd1b49cfffbb38ffff7b591fff2bb9bff22b4abff00b4acff00b4acff00b9b3ffbbcc9bfff8f0a8fffff7acfffdf4abfffdf4abfffdf2a9ffece4a1ffddd696ffd4cc8dffd4cc8dffdfcc8cffdfcc8cffbbcc9bff40bfaeff00b1a8ff00b9b3ff92c7d7ff9bd3e7ff97d1e4ff9ed3e2ff00b5afff00b4acff00b4acff00bab4ff00b4acff00b4acff00b4acff00bab4ff00b4acff00b4acff00b4acff00bab4ffe0b297fff7b591fff7b591fff2bb9bff00b4acff00b4adff00b4adff00bab4ff00b2abff00b4acff00b4acff00beb7ff00aca7ff00aba2ff00aba2ff00aea9ffcbad93ffecaa88ffe9ac8bffeeb192ff23aba3ff00aba2ff00aba2ff00b1aaff00ada4ff00aca3ff00aba2ff00aea9ff4eba9cffddd696fff8f0a8fffdf2a9ffece4a1ffddd696ffd4cc8dffd4cc8dffdfcc8cffd6ce90ff8ac497ff02b69eff00a7a5ff00aaa6ff00aba2ff00b1aaff00aaa3ff00aca3ff00aba2ff00b1aaff00accbff00aed6ff00abd8ff00b5d8ff00aaa3ff00aba2ff00aca3ff00b1aaff00aaa3ff00aba2ff00aba2ff00b2abff00aaa3ff00aca3ff00aba2ff00b2abffd5ad8fffecaa88ffecaa88ffe0b297ff00aca2ff00aba2ff00aba2ff00b5afff00aea6ff00aba0ff00aca0ff00b3acffd5ad8fffffac7effffad80ffffb38aff00ada4ff00aba1ff00ada3ff00b2aaff00ada7ff00aca0ff00aca0ff00b2a8ff00ada5ffa5c894ffdfcc8cffd6ce90ffd4cc8dffd4cc8dffdfcc8cffdfcc8cff8ac497ff00b0a4ff00ada3ff00b2aaff00aca3ff00aca0ff00aca0ff00b3abff00aba2ff00aba1ff00aba1ff00b3abff00aed6ff00afe9ff00ade7ff00b5e7ff00ada5ff00aca0ff00aca0ff00b3abff00aba2ff00aca0ff00aca0ff00b4acff00aba2ff00ada3ff00ada3ff00b4acffecaa88ffffac7effffac7efff7b591ff00aaa1ff00ada3ff00aca0ff00b8afff00aea9ff00ada3ff00ada3ff00b2abffd5ad8fffffac7effffad80ffffb38aff00ada4ff00aaa1ff00aba1ff00b2aaff00aca3ff00aba0ff00aba0ff00b2a8ff00aaa6ff4eba9cffdfcc8cffd4cc8dffdfcc8cffc8ca9bff72c5adff00b5d4ff00aaa6ff00aaa0ff00aba1ff00b3abff00ada5ff00ada3ff00ada3ff00b5adff00aca3ff00aba1ff00aba1ff00b3abff00aed6ff00ade7ff00ade7ff00b5e7ff00aba2ff00aba0ff00aba1ff00b3abff00aaa1ff00aba0ff00aba0ff00b3abff00aba2ff00aca0ff00aba1ff00b3aaffecaa88ffffac7effffac7efff7b591ff00aaa2ff00ada3ff00ada3ff00b8afff00b2aaff00b1a8ff00b1a8ff00b7aeffd1b49cfff7b591fff7b591fff2bb9bff22b4abff00b4acff00b4acff00bbb4ff00b5afff00b4adff00b4adff00bbb4ff00b4acff00b7aeffbbcc9bffd4cc8dff98c7a7ff00b5d4ff00b5e7ff00bce5ff00b5afff00b4acff00b4acff00bbb4ff00b3abff00b1a8ff00b1a8ff00bab4ff00b4acff00b4acff00b4acff00bbb4ff00b5d4ff00b7e4ff00b7e4ff00bce5ff00b4acff00b4acff00b4acff00bab4ff00b4acff00b4adff00b4adff00bab4ff00b4acff00b4acff00b4acff00bab4ffe0b297fff7b591fff7b591fff2bb9bff00b2abff00b1a8ff00b1a8ff00bab2ffea3337fff90000fff90000fff70000ff2ba19cff00ada5ff00aba2ff00b0a4ff00aaa3ff00aba2ff00aba2ff00aea6ff87bdc8ff92c7d7ff92c7d7ff9ccad7ff00aca7ff00aaa1ff00aaa2ff00b0a4ff00a7a5ff00aaa2ff00aba2ff00b0aaff00aaa3ff00aba2ff00aba2ff00b0aaffea3337fff90000fff90000fff70000ff00aaa3ff00ada5ff00aaa1ff00b1aaff00aaa3ff00aba2ff00aba2ff00b1aaff00aca2ff00aba2ff00aba2ff00b1aaff93c1ccff92c7d7ff92c7d7ff9ccad7ff00aca2ff00aba2ff00aba2ff00b1aaff00aca2ff00aba2ff00aba2ff00b0a4fff50f1afff90000fff90000fff50f1afff70000ffff0000ffff0000ffff0000ff009c96ff00ada3ff00ada3ff00b2a8ff00ada6ff00aca0ff00ada3ff00b2a8ff84c4d3ff8ccfe6ff8ccfe6ff9bd3e7ff00b0aaff00aba0ff00ada3ff00b5adff00aca3ff00ada3ff00aca0ff00b3abff00ada7ff00ada3ff00ada3ff00b5adffec0000ffff0000ffff0000ffff0000ff00a59cff00ada3ff00ada3ff00b3abff00aba2ff00aca0ff00aca0ff00b3abff00ada5ff00ada3ff00aca0ff00b4acff89c5d5ff8ccfe6ff8ccfe6ff9bd3e7ff00ada5ff00ada3ff00ada3ff00b4acff00aaa1ff00ada3ff00ada3ff00b3aafff90000ffff0000ffff0000ffff0000fff70000ffff0000ffff0000ffff0000ff009c96ff00ada3ff00aba0ff00b2aaff00aca3ff00aba0ff00aba0ff00b0a6ff84c4d3ff8ccfe6ff8ccfe6ff9bd3e7ff00b0aaff00aa9eff00aba0ff00b2aaff00aca3ff00aba0ff00aba0ff00b3abff00aca3ff00aba0ff00aca0ff00b5adffec0000ffff0000ffff0000ffff0000ff00a59cff00ada3ff00aba0ff00b3abff00aba2ff00aba0ff00aba0ff00b3abff00aba2ff00aba0ff00aba0ff00b3abff89c5d5ff8ccfe6ff8ccfe6ff94d0e2ff00aba2ff00aba0ff00aba0ff00b3aaff00aaa1ff00aca0ff00ada3ff00b1a8fff90000ffff0000ffff0000ffff0000ffea3337ffff0000ffff0000ffff000fff3ca39eff00b9b2ff00b7afff00bbb4ff00bab2ff00b7afff00b7afff00bbb4ff9ccad7ff9bd3e7ff9bd3e7ffa6d6e7ff00b7b2ff00b7afff00b7afff00beb7ff00b5afff00b7afff00b7afff00beb7ff00bab2ff00b7afff00b7afff00beb7ffea3337ffff0000ffff0000ffff000fff00b2aaff00b9b2ff00b7afff00beb7ff00b5afff00b7afff00b7afff00beb7ff00b5afff00b7afff00b7afff00beb7ff9ccad7ffa6d6e7ff9bd3e7ffa6d6e7ff00b5afff00b7afff00b7afff00beb7ff00b4acff00b9b2ff00b9b2ff00bab2fff50f1affff0000ffff0000ffff000f";nbChamps=this.numFields;for(var leChamp="- Liste des champs -",listeChamps='var listeChamps = {"'+leChamp+'": '+(nbChamps+1)+",",i=0;i<nbChamps;i++){var nomChamp=this.getNthFieldName(i);if("object"!=typeof this.getField(nomChamp).page)listeChamps+='"'+nomChamp+'": '+(-1*(i+1)).toString()+",";else for(var j=0;j<this.getField(nomChamp).page.length;j++)listeChamps+='"'+nomChamp+"."+j+'": '+(-1*(i+1)).toString()+","}var listeChamps=listeChamps.substring(0,listeChamps.length-1);eval(listeChamps+="}"),resScript="",resAction="",resQuand="";var bDialogue={initialize:function(f){var a={logo:{width:60,height:60,offset:0,read:function(f){return b2.slice(this.offset,this.offset+=f)}}};f.load(a),f.enable({Docu:!1,Acti:!1,Cham:!1}),this.loadDefaults(f)},loadDefaults:function(f){f.load({LCha:listeChamps})},quelScript:function(f){for(var a=0;a<=2;a++)if(f["Rd0"+a])switch(a){case 0:resScript="Document";break;case 1:resScript="Action";break;case 2:resScript="Champ"}return resScript},quelleAction:function(f){for(var a=0;a<=4;a++)if(f["Rd1"+a])switch(a){case 0:resAction="WillClose";break;case 1:resAction="WillSave";break;case 2:resAction="DidSave";break;case 3:resAction="WillPrint";break;case 4:resAction="DidPrint"}return resAction},quand:function(f){for(var a=0;a<=9;a++)if(f["Rd2"+a])switch(a){case 0:resQuand="MouseUp";break;case 1:resQuand="MouseDown";break;case 2:resQuand="MouseEnter";break;case 3:resQuand="MouseExit";break;case 4:resQuand="OnFocus";break;case 5:resQuand="OnBlur";break;case 6:resQuand="Format";break;case 7:resQuand="Keystroke";break;case 8:resQuand="Validate";break;case 9:resQuand="Calculate"}return resQuand},Rd00:function(f){f.enable({Docu:!0,Acti:!1,Cham:!1})},Rd01:function(f){f.enable({Docu:!1,Acti:!0,Cham:!1})},Rd02:function(f){f.enable({Docu:!1,Acti:!1,Cham:!0})},validate:app.trustedFunction(function(bDialogue){app.beginPriv();for(var alerte,oRslt=bDialogue.store(),elements=bDialogue.store().LCha,NoTestMaxi=9,i=0;i<=NoTestMaxi;i++)eval("var testOK"+i+"=true");if(this.quelScript(oRslt)){if("Document"==this.quelScript(oRslt)&&(""==oRslt.name||/^\s+|\s+$/gm.test(oRslt.name)))var testOK1=!1;else if("Action"!=this.quelScript(oRslt)||this.quelleAction(oRslt)){if("Champ"==this.quelScript(oRslt)){if(this.quand(oRslt)){for(var i in elements)elements>0&&(valeurListe=listeChamps,nomListe=i);if(valeurListe>0&&(""==oRslt.nmCh||/^\s+|\s+$/gm.test(oRslt.nmCh)))var testOK4=!1;else{nmChamp=valeurListe>0?oRslt.nmCh:nomListe;try{var leType=getField(nmChamp).type;switch(leType){case"text":var typeBouton="Champ de texte";break;case"checkbox":var typeBouton="Case \xe0 cocher";break;case"radiobutton":var typeBouton="Bouton radio";break;case"listbox":var typeBouton="Zone de liste";break;case"combobox":var typeBouton="Menu d\xe9roulant";break;case"button":var typeBouton="Bouton";break;case"signature":var typeBouton="Signature num\xe9rique"}switch(this.quand(oRslt)){case"Format":var typeScript="Script de format personnalis\xe9";break;case"Keystroke":var typeScript="Script de touches personnalis\xe9";break;case"Validate":var typeScript="Script de validation";break;case"Calculate":var typeScript="Script de calcul"}if(("Calculate"==this.quand(oRslt)||"Validate"==this.quand(oRslt)||"Keystroke"==this.quand(oRslt)||"Format"==this.quand(oRslt))&&"text"!=leType&&"combobox"!=leType)var testOK6=!1;else if(("Calculate"==this.quand(oRslt)||"Validate"==this.quand(oRslt)||"Format"==this.quand(oRslt))&&"listbox"!=leType)var testOK7=!1}catch(e){testOK5=!1}}}else var testOK3=!1}}else var testOK2=!1}else var testOK0=!1;if(""==oRslt.scri)var testOK8=!1;else if(!/\b^[\s\S]*\b(var[ ]+.+[ ]*=)|(event\.(?:change|name|shift|rc|source|changeEx|richChange|target|commitKey|richChangeEx|targetName|fieldFull|richValue|type|keyDown|selEnd|value|modifier|selStart|willCommit))|(this\.getField[(]["']?.+["']?[)])[\s\S]*$/.test(oRslt.scri)||!/[=]/.test(oRslt.scri))var testOK9=!1;for(var txtRetour="var retourAlerte=(",i=0;i<=NoTestMaxi;i++)txtRetour+="testOK"+i,i<NoTestMaxi&&(txtRetour+=" && ");if(eval(txtRetour+=")"),testOK0){if(testOK1){if(testOK2){if(testOK3){if(testOK4){if(testOK5){if(testOK6&&testOK7){if(testOK8){if(!testOK9&&4==app.alert({cMsg:"Le texte entr\xe9 semble ne pas correspondre \xe0 un script JavaScript pour Acrobat.\rVoulez-vous ajouter ce script ?",cTitle:"ATTENTION",nType:2,nIcon:2}))var retourAlerte=!0}else app.alert("Veuillez \xe9crire ou coller un script dans la fen\xeatre ci-contre.",3)}else app.alert('Le champ "'+nmChamp+'" est de type "'+typeBouton+'" et ne peut donc pas ex\xe9cuter un '+typeScript+".",3)}else app.alert('Le champ "'+nmChamp+"\" n'existe pas.",3)}else app.alert("Veuillez s\xe9lectionner ou indiquer un nom de champ.",3)}else app.alert("Veuillez s\xe9lectionner un type de script de champ.",3)}else app.alert("Veuillez s\xe9lectionner un script d'action de document.",3)}else app.alert("Veuillez indiquer un nom de script correct.",3)}else app.alert("Veuillez s\xe9lectionner un type de script.",3);return retourAlerte}),commit:function(f){var a=f.store(),$=f.store().LCha;for(var b in leScript=a.scri,nomScript=a.name,$)$>0&&(valeurListe=listeChamps,nomListe=b);nmChamp=valeurListe>0?a.nmCh:nomListe},description:{name:"b2Tools - Ajouter un Script",elements:[{type:"view",elements:[{type:"view",align_children:"align_top",elements:[{type:"view",elements:[{type:"static_text",name:"\xc9crivez ou collez un script dans la fen\xeatre ci-dessous.",alignment:"align_left",font:"dialog"},{type:"edit_text",item_id:"scri",width:400,height:485,multiline:!0,alignment:"align_fill"},]},]},]},{type:"view",elements:[{type:"view",align_children:"align_top",elements:[{type:"view",elements:[{type:"image",item_id:"logo",width:64,height:64},]},{type:"view",char_width:40,elements:[{type:"static_text",name:"AJOUTER UN SCRIPT",char_width:25,alignment:"align_center",font:"dialog",bold:!0},{type:"static_text",item_id:"stat",name:"bebarth (04/24)",alignment:"align_center",font:"palette",bold:!0,char_width:10,height:20},{type:"view",alignment:"align_center",align_children:"align_row",elements:[{type:"static_text",name:"Scripts : ",font:"dialog",bold:!0},{type:"radio",group_id:"GRP0",item_id:"Rd00",name:" du document"},{type:"radio",group_id:"GRP0",item_id:"Rd01",name:" Actions du document"},{type:"radio",group_id:"GRP0",item_id:"Rd02",name:" de champ"},]},]},]},{type:"gap",height:3},{type:"view",group_id:"Docu",alignment:"align_fill",elements:[{type:"static_text",name:"Scripts JavaScript du document",font:"dialog",bold:!0},{type:"cluster",item_id:"Docu",elements:[{type:"static_text",name:"Nom du script :"},{type:"edit_text",item_id:"name",height:20,alignment:"align_fill"},]},]},{type:"view",alignment:"align_fill",elements:[{type:"static_text",name:"Actions du document",font:"dialog",bold:!0},{type:"cluster",item_id:"Acti",align_children:"align_top",elements:[{type:"view",elements:[{type:"radio",group_id:"GRP1",item_id:"Rd10",name:" Le document sera ferm\xe9"},{type:"radio",group_id:"GRP1",item_id:"Rd11",name:" Le document sera enregistr\xe9"},{type:"radio",group_id:"GRP1",item_id:"Rd12",name:" Le document a \xe9t\xe9 enregistr\xe9"},]},{type:"static_text",name:" "},{type:"view",elements:[{type:"radio",group_id:"GRP1",item_id:"Rd13",name:" Le document sera imprim\xe9"},{type:"radio",group_id:"GRP1",item_id:"Rd14",name:" Le document a \xe9t\xe9 imprim\xe9"},]},]},]},{type:"view",alignment:"align_fill",elements:[{type:"static_text",name:"Scripts de champ",font:"dialog",bold:!0},{type:"cluster",item_id:"Cham",align_children:"align_top",elements:[{type:"view",elements:[{type:"static_text",name:"Nom du champ",font:"dialog",bold:!0},{type:"static_text",name:"S\xe9lectionnez..."},{type:"popup",item_id:"LCha",width:100,alignment:"align_fill"},{type:"static_text",name:"ou indiquez son nom :"},{type:"edit_text",item_id:"nmCh",height:20,alignment:"align_fill"},]},{type:"static_text",name:" "},{type:"view",elements:[{type:"static_text",name:"Action",font:"dialog",bold:!0},{type:"radio",group_id:"GRP2",item_id:"Rd20",name:" Souris rel\xe2ch\xe9e"},{type:"radio",group_id:"GRP2",item_id:"Rd21",name:" Souris enfonc\xe9e"},{type:"radio",group_id:"GRP2",item_id:"Rd22",name:" Souris entr\xe9e"},{type:"radio",group_id:"GRP2",item_id:"Rd23",name:" Souris sortie"},{type:"radio",group_id:"GRP2",item_id:"Rd24",name:" Champ activ\xe9"},{type:"radio",group_id:"GRP2",item_id:"Rd25",name:" Champ d\xe9sactiv\xe9"},]},{type:"static_text",name:" "},{type:"view",elements:[{type:"static_text",name:"Format",font:"dialog",bold:!0},{type:"radio",group_id:"GRP2",item_id:"Rd26",name:" Script de format"},{type:"radio",group_id:"GRP2",item_id:"Rd27",name:" Script de touches"},{type:"static_text",name:"Validation",font:"dialog",bold:!0},{type:"radio",group_id:"GRP2",item_id:"Rd28",name:" Script de validation"},{type:"static_text",name:"Calcul",font:"dialog",bold:!0},{type:"radio",group_id:"GRP2",item_id:"Rd29",name:" Script de calcul"},]},]},]},{type:"gap",height:5},{type:"ok_cancel"},]},]}};"ok"==app.execDialog(bDialogue)&&("Document"==resScript?this.addScript(nomScript,leScript):"Action"==resScript?this.setAction(resAction,leScript):this.getField(nmChamp).setAction(resQuand,leScript));

    Sur demande, je peux vous donner la version originale de ce script ou de celui qui fonctionne en script d’application.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Vérification #74524
    bebarth
    Maître des clés

    bonjour,
    Dans les boucles de vérifications, i est le premier indice et j le second. Donc si il y a des seconds indices qui commencent à 0, il faut écrire : “for (var j=0; j<lesSeries[1].length; j++)…”

    S’il n’y a aucun message à afficher : ne pas afficher la console

    ...
    if (txt) {
    console.clear();
    console.show();
    console.println(txt);
    }

    Pour info, var reponse=reponse.replace(/[,]{2,}/g,",").replace(/^,/,"").replace(/,$/,""); supprime les éventuelles virgules en début et fin de chaine, et remplace les virgules multiples par une simple. J’avais rajouté cette ligne au cas ou il y avait une erreur de frappe dans la boite de dialogue, mais cette ligne n’est pas nécessaire si on écrit la chaine dans la ligne de code. Je suppose que celui qui lancera le script fera attention à ce qu’il écrit !

    @+
    😎

    en réponse à : Multiliste déroulante #74514
    bebarth
    Maître des clés

    Du coup j’ai remis l’ancien script d’affichage de la page 2 et j’ai rajouter un script de calcul pour les menus déroulants :

    // Script Affichage Page 2
    var modeles=this.templates;
    for (i=0; i<modeles.length; i++) {
    if (modeles.name=="page2") {
    modeles.hidden=(event.target.value=="Off");
    break;
    }
    }
    this.pageNum=0;

    // Script de calcul des menus déroulants
    if (this.getField("Canal").value && this.getField("Départ.0").value && this.getField("Arrivée.0").value!="- Sélectionnez -") {
    this.getField("Check Box1").display=display.noPrint;
    } else {
    this.getField("Check Box1").display=display.hidden;
    this.getField("Check Box1").value="Off";
    var modeles=this.templates;
    for (i=0; i<modeles.length; i++) {
    if (modeles.name=="page2") {
    modeles.hidden=true;
    break;
    }
    }
    this.pageNum=0;
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Multiliste déroulante #74510
    bebarth
    Maître des clés

    bonjour,
    Voici un nouveau fichier. Ici, la case à cocher ne s’imprimera pas et la page 2 sera affichée uniquement si les 3 menus déroulants sont renseignés lorsque cette case est cochée.

    // Script Affichage Page 2
    if (this.getField(“Canal”).value && this.getField(“Départ.0”).value && this.getField(“Arrivée.0”).value) {
    var modeles=this.templates;
    for (i=0; i<modeles.length; i++) {
    if (modeles.name==”page2″) {
    modeles.hidden=(event.target.value==”Off”);
    break;
    }
    }
    this.pageNum=0;
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Vérification #74505
    bebarth
    Maître des clés

    bonjour,
    Voici donc un script pour vérifier les indices de tes champs :
    var reponse="";
    while (!/^(\w+,*)+$/.test(reponse)) {
    var reponse=app.response({
    cQuestion: "Indiquez les différents noms de champs en les séparant par une virgule. Exemple :",
    cTitle: "Vérification des indices de champs",
    cDefault: "Verifier,Recommencer,Titre,Question,Q,R,Aide,cAc",
    cLabel: "Champ(s) :"
    });
    }
    if (reponse!=null) {
    var reponse=reponse.replace(/[,]{2,}/g,",").replace(/^,/,"").replace(/,$/,"");
    var aVerifier=reponse.split(",");
    var lesSeries=[];
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    for (var j=0; j<aVerifier.length; j++) {
    var RegExTest=new RegExp("^"+aVerifier[j]+"\\.(\\d+)\\.(\\d+)$");
    var OK=nomChamp.match(RegExTest);
    if (OK) {
    var ind1=OK[1];
    var ind2=OK[2];
    if (lesSeries[j]==undefined) lesSeries[j]=[aVerifier[j],[]];
    if (lesSeries[j][1][ind1]==undefined) lesSeries[j][1][ind1]=[ind1,[]];
    if (lesSeries[j][1][ind1][1][ind2]==undefined) lesSeries[j][1][ind1][1][ind2]=[ind2];
    break;
    }
    }
    }
    var txt=""
    for (var ind=0; ind<lesSeries.length; ind++) {
    if (lesSeries[ind]==undefined) txt+="Il n'y a pas de champ \""+aVerifier[ind]+"\" avec indices.\r";
    else {
    for (var j=1; j<lesSeries[ind][1].length; j++) {
    if (lesSeries[ind][1][j]==undefined) txt+="Il n'y a pas d'indice de premier niveau \""+aVerifier[ind]+"."+[j]+"\".\r";
    else {
    for (var k=1; k<lesSeries[ind][1][j][1].length; k++) {
    if (lesSeries[ind][1][j][1][k]==undefined) txt+="Il n'y a pas d'indice de second niveau \""+aVerifier[ind]+"."+[j]+"."+k+"\".\r";
    }
    }
    }
    }
    }
    if (!txt) txt="Tout est OK !!!";
    console.clear();
    console.show();
    console.println(txt);
    }

    Ce script tient compte qu’il n’y a apparemment pas d’indices 0 pour tes champs. Je joint un fichier où le script regarde si il y a des indices 0.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Vérification #74493
    bebarth
    Maître des clés

    …dans le principe c’est à peu près ça, et je voyais ça pas si compliqué, mais je crois que je me suis lancé dans une usine à gaz ! Je reprendrai à zéro ce weekend et à tête reposée…

    @+
    😎

    en réponse à : Vérification #74483
    bebarth
    Maître des clés

    Toujours le souci d’affichage sur le forum lorsqu’un “i” est entre crochets “[]” !
    J’ai changé le “i” en “k” dans le script précédent, ça devrait marcher beaucoup mieux maintenant !

    @+
    😎

    en réponse à : Vérification #74479
    bebarth
    Maître des clés

    Ça marche chez moi… et avec ton dernier fichier !
    Je regarde plus tard.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Couleur des champs et impression #74472
    bebarth
    Maître des clés

    bonjour,
    Il faut ajouter 2 scripts d'”Actions du document”, mais cela dépend de si tous les champs ont ou pas la même couleur de fond.

    Admettons qu’il sont tous en “Light Gray”.
    Script “Le document sera imprimé” :
    for (var i=0; i<this.numFields; i++) this.getField(this.getNthFieldName(i)).fillColor=color.transparent;
    Script “Le document a été imprimé” :
    for (var i=0; i<this.numFields; i++) this.getField(this.getNthFieldName(i)).fillColor=color.ltGray;

    Si tous les champs ont une couleur différente (ou presque…).
    Script “Le document sera imprimé” :
    lesCouleurs=[];
    for (var i=0; i<this.numFields; i++) {
    lesCouleurs.push(this.getField(this.getNthFieldName(i)).fillColor);
    this.getField(this.getNthFieldName(i)).fillColor=color.transparent;
    }
    Script “Le document a été imprimé” :
    for (var i=0; i<this.numFields; i++) this.getField(this.getNthFieldName(i)).fillColor=lesCouleurs;

    @+
    😎

    en réponse à : Vérification #74469
    bebarth
    Maître des clés

    bonjour,

    Sinon ta proposition précédente me va très bien.

    Très bien ! Mais perso il fallait que je trouve.
    Voici donc un script qui fonctionne avec ton fichier :

    var lesChamps=[];
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    if (typeof this.getField(nomChamp).page=="object") {
    lesChamps.push([nomChamp,this.getField(nomChamp).page])
    }
    }
    if (lesChamps.length) {
    var leTexte="";
    for (var k=0; k<lesChamps.length; k++) {
    var nom=lesChamps[k][0];
    var lesPages=lesChamps[k][1];
    for (var j=0; j<lesPages.length; j++) lesPages[j]=lesPages[j]+1;
    var frequences={};
    for (var j=0; j<lesPages.length; j++) {
    var nb=lesPages[j];
    if (frequences[nb]===undefined) frequences[nb]=1;
    else frequences[nb]++;
    }
    var parPage=[];
    var txt="• \""+nom+"\" - ";
    for (var nb in frequences) parPage.push(frequences[nb]+" fois en page "+nb);
    var parPage=parPage.toString();
    var n=parPage.lastIndexOf(",");
    if (n>-1) var parPage=(parPage.substring(0,n)+" et "+parPage.substring(n+1)).replace(/,/g,", ");
    if (!leTexte) leTexte+="Champs dupliqués :";
    leTexte+="\r"+txt+parPage+".";

    }
    console.clear();
    console.show();
    console.println(leTexte);
    app.alert(leTexte,3);
    } else app.alert("Tout est OK !!!",3);

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 mois par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Vérification #74437
    bebarth
    Maître des clés

    Je pense que c’est une erreur de script.

    Ce champ est le dernier et si on le supprime, ça fait la même chose avec le nouveau dernier champ.

    De ce que j’ai pu constater, ça ne fait ça que si il n’y a pas de champs multiples.

    Je ne peux pas regarder aujourd’hui…

    @+
    😎

    en réponse à : Vérification #74435
    bebarth
    Maître des clés

    bonjour,
    Etrange, effectivement ! Juste ce champ… Je regarde dès que je peux.

    @+
    😎

    en réponse à : Vérification #74432
    bebarth
    Maître des clés

    L’idéal serait encore de ne pas citer x fois la page lorsque le champ se trouve plusieurs fois sur cette page…

    Ça me trottait dans la tête :
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    if (typeof this.getField(nomChamp).page=="object") {
    var lesPages=this.getField(nomChamp).page;
    }
    }
    for (var j=0; j<lesPages.length; j++) lesPages[j]=lesPages[j]+1;
    var frequences={};
    for (var i=0; i<lesPages.length; i++) {
    var nb=lesPages;
    if (frequences[nb]===undefined) frequences[nb]=1;
    else frequences[nb]++;
    }
    var parPage=[];
    var txt="Le champ \""+nomChamp+"\" n'est pas unique; il se trouve "
    for (var nb in frequences) parPage.push(frequences[nb]+" fois en page "+nb);
    if (parPage.length>1) txt+=": ";
    var parPage=parPage.toString();
    var n=parPage.lastIndexOf(",");
    if (n>-1) var parPage=(parPage.substring(0,n)+" et "+parPage.substring(n+1)).replace(/,/g,", ");
    app.alert(txt+=parPage+".",3);

    @+
    😎

    en réponse à : Vérification #74428
    bebarth
    Maître des clés

    Maintenant je vais essayer de transformer la valeur this.getField(nomChamp).page pour que la numérotation commence à 1 et non pas à 0. Je pensais qu’il fallait convertir cette chaine en nombre avant de lui ajouter 1 mais je crois que ce n’est pas si simple.

    Tu peux écrire :
    function doublons() {
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    if (typeof this.getField(nomChamp).page=="object") {
    var lesPages=this.getField(nomChamp).page;
    for (var j=0; j<lesPages.length; j++) lesPages[j]=lesPages[j]+1;
    var lesPages=lesPages.toString();
    var n=lesPages.lastIndexOf(",");
    var lesPages=(lesPages.substring(0,n)+" et "+lesPages.substring(n+1)).replace(/,/g,", ");
    app.alert("Le champ \""+nomChamp+"\" n'est pas unique; il se trouve sur la(les) page(s) : "+lesPages,3);
    }
    }
    }

    L’idéal serait encore de ne pas citer x fois la page lorsque le champ se trouve plusieurs fois sur cette page…

    @+
    😎

    en réponse à : Vérification #74423
    bebarth
    Maître des clés

    bonjour,
    Si tu listes juste les noms des champs, tu ne trouveras pas de doublons !
    Pour cela, il faut vérifier le paramètre “page” de chaque champ : si c’est un nombre le champ n’existe qu’une fois et si c’est une table, elle indique ou sont ces champs.

    Voici un script simple pour vérifier :
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    if (typeof this.getField(nomChamp).page=="object") app.alert("Le champ \""+nomChamp+"\" est présent sur en page(s) : "+this.getField(nomChamp).page,3);
    }
    Ici la table des pages est listée, donc les numéros sont basés sur 0 et peuvent être identiques…

    @+
    😎

    en réponse à : Vérification #74417
    bebarth
    Maître des clés

    bonjour,
    Voici quelques lignes que j’avais écrites il y a un certain temps et que j’utilise pour gérer les doublons d’une table.

    // Suppression des doublons
    var laTable=["pomme","banane","orange","pomme","banane","pomme"];
    console.println("laTable : "+laTable);
    function sansDoublons(uneTable) {
    return uneTable.filter((valeur,indice)=>uneTable.indexOf(valeur)===indice);
    }
    console.println("laTable sans doublons mais non triée : "+sansDoublons(laTable));
    // Retour : laTable sans doublons mais non triée : pomme,banane,orange

    // Suppression des doublons
    var laTable=["pomme","banane","orange","pomme","banane","pomme"];
    console.println("laTable : "+laTable);
    function sansDoublons(uneTable){
    var newArr=[];
    for (var i=0; i<uneTable.length; i++) {
    if (newArr.indexOf(uneTable)===-1) newArr.push(uneTable);
    }
    return newArr;
    }
    console.println("laTable sans doublons mais non triée : "+sansDoublons(laTable));
    // Retour : laTable sans doublons mais non triée : pomme,banane,orange

    // Tous les doublons
    var laTable=["pomme","banane","orange","pomme","banane","pomme"];
    console.println("laTable : "+laTable);
    function lesDoublons(uneTable) {
    return uneTable.filter((valeur,indice)=>uneTable.indexOf(valeur)!==indice);
    }
    console.println("Tous les doublons : "+lesDoublons(laTable));
    // Retour : Tous les doublons : pomme,banane,pomme

    // Tous les doublons uniques
    var laTable=["pomme","banane","orange","pomme","banane","pomme"];
    console.println("laTable : "+laTable);
    function lesDoublonsUniques(uneTable){
    var newArr=[];
    for (var i=0; i<uneTable.length; i++) {
    if (newArr.indexOf(uneTable)===-1 && uneTable.indexOf(uneTable)!==i) newArr.push(uneTable);
    }
    return newArr;
    }
    console.println("Tous les doublons : "+lesDoublonsUniques(laTable));
    // Retour : Tous les doublons : pomme,banane

    // Suppression des doublons et tri
    var laTable=["pomme","banane","orange","pomme","banane","pomme"];
    console.println("laTable : "+laTable);
    function triSansDoublons(uneTable) {
    return uneTable.sort().filter(function(valeur,indice,cetteTable) {
    return !indice || valeur!=cetteTable[indice-1];
    });
    }
    console.println("laTable sans doublons mais triée : "+triSansDoublons(laTable));
    // Retour : laTable sans doublons mais triée : banane,orange,pomme

    @+
    😎

    en réponse à : Multiliste déroulante #74415
    bebarth
    Maître des clés

    bonjour,
    Voici ce que j’ai fait aujourd’hui. J’espère que cela te convient. Pour cacher les fichiers attaché on pourrait faire une tempo toutes les secondes par exemple, mais ça veut dire que le fichier est perpétuellement en calcul !

    Voici tous les scripts que j’ai utilisé. Si tu es débutant ça va peut-être un peu compliqué pour toi à comprendre : Il y a des scripts de document, des fonctions, une page modèle…

    // Script de document
    //
    var nbDepart=0;
    for (var i=0; i<this.numFields; i++) {
    if (/^Départ\.\d+/.test(this.getNthFieldName(i))) nbDepart++;
    }
    var fichier=this.getDataObjectContents("Départ.csv");
    var donnees=util.stringFromStream(fichier);
    var lignes=donnees.split("\r\n");
    var colonnes=new Array();
    for (var i=0 ; i<lignes.length ; i++) colonnes=lignes.split(";");
    var colonne0=[];
    for (var j=0 ; j<colonnes.length ; j++) {
    if (colonnes[j][0]) colonne0.push([colonnes[j][0]]);
    }
    for (var i=1; i<=colonne0.length; i++) {
    eval("var colonne"+(i+1)+"=[];");
    for (var j=0 ; j<colonnes.length ; j++) {
    if (colonnes[j]) eval("colonne"+(i+1)).push(colonnes[j]);
    }
    }
    colonne0[0].push(0);
    for (var i=1; i<colonne0.length; i++) {
    colonne0.push(eval("colonne"+(i+1)))
    }
    // Fichier "Départ Arrivée.csv"
    var fichierDA=this.getDataObjectContents("Départ Arrivée.csv");
    var donneesDA=util.stringFromStream(fichierDA);
    var lignesDA=donneesDA.split("\r\n");
    var colonnesDA=new Array();
    for (var i=0 ; i<lignesDA.length ; i++) colonnesDA=lignesDA.split(";");
    for (var i=1; i<=colonnesDA[0].length; i++) {
    eval("var colonne"+(i+1)+"DA=[\"- Sélectionnez -\"];");
    for (var j=1 ; j<colonnesDA.length ; j++) {
    if (colonnesDA[j]) eval("colonne"+(i+1)+"DA").push(colonnesDA[j]);
    }
    }
    //
    var leCanal=this.getField("Canal").value;
    this.getField("Canal").clearItems();
    this.getField("Canal").setItems(colonne0);
    this.getField("Canal").value=leCanal;
    //
    function menuCanal(laValeur) {
    try {
    for (var i=0; i<nbDepart; i++) {
    this.getField("Départ."+i).clearItems();
    this.getField("Arrivée."+i).clearItems();
    }
    if (laValeur!=0) {
    var leMenu=laValeur.split(",");
    var ind=leMenu[0].substr("Canal ".length);
    leMenu[0]=["- Sélectionnez -",0];
    for (var i=1; i<leMenu.length; i++) {
    leMenu=[leMenu,eval("colonne"+(i+1)+"DA")];
    }
    for (var i=0; i<nbDepart; i++) {
    this.getField("Départ."+i).clearItems();
    this.getField("Départ."+i).setItems(leMenu);
    }
    }
    } catch(e) {}
    }
    //
    function menuDepart(ind,laValeur) {
    this.getField("Arrivée."+ind).clearItems();
    this.getField("Arrivée."+ind).setItems(laValeur.split(","));
    }
    function menuArrivee(leChamp) {
    try {
    var ind=leChamp.name.substring(leChamp.name.indexOf(".")+1);
    var laTable=this.getField("Départ."+ind).value.split(",");
    for (var i=0; i<nbDepart; i++) {
    if (i==ind) continue;
    for (j=0; j<leChamp.numItems; j++) {
    if (this.getField("Départ."+i).getItemAt(this.getField("Départ."+i).currentValueIndices,false)==this.getField("Départ."+ind).getItemAt(this.getField("Départ."+ind).currentValueIndices,false) && this.getField("Arrivée."+i).value==laTable[j]) laTable.splice(j,1);
    }
    }
    var lArrivee=leChamp.value;
    leChamp.clearItems();
    leChamp.setItems(laTable);
    leChamp.value=lArrivee;
    } catch(e) {}
    }

    // Script de touches personnalisé Menu "Canal"
    if (!event.willCommit) menuCanal(event.changeEx);

    // Script de touches personnalisé Menu "Départ"
    if (!event.willCommit) menuDepart(event.target.name.substring(event.target.name.indexOf(".")+1),event.changeEx);

    // Ajout Script de touches personnalisé de tous les Menus "Départ"
    for (var i=0; i<30; i++) {
    this.getField("Départ."+i).setAction("Keystroke","if (!event.willCommit) menuDepart(event.target.name.substring(event.target.name.indexOf(\".\")+1),event.changeEx);");
    }

    // Souris entrée de tous les Menus "Arrivée"
    menuArrivee(event.target);

    // Ajout Script Souris entrée de tous les Menus "Arrivée"
    for (var i=0; i<30; i++) {
    this.getField("Arrivée."+i).setAction("MouseEnter","menuArrivee(event.target);");
    }

    // Script d'ouverture de page
    if (app.viewerType!="Exchange-Pro") this.viewState={overViewMode:2};
    this.viewState={overViewMode:5}

    // Script Affichage Page 2
    var modeles=this.templates;
    for (i=0; i<modeles.length; i++) {
    if (modeles.name=="page2") {
    modeles.hidden=(event.target.value=="Off");
    break;
    }
    }
    this.pageNum=0;

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Multiliste déroulante #74404
    bebarth
    Maître des clés

    On peut pas dupliquer le même choix de la liste déroulante (Départ) ou bien (Arrivée) de la page 1 sur les autre listes déroulante de la page 2. C’est-à-dire, si on sélectionne un choix (Départ et Arrivée) sur la page 1 pdf , les autres listes déroulantes de page 2 sera vide, afin qu’on aura la possibilité de sélectionner un autre choix diffèrent sur chaque liste déroulante (Départ et Arrivée) page2.

    Ça demande réflexion… une chose est sûre c’est que ce n’est pas simple et que les différents noms de champs ne peuvent pas être identiques à ceux de la page 1.  Je regarderai ça jeudi.

    (page 2 c’est une page supplémentaire, c’est pour cela que je voudrais que cette page soit masquer et elle sera afficher si besoin via case à cocher non imprimable).

    Pages 2 et 3 donc ! Ça ne devrait pas être compliqué, dès que le problème précédent sera résolu.

    D’autre question s’ils vous plait, serait-il possible masquer les pièces jointes (excel.csv) pour que les autres utilisateurs de ce fichier pdf ne pourront pas accéder au pièces jointes, et ils n’auront donc pas la possibilité de les modifier?

    Ça c’est une bonne question dont je n’ai pas encore la réponse. On pourra peut-être caché ce panneau pour les utilisateurs de Reader, par exemple… Faut essayer.

    @Merlin
    : Tu as une idée ???

    @+
    😎

    en réponse à : Multiliste déroulante #74398
    bebarth
    Maître des clés

    bonjour,
    Voici déjà un fichier pour la première partie. Les données doivent être en pièces jointes du fichier .pdf au format .csv. Il n’est donc pas possible d’avoir des onglets et il faut donc joindre 2 fichiers séparés.
    Et les scripts utilisés dans ce fichier :
    // Script de document
    //
    var fichier=this.getDataObjectContents("Départ.csv");
    var donnees=util.stringFromStream(fichier);
    var lignes=donnees.split("\r\n");
    var colonnes=new Array();
    for (var i=0 ; i<lignes.length ; i++) colonnes=lignes.split(";");
    var colonne0=[];
    for (var j=0 ; j<colonnes.length ; j++) {
    if (colonnes[j][0]) colonne0.push([colonnes[j][0]]);
    }
    for (var i=1; i<=colonne0.length; i++) {
    eval("var colonne"+(i+1)+"=[];");
    for (var j=0 ; j<colonnes.length ; j++) {
    if (colonnes[j]) eval("colonne"+(i+1)).push(colonnes[j]);
    }
    }
    colonne0[0].push(0);
    for (var i=1; i<colonne0.length; i++) {
    colonne0.push(eval("colonne"+(i+1)))
    }
    //
    var fichier1=this.getDataObjectContents("Départ Arrivée.csv");
    var donnees1=util.stringFromStream(fichier1);
    var lignes1=donnees1.split("\r\n");
    var colonnes1=new Array();
    for (var i=0 ; i<lignes1.length ; i++) colonnes1=lignes1.split(";");
    for (var i=1; i<=colonnes1[0].length; i++) {
    eval("var colonne"+(i+1)+"1=[\"- Sélectionnez -\"];");
    for (var j=1 ; j<colonnes1.length ; j++) {
    if (colonnes1[j]) eval("colonne"+(i+1)+"1").push(colonnes1[j]);
    }
    }
    //
    var leCanal=this.getField("Canal").value;
    this.getField("Canal").clearItems();
    this.getField("Canal").setItems(colonne0);
    this.getField("Canal").value=leCanal;

    // Script de touches personnalisé Menu "Canal"
    if (!event.willCommit) {
    this.getField("Départ").clearItems();
    this.getField("Arrivée").clearItems();
    if (event.changeEx!=0) {
    var leMenu=event.changeEx.split(",");
    var ind=leMenu[0].substr("Canal ".length);
    leMenu[0]=["- Sélectionnez -",0];
    for (var i=1; i<leMenu.length; i++) {
    leMenu=[leMenu,eval("colonne"+(i+1)+"1")];
    }
    this.getField("Départ").clearItems();
    this.getField("Départ").setItems(leMenu);
    }
    }

    // Script de touches personnalisé Menu "Départ"
    if (!event.willCommit) {
    this.getField("Arrivée").clearItems();
    if (event.changeEx!=0) {
    this.getField("Arrivée").clearItems();
    this.getField("Arrivée").setItems(event.changeEx.split(","));
    }
    }

    Le reste des listes déroulantes de la page 2 du PDF seront alimentées séparément quand on sélectionnera un choix, et non pas toutes à la fois avec le même choix. Et serait-il possible que la deuxième page PDF soit masquée au besoin via une case à cocher non imprimable ?

    Pour ça il me faudra quelques explications car je n’ai pas compris…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Multiliste déroulante #74397
    bebarth
    Maître des clés

    Je regarde ça dès que possible.

    @+
    😎

    en réponse à : Multiliste déroulante #74393
    bebarth
    Maître des clés

    bonjour,
    Moi je veux bien aider, mais il faudrait m’expliquer car je n’ai rien compris à ce que tu voulais faire…

    @+
    😎

    en réponse à : Position des champs #74391
    bebarth
    Maître des clés

    bonjour,
    Comme indiqué précédemment, il faut utiliser “valueAsString” pour ces 2 fonctions :
    function CorrQuest(ind) {
    var q=this.getField("Q."+ind);
    var r=this.getField("R."+ind);
    if (event.target.value!="Off") {
    var f=this.addField("tempo."+ind, r.type, q.page, q.rect);
    for (var j in f) {
    try {
    if (typeof f[j]!="function" && j!="name" && j!="type" && j!="page" && j!="rect") f[j]=r[j];
    } catch(e) {}
    }
    f.value=r.valueAsString.split("|")[0];
    f.textSize=q.textSize;
    q.display=display.hidden;
    } else {
    this.removeField("tempo."+ind);
    q.display=display.visible;
    q.readonly=false;
    }
    }
    et
    function corriger(ind) {
    var a = this.getField("cAc."+ind+"."+0).value;
    console.println("indice : " +ind);
    var nCompt = 0;
    for (var i = 0 ; i < this.numFields ; i++) {
    var oChamp = this.getField(this.getNthFieldName(i));
    if ((oChamp.type == "checkbox") && (/cAc./.test(oChamp.name))) {nCompt = nCompt + 1;}
    }
    var nbChamps=0;
    for (var i=0; i<this.numFields; i++) {
    if (this.getNthFieldName(i).indexOf("R."+ind+".")==0) nbChamps++;
    }
    for (b=1 ; b<=nbChamps ; b++) {
    var q=this.getField("Q."+ind+"."+b);
    var r=this.getField("R."+ind+"."+b);
    if (a!="Off") {
    var f=this.addField("tempo."+ind+"."+b, r.type, q.page, q.rect);
    for (var j in f) {
    try {
    if (typeof f[j]!="function" && j!="name" && j!="type" && j!="page" && j!="rect") f[j]=r[j];
    } catch(e) {}
    }
    f.value=r.valueAsString.split("|")[0];
    f.textSize=q.textSize;
    q.display=display.hidden;
    this.getField("cAc."+ind+"."+b).value = 1;
    } else {
    this.removeField("tempo."+ind);
    q.display=display.visible;
    q.readonly=false;
    this.getField("cAc."+ind+"."+b).value = "Off";
    }
    }
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Position des champs #74371
    bebarth
    Maître des clés

    bonjour,

    Par contre si je sélectionne les 3 premières cases par exemple (cAc.3.1 à c.A.c.3.3), là tout va bien mais quand je décoche l’une de ces cases (par exemple c.A.c.3.2), alors les 2 champs Q.3.1 et Q.3.3 restent masqués alors que je voudrais qu’ils redeviennent visibles.

    Lorsque tu supprimes le champ, il faut ajouter l’indice au nom du champ : this.removeField("tempo."+ind);

    L’autre truc que je n’arrive pas à faire, c’est la mise en place de la case : “Case.3” permettant de cocher ou décocher d’un seul coup toutes les cases c.A.c…..

    Les “+” sont mal placés. Il faut écrire : ...this.getField("cAc."+ind+"."+b).value = "Off";... et ...this.getField("cAc."+ind+"."+b).value =1;... Par contre cela coche ou décoche juste les cases mais n’affiche ou ne cache pas les réponses comme lorsque l’on coche les cases individuellement. pour cela il faudrait mettre cela en fonction puis faire une boucle pour rappeler ces fonctions.

    Je regarderai lundi si tu n’y arrives pas !

    @+
    😎

    en réponse à : Position des champs #74366
    bebarth
    Maître des clés

    bonjour,

    dans le cas ou plusieurs réponses sont acceptées (dans le champ R.a.b avec le séparateur | entre chaque réponse acceptable), j’aimerais que dans ce cas précis, seule la chaine de caractère se trouvant avant le 1er séparateur s’affiche.

    Il faut rajouter cette ligne : f.value=r.value.split("|")[0];

    J’aimerais également que la taille de la police du champ R.a.b soit remplacée par celle du champ Q.a.b lorsque la case est cochée.

    Et celle-ci : f.textSize=q.textSize;

    Ci-joint un nouveau fichier.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Position des champs #74359
    bebarth
    Maître des clés

    Je me suis posé la question à savoir s’il n’y avait qu’une seule ou plusieurs cases à cocher.

    En fait, cela dépend de ce que tu veux faire exactement. Si il y a une case par question, il faut rajouter l’indice au nom du champ « tempo » créé (ex. : tempo.2.16 pour mon fichier).

    @+
    😎

    en réponse à : Position des champs #74355
    bebarth
    Maître des clés

    bonjour,
    Pour ma proposition je crée un champ temporaire identique au champ réponse à la position du champ question que je supprime lorsque la case est décochée. Le script de cet exemple pour la question/réponse 2.16 est :
    var ind=event.target.name.substring(event.target.name.indexOf(".")+1);
    var q=this.getField("Q."+ind);
    var r=this.getField("R."+ind);
    if (event.target.value!="Off") {
    var f=this.addField("tempo", r.type, q.page, q.rect);
    for (var j in f) {
    try {
    if (typeof f[j]!="function" && j!="name" && j!="type" && j!="page" && j!="rect") f[j]=r[j];
    } catch(e) {}
    }
    q.display=display.hidden;
    r.display=display.hidden;
    } else {
    this.removeField("tempo");
    q.display=display.visible;
    r.display=display.visible;
    }

    Juste une remarque au sujet du cartouche représenté : ne manque-t-il pas le symbole de disposition des vues (représenté par un cône et sa vue de gauche – à droite pour l’ISO) ? Indispensable pour la lecture des plans mécaniques…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Exécution de fonction par bouton #74344
    bebarth
    Maître des clés

    Il faut utiliser « valueAsString » au lieu de « value ». « replace » fonctionne avec une chaîne de caractères mais pas avec un nombre.

    123 est un nombre alors que 123|124 est une chaîne de caractères. « valueAsString » transforme le nombre en chaîne de caractères !

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 mois et 2 semaines par bebarth.
    • Cette réponse a été modifiée le il y a 1 mois et 2 semaines par bebarth.
    en réponse à : Centrage automatique d’un champ #74340
    bebarth
    Maître des clés

    J’ai fait ça de tête pour l’explication de la déclaration des variables… C’est même un peu plus complexe mais il faudrait que je reprenne mes notes pour expliquer plus en détail ! Par contre je ne sais pas si ce qu’est valable pour Acrobat l’est également pour ton logiciel. J’espère que oui !

    @+
    😎

    en réponse à : Centrage automatique d’un champ #74335
    bebarth
    Maître des clés

    C’est étrange !!!
    En fait, la façon de déclarer les variables définie le “niveau de portée” des variables.

    • Une variable déclarée par “var” (var x=”toto”) à une portée limitée à l’environnement ou est déclarée cette variable : une fenêtre de document, une boite de dialogue,…
    • Si il n’y a rien pour la déclarer (x=”toto”), sa portée est limitée à toutes les fenêtres ou boites de dialogue utilisées lors de l’exécution du script.
    • Si elle est déclarée de façon globale (global.x=”toto”), sa portée est l’environnement total d’Acrobat. On peut fermer un fichier et en ouvrir un autre, la variable n’est pas perdue tant qu’on ne quitte pas Acrobat.

    C’est pour cela que dans cet exemple, les variables qui seront utilisées lorsque la boite de dialogue est fermée doivent être déclarée sans “var”. D’où “le champ “undefined” n’existe pas”.

    Dans le script que j’ai écris, je ne pensais pas l’utiliser depuis un bouton. Je l’ai testé directement depuis la console et il fonctionne bien. Par contre, depuis un bouton il faut retirer les privilèges et trustedFunction qui ne fonctionnent pas à ce niveau.
    J’ai également modifié légèrement les lignes pour le repositionnement du champ qui ne fonctionnait pas bien avec ton document (pourquoi ???).

    Ci-joint un nouveau fichier qui fonctionne chez moi. Dis-moi si c’est OK pour toi.

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 mois et 2 semaines par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Centrage automatique d’un champ #74329
    bebarth
    Maître des clés

    bonjour,
    Voici le script pour centrer un champ horizontalement en milieu de page.

    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);
    if (typeof this.getField(nomChamp).page!="object") {
    listeChamps+="\""+nomChamp+"\": "+(-1*(i+1)).toString()+",";
    } else {
    for (var j=0; j<this.getField(nomChamp).page.length; j++) listeChamps+="\""+nomChamp+"."+j+"\": "+(-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: app.trustedFunction(function(bDialogue) {
    app.beginPriv();
    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 && (oRslt["nmCh"]=="" || (/^\s+|\s+$/gm).test(oRslt["nmCh"]))) {
    var txt="Veuillez sélectionner ou indiquer un nom de champ.";
    var testOK=false;
    } else {
    if (valeurListe>0) nmChamp=oRslt["nmCh"];
    else nmChamp=nomListe;
    try {
    laPage=getField(nmChamp).page;
    } catch(e) {
    var txt="Le champ \""+nmChamp+"\" n'existe pas.";
    var testOK=false;
    }
    }
    if (!testOK) app.alert(txt,3);
    return testOK;
    app.endPriv();
    }),
    description: {
    name: "Centrer un champ",
    elements: [
    {
    type: "view",
    elements: [
    {
    type: "view",
    alignment: "align_fill",
    elements: [
    {
    type: "static_text",
    name: "Nom du champ",
    font: "dialog",
    bold: true,
    },
    {
    type: "static_text",
    name: "Sélectionnez...",
    },
    {
    type: "popup",
    item_id: "LCha",
    width: 150,
    alignment: "align_fill",
    },
    {
    type: "static_text",
    name: "ou indiquez son nom :",
    },
    {
    type: "edit_text",
    item_id: "nmCh",
    height: 20,
    alignment: "align_fill",
    },
    ]
    },
    {
    type: "gap",
    height: 5
    },
    {
    type: "ok_cancel",
    },
    ]
    },
    ]
    }
    };
    if("ok"==app.execDialog(bDialogue)){
    var aRect=this.getField(nmChamp).rect;
    aRect[0]=(this.getPageBox()[2]/2)-(aRect[2]/2);
    aRect[2]=(this.getPageBox()[2]/2)+(aRect[2]/2);
    this.getField(nmChamp).rect=aRect;
    }
    } else app.alert("Il n'y a pas de champ dans ce document.",3);

    @+
    😎

    en réponse à : Centrage automatique d’un champ #74327
    bebarth
    Maître des clés

    bonjour,
    C’est possible, mais pour ma part la réponse sera lundi…
    On pourra même faire un menu déroulant avec la liste de tous les champs !

    @+
    😎

    en réponse à : Exécution de fonction par bouton #74308
    bebarth
    Maître des clés

    C’est étrange car le caractère | (ou) est utilisé dans les expressions régulières, et ça fonctionne chez moi…

    Remarque, si tu es certain de ne pas utiliser ce caractère dans tes réponses il ne sera pas nécessaire !

    @+
    😎

    en réponse à : Exécution de fonction par bouton #74304
    bebarth
    Maître des clés

    bonjour,
    Après avoir jeté un coup d’œil sur le script, je ne trouvais pas !!!
    Puis, je me suis aperçu que si on mettait des valeurs simples dans les champs ça fonctionnait et que tous les champs qui ne fonctionnaient pas contenaient des parenthèses… Eurêka !!!

    Lorsqu’on crée l’expression régulière, il faut échapper certains caractères pour qu’ils soient interprétés correctement, donc :
    var RegExTest=new RegExp("^"+this.getField("R."+n+"."+a).value.replace(/[.*+?^${}()|/\[\]\\]/g,"\\$&")+"$");

    @+
    😎

    PS : Le fichier ne passe pas, je te laisse donc faire la modification…

    • Cette réponse a été modifiée le il y a 2 mois par bebarth.
    en réponse à : Exécution de fonction par bouton #74295
    bebarth
    Maître des clés

    bonjour,
    Il faut écrire une expression régulière :
    var lesMots=this.getField("R."+n+"."+a).value.replace(/###/g,"|");
    var RegExTest=new RegExp("^"+lesMots+"$");
    if (RegExTest.test(this.getField("Q."+n+"."+a).value))...

    Et si tu sépares tes mots par une barre verticale “|” (clé|clef) tu peux directement écrire :
    var RegExTest=new RegExp("^"+this.getField("R."+n+"."+a).value+"$");
    if (RegExTest.test(this.getField("Q."+n+"."+a).value))...

    @+
    😎

    en réponse à : Liste déroulante influence la suite du document #74292
    bebarth
    Maître des clés

    bonjour,
    Le fichier que j’ai partagé n’est qu’un exemple à partir de ton fichier pour montrer qu’on peut insérer des pages n’importe où dans le document et non uniquement au début ou à la fin.
    Pour que l’on puisse afficher/supprimer des pages avec Reader, ces pages doivent être des pages modèle. Il faut donc indiquer les pages que tu veux cacher comme “Page Modèle” et modifier le script de sorte qu’elles soient cachées après sélection des menu déroulants !

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Exécution de fonction par bouton #74282
    bebarth
    Maître des clés

    OTAN pour moi, je viens de vérifier et j’ai barré ce qui ne fonctionne pas ci-dessus. D’où l’intérêt de toujours vérifier avant de poster

    …et de vérifier correctement !!! La dernière fois avec l’exemple en GREP, j’avais bien testé avec un point, mais comme un point signifie n’importe quel caractère ça fonctionnait forcément !

    @+
    😎

    en réponse à : Joindre le PDF à un email #74281
    bebarth
    Maître des clés

    Malgré tout je me force à m’en servir afin de mieux pouvoir la dompter le jour ou elle sera imposée par Adobe. (à regret)

    C’est ce que je me suis dit un moment, puis je suis repassé à l’ancienne interface…

    @+
    😎

    en réponse à : Exécution de fonction par bouton #74270
    bebarth
    Maître des clés

    bonjour,
    Effectivement si tu veux traiter tous les champs il n’y a pas besoin de mettre de condition sur la recherche du nom de champ !

    @+
    😎

    en réponse à : Exécution de fonction par bouton #74259
    bebarth
    Maître des clés

    J’ai lu en diagonale vite fait les scripts, et il y a quelque chose qui m’interpelle et que je ne comprends d’ailleurs pas pourquoi il n’y a pas d’erreur retournée.
    Lorsque tu écris :
    ...
    if (nomChamp.indexOf("Q.")==0) {
    this.getField("Q.").readonly=false;
    ...
    La première ligne signifie “si le nom du champ commence par Q.” (Q suivi d’un point quel que soit un indice à la suite). Si on avait voulu uniquement “Q.” on aurait écrit if (nomChamp=="Q.") et on n’aurait pas eu besoin de mettre cette ligne dans une boucle.

    La deuxième ligne devrait être this.getField(nomChamp).readonly=false; car il n’y a pas de champ qui se nomme uniquement “Q.” !
    Ça peut également fonctionner avec this.getField("Q").readonly=false; (sans le point) pour exécuter le script sur l’ensemble des champs “Q” avec un indice.

    Et ce, plusieurs fois dans tous les scripts, et idem pour les champs qui commencent par “R.”

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Exécution de fonction par bouton #74258
    bebarth
    Maître des clés

    En GREP le point tout seul signifie “n’importe quel caractère”, il faut donc l’échapper avec un antislash si on veut détecter le point.

    Oups !!! J’ai modifié le post.

    @+
    😎

    en réponse à : Exécution de fonction par bouton #74247
    bebarth
    Maître des clés

    J’avais compris qu’il fallait trouver l’indice n maxi qui n’est pas forcément le nombre d’indices… ni 1 le numéro mini d’ailleurs !

    @+
    😎

    en réponse à : Exécution de fonction par bouton #74230
    bebarth
    Maître des clés

    Bonjour,
    Je dirais même plus …/Verifier\./.test(oChamp.name)… avec le point (échappé à l’aide d’une barre oblique inversée ou backslash) pour être certain que le nom n’est que “Verifier” !

    Lorsqu’on veut vérifier les indices et que l’on compte le nombre de champs il faut être certain qu’ils sont tous consécutif.
    Je dis ça car je me suis déjà fait avoir plusieurs fois pensant qu’ils l’étaient et qu’au final ils ne l’étaient pas.
    Dans ce cas il faut mettre tous les indices dans une table puis les trier car ils ne sont pas forcément ajoutés dans la table dans le bon ordre…

    @+
    😎

    • Cette réponse a été modifiée le il y a 2 mois et 1 semaine par bebarth.
    en réponse à : Exécution de fonction par bouton #74220
    bebarth
    Maître des clés

    bonjour,
    “color” est un objet, donc il faut écrire :
    ...
    this.getField("Q."+n+"."+a).fillColor=eval("color."+colorErr);
    ...

    pour que la valeur d’exportation du menu déroulant associée à “color” soit interprétée correctement.

    @+
    😎

    en réponse à : Exécution de fonction par bouton #74215
    bebarth
    Maître des clés

    Pour récupérer a & b tu fais comme précédemment !
    var nomChamp="Question.12.25";
    var n1=nomChamp.indexOf(".");
    var n2=nomChamp.lastIndexOf(".");
    var a=Number(nomChamp.substring(n1+1,n2));
    var b=Number(nomChamp.substring(n2+1));
    console.println("a : "+a);
    console.println("b : "+b);

    @+
    😎

    en réponse à : Exécution de fonction par bouton #74211
    bebarth
    Maître des clés

    Meni.5 est une case à cocher, if faut donc la mettre = “Off” et non =0.
    … et ça fonctionne avec PDF XChange editor !

    Tu peux sortir l’initialisation des champs “Erreurs” et “Menu.5” de la boucle. Ça ne sert pas à grand chose que ces champs soient initialisés X fois…

    @+
    😎

    • Cette réponse a été modifiée le il y a 2 mois et 2 semaines par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Exécution de fonction par bouton #74210
    bebarth
    Maître des clés

    Peut-être une commande JavaScript qui ne fonctionne pas avec PDF XChange editor !
    Il faut les tester une à une…

    @+
    😎

    en réponse à : Exécution de fonction par bouton #74204
    bebarth
    Maître des clés

    bonjour,
    J’ai peut-être pas bien compris, mais ça a l’air de fonctionner…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Exécution de fonction par bouton #74200
    bebarth
    Maître des clés

    que tous les champs “R.” soient cachés

    if (nomChamp.indexOf("R.")==0) {this.getField(nomChamp).display=display.hidden;}

    que la couleur de fond de tous les champs “Q.” soit transparent

    if (nomChamp.indexOf("Q.")==0) {this.getField(nomChamp).fillColor=color.transparent;}

    que tous les autres champs et boutons dont le 1er indice est supérieur à 1 soient cachés aussi

    Il faut capturer le nombre entre le premier et deuxième point avec indexOf et si c’est un chiffre ou nombre supérieur à 1,

    var n1=nomChamp.indexOf(".");
    var n2=nomChamp.lastIndexOf(".");
    if (Number(nomChamp.substring(n1+1,n2))>1) {this.getField(nomChamp).display=display.hidden;}

    Essaye ça et tu mes dis !

    @+
    😎

    en réponse à : Exécution de fonction par bouton #74195
    bebarth
    Maître des clés

    bonjour,
    Pour vérifier qu’une chaine de caractères commence par une autre chaine de caractères, personnellement j’utilise indexOf==0 :
    if (nomChamp.indexOf("Menu")==0)...
    Avant j’utilisais startsWith() mais il me semble me rappeler avoir eu des soucis (existe aussi avec endsWith()) :
    if (nomChamp.startsWith("Menu")...
    https://www.w3schools.com/jsref/jsref_startswith.asp

    Si tu souhaites supprimer tous les commentaires, ce n’est pas la peine de vérifier tous les types.
    Tu peux simplement écrire :
    var annots=this.getAnnots();
    if (annots) for (var j=0; j<annots.length; j++) annots[j].destroy();

    @+
    😎

    en réponse à : Exécution de fonction par bouton #74183
    bebarth
    Maître des clés

    bonjour,
    Pour “default”, essaye ça :
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    if (nomChamp.indexOf("Q.")==0) {
    if (this.getField(nomChamp).type=="text") this.getField(nomChamp).defaultValue="";
    else this.getField(nomChamp).value=this.getField(nomChamp).getItemAt(0,false);
    }
    }
    et pour “EditReps” :
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    if (this.getField("Menu.5").value!="Off") {
    if (nomChamp.indexOf("Q.")!=0) this.getField(nomChamp).readonly=false;
    } else {
    this.getField(nomChamp).readonly=true;
    }
    }

    Mais là, même ton bouton sera en lecture seule !!! Il faudra l’exclure si tu ne veux pas.
    Tu me dis…

    @+
    😎

    en réponse à : Liste déroulante influence la suite du document #74154
    bebarth
    Maître des clés

    bonjour,

    Comment pourrais-je faire pour supprimer les pages process B, C et D si l’utilisateur sélectionne process A. Ou supprimer les pages Process A, C et D s’il sélectionne le process B? Par supprimer je veux dire qu’il n’aura pas la visibilité sur ces pages car ça ne le concerne pas.

    C’est bien se qui se passe dans le document que j’ai partagé, non !

    Comment faire apparaître des pages formulaires à la sélection du process et non des pages avec seulement un titre. Par exemple, pourrais-je ajouter au document toutes les pages formulaires liées à tous les process (document global). Depuis la sélection du process, le document filtre et n’affiche que les pages en lien avec la sélection initiale.

    Moi je dirai de la même façon que les autres pages, avec des pages modèles… mais je ne suis pas certain d’avoir bien compris !

    @+
    😎

    en réponse à : Fonction TVA multiple #74094
    bebarth
    Maître des clés

    bonjour,
    Il y a un exemple ici :

    Enregistrer sous… avec concaténation de champs

    @+
    😎

    en réponse à : Liste déroulante influence la suite du document #74091
    bebarth
    Maître des clés

    bonjour,
    Ci-joint le fichier qui devrait répondre à ton attente, et ci-dessous les scripts utilisés :

    // Script de document
    var listesFilles= {
    "Product 1": [["- Please Choose -",0],"Process A1", "Process B1", "Process C1", "Process D1"],
    "Product 2": [["- Please Choose -",0],"Process A2", "Process B2", "Process C2", "Process D2"],
    "Product 3": [["- Please Choose -",0],"Process A3", "Process B3", "Process C3", "Process D3"],
    "Product 4": [["- Please Choose -",0],"Process A4", "Process B4", "Process C4", "Process D4"],
    };
    var nbPages=4; // Nombre de pages sans les modèles
    var apresPage=2; // No de page après laquelle insérer les modèles
    function suppression() {
    if (this.numPages>nbPages) {
    this.deletePages({
    nStart: apresPage,
    nEnd: this.numPages-apresPage-1
    });
    }
    }

    // Script de touches personnalisé Product Type
    if (!event.willCommit) {
    suppression();
    if (event.changeEx!=0) this.getField("ProcessType").setItems(listesFilles[event.changeEx]);
    else this.getField("ProcessType").clearItems();
    }

    // Script de touches personnalisé Process Type
    if (!event.willCommit) {
    suppression();
    if (event.changeEx!=0) {
    var pagesModeles=this.templates;
    for (var j=pagesModeles.length-1; j>=0; j--) {
    if (pagesModeles[j].name.indexOf(event.changeEx)==0) pagesModeles[j].spawn(apresPage, true, false);
    }
    }
    }

    Est-ce que cela te convient ? N’hésite pas à demander pour des explications.

    @+
    😎

    PS : Changement de variable de i en j car il y a un problème d’affichage lorsque le i est entre crochets…

    • Cette réponse a été modifiée le il y a 3 mois par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Liste déroulante influence la suite du document #74085
    bebarth
    Maître des clés

    bonsoir,

    c’est faisable et la complexité dépend des connaissances en JavaScript!

    Je regarde demain.

    bonne soirée.

    @+
    😎

    en réponse à : Liste déroulante influence la suite du document #74080
    bebarth
    Maître des clés

    bonjour,
    Je viens de commencer à regarder ton fichier.
    Est-ce bien des liste mère/filles ? Est-ce que tous les éléments du menu “Process Type” diffèrent en fonction de chaque élément du menu “Product Type” ? Par exemple, pour “Product 1” on va avoir un menu “Process Type” avec les éléments “Process A1”, “Process B1″,”Process C1”, etc. et pour “Product 2” on va avoir un menu “Process Type” avec les éléments “Process A2”, “Process B2″,”Process C2”, etc. et ainsi de suite ?
    Pour chaque sélection, ajoute-t-on une seule ou plusieurs pages ? En fin de document ou dans le milieu ?

    @+
    😎

    en réponse à : Fonction TVA multiple #74070
    bebarth
    Maître des clés

    bonjour,
    Ce serait possible de créer un script, mais manuellement se sera plus rapide.
    Il existe une fonction Acrobat pour créer plusieurs copies. Comme tu en as besoin de 72 sur 3 pages, il faut d’abord les mettre tous sur une seule, puis les répartir.

    Plus de détails ce soir si tu n’y es pas arrivé…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Liste déroulante influence la suite du document #74061
    bebarth
    Maître des clés

    bonjour,
    De ce que je comprend, il faut combiner une liste mère-fille avec des pages modèles qui ne seront affichées qu’en fonction du choix.
    Je ne sais pas si je pourrai regarder ton fichier cette semaine… mais je fais ça au plus vite ! Désolé si c’est urgent.

    @+
    😎

    en réponse à : Enregistrer sous… avec concaténation de champs #74054
    bebarth
    Maître des clés

    bonsoir,

    J’ai du formater la date en américain YYYY-MM-JJ pour supprimer les “/” et pour le classement dans l’explorateur.

    Pour le classement, ce format est beaucoup plus adéquat que le format français…

    @+
    😎

    en réponse à : Faire apparaître une image dans le PDF #74044
    bebarth
    Maître des clés

    bonjour,
    Tu ajoutes un script à ton bouton “insertimage” :
    this.getField("image").buttonImportIcon();

    Par contre, ton champ “image” doit être un bouton ou un champ image mais pas un champ texte…

    @+

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Enregistrer sous… avec concaténation de champs #74036
    bebarth
    Maître des clés

    bonjour,
    …et si cela te convient, voici le script à placer dans le répertoire JavaScipt d’Acrobat. Tu peux nommer ce fichier comme il te convient. Pour mon exemple je l’ai nommé SaveAs_tfx256.js
    SaveAs_tfx256=app.trustedFunction(function(chemin) {
    app.beginPriv();
    this.saveAs({
    cPath: chemin,
    bCopy: true,
    bPromptToOverwrite: true
    });
    app.endPriv();
    })

    Et voici le script du bouton d’enregistrement. Ici on ne vérifie que les champs ne sont pas vide, mais on peut également vérifier si le champ DATE est bien une date et si les autres champs contiennent bien certains caractères. A noter que si le champ DATE contient des barres obliques “/” il faudra les remplacer ou supprimer pour ne pas perturber le chemin du fichier.
    if (this.getField("DATE").value!="" && this.getField("NOM").value!="" && this.getField("Prénom").value!="" && this.getField("Lieu").value!="") {
    try {
    SaveAs_tfx256(this.path.substr(0,this.path.lastIndexOf("/")+1)+this.getField("DATE").value+" # "+this.getField("NOM").value+" # "+this.getField("Prénom").value+" # "+this.getField("Lieu").value+".pdf");
    this.resetForm();
    } catch(e) {
    this.getField("leScript").display=display.visible;
    app.alert("Le fichier \"SaveAs_tfx256.js\" n'est pas installé sur cet ordinateur.");
    }
    } else app.alert("Les 4 champs doivent être remplis.",3);
    this.dirty=false;

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Liste déroulante influence la suite du document #74034
    bebarth
    Maître des clés

    bonjour,
    Il faudrait voir exactement ton formulaire car de ce que je comprends ce ne sont pas exactement des listes mères-filles vu qu’il n’y a qu’un seul menu déroulant…

    @+
    😎

    en réponse à : Remplissage automatique avec fichier Excel #74030
    bebarth
    Maître des clés

    Petite précision, il faut enregistrer ton fichier Excel au format .csv, avec séparateur point-virgule.

    Voici un exemple avec un menu déroulant.
    En script de document :
    this.getField("Zone d'alarme").clearItems();
    var p=this.getDataObject(this.dataObjects[0].name);
    var fichier=this.getDataObjectContents(p.name);
    var donnees=util.stringFromStream(fichier);
    var rangees=donnees.split("\r\n");
    var colonnes=new Array();
    for (var i=0 ; ivar cellule=[[“Sélectionnez”,0]]`
    for (var j=1 ; jthis.getField(“Zone d’alarme”).setItems(cellule);`
    Et en script de touches personnalisé du menu déroulant :
    if (!event.willCommit) {
    if (event.changeEx!=0) {
    var lesValeurs=event.changeEx.split(";");
    this.getField("Catégorie").value=lesValeurs[0];
    this.getField("Libellé").value=lesValeurs[1];
    } else {
    this.getField("Catégorie").value="";
    this.getField("Libellé").value="";
    }
    }

    Pour info, il faut éviter d’indiquer des noms de champs avec des caractères accentués qui peuvent perturber le calcul des scripts.

    @+
    😎

    • Cette réponse a été modifiée le il y a 3 mois et 2 semaines par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Remplissage automatique avec fichier Excel #74029
    bebarth
    Maître des clés

    bonjour,
    Pour pouvoir remplir automatiquement certains champs il faut forcément en remplir au moins un…
    Ton champ “Zone d’alarme” est de type “Zone de liste”. Veux-tu le remplir automatiquement avec la liste indiquée dans le champ Excel ? Si il y a 3000 référence ça ne va pas être très pratique d’utilisation. Idem si c’est un menu déroulant…

    @+
    😎

    en réponse à : Liste déroulante multilignes #74000
    bebarth
    Maître des clés

    bonjour,
    Écrire un élément d’un menu déroulant sur plusieurs lignes n’est possible qu’avec un script, par exemple :
    this.getField("nomChamp").setItems(["Élément 1\rsur 2 lignes","Élément 2","Élément 3","Élément 4\rsur 2 lignes","Élément 5"]);

    Tu colles ce script dans la console vide, puis tu sélectionnes tout ce script et touche ENTER du clavier numérique.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Champ calculé sur masque #73993
    bebarth
    Maître des clés

    bonsoir,
    Voici un script pour calculer la date de fin de projet pour ton document (fichier Essai_calcul_date_sur_masque_BB).
    try {
    var n=event.target.name.indexOf(".");
    var nomChamp=event.target.name.substr(0,n)+".FLECHAGE.103a_DebutTravaux";
    if (this.getField("103c_DureeMois").value!="" && this.getField(nomChamp).value!="") {
    var laDate=this.getField(nomChamp).value;
    var objetDate=util.scand("dd/mm/yyyy",laDate);
    objetDate.setMonth(objetDate.getMonth()+this.getField("103c_DureeMois").value);
    event.value=util.printd("dd/mm/yyyy",objetDate);
    } else event.value="";
    } catch(e) {}

    Si lorsque que tu génères la page tu indiques de ne pas renommer les champs de la page modèle (si tu n’as besoin de générer qu’une seule page) cela simplifie le script (fichier Essai_calcul_date_sur_masque_BB1).
    Pour générer la page sans renommer les champs :
    this.getTemplate("FLECHAGE").spawn(this.numPages, false, false);
    Le script réduit :
    if (this.getField("103c_DureeMois").value!="" && this.getField("103a_DebutTravaux").value!="") {
    var laDate=this.getField("103a_DebutTravaux").value;
    var objetDate=util.scand("dd/mm/yyyy",laDate);
    objetDate.setMonth(objetDate.getMonth()+this.getField("103c_DureeMois").value);
    event.value=util.printd("dd/mm/yyyy",objetDate);
    } else event.value="";

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Script pour modifier l’ordre des pages #73988
    bebarth
    Maître des clés

    bonjour,
    Effectivement, il faut que chaque page soit une page modèle puis qu’elle soit générée depuis Acrobat (Reader), comme dans l’exemple joint.
    Voici le script pour cet exemple.
    var noPage=event.target.name.substr(4);
    var modeles=this.templates;
    if (event.target.value!="Off") {
    for (i=0; i<modeles.length; i++) {
    if (modeles.name==noPage) modeles.spawn(this.numPages,false);
    }
    } else {
    var lesPages=this.getField("Page "+noPage).page;
    this.deletePages(lesPages[1]);
    }
    this.pageNum=0;

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Propriété d’un champ #73974
    bebarth
    Maître des clés

    bonjour,

    Curieusement il fonctionne pour les champs réponse mais ne fonctionne pas pour les champs question (sans que la console ne renvoie d’erreur).

    Ça fait un peu juste pour trouver le pourquoi ça ne fonctionne pas !

    Pour la numérotation des champs, je trouvais plus simple comme ça plutôt qu’avoir 2 indices en fin de nom de champ

    OK ! Pour moi i était l’indice du champ et pour modifier tous les champs on ne devait pas mettre le point (par exemple this.getField(“question”).fillColor pour modifier tous les champs de même nom sans indiquer les indices) mais je viens de vérifier et avec le point ça fonctionne également…

    @+
    😎

    en réponse à : Propriété d’un champ #73972
    bebarth
    Maître des clés

    bonjour,
    Voici une version pour “simplifier” l’écriture du script :
    function CoulQ() {
    switch (this.getField("Menu.3").value) {
    case "Jaune":
    var Coul=color.yellow;
    break;
    case "Vert":
    var Coul=color.green;
    break;
    case "Bleu":
    var Coul=color.blue;
    break;
    case "Rouge":
    var Coul=color.red;
    break;
    default:
    var Coul=color.transparent;
    }
    for (var i=2; i<6; i++) this.getField(i+"question.").fillColor=Coul;
    }

    Juste une question : dans la boucle finale, la position de la variable “i” me parait étrange ! Ne serait-ce pas plutôt :
    ... this.getField("question."+i).fillColor ...

    @+
    😎

    en réponse à : Propriété d’un champ #73968
    bebarth
    Maître des clés

    bonjour,

    Comme ce script ne fonctionne me semble-t-il que sur une page,

    Le script est effectivement écrit pour fonctionner sur une seule page. On pourrait l’adapter pour une utilisation sur plusieurs pages mais il faut définir avant ce que l’on veut exactement car ça complique un peu…

    @+
    😎

    en réponse à : Propriété d’un champ #73959
    bebarth
    Maître des clés

    bonjour,

    je ne pourrai regarder que demain…

    @+
    😎

    en réponse à : Extraction de pages par séquence #73955
    bebarth
    Maître des clés

    bonjour,
    Tu peux utiliser ce script soit depuis la console ou en utilisant une action.
    Si tu ne l’utilise qu’une ou quelques fois je te conseille la console sinon si tu penses l’utiliser fréquemment, privilégie l’action.
    Et si tu ne sais pas comment ça se passe, tu demandes !

    @+
    😎

    en réponse à : Propriété d’un champ #73952
    bebarth
    Maître des clés

    bonjour,
    2 façons de faire :

    for (var i=0; i<this.numFields; i++) {
    if (this.getNthFieldName(i).indexOf("ABC")==0) {
    ...
    }
    }
    ou
    for (var i=0; i<this.numFields; i++) {
    if (/^ABC/.test(this.getNthFieldName(i))) {
    ...
    }
    }

    @+
    😎

    en réponse à : Propriété d’un champ #73948
    bebarth
    Maître des clés

    Voici le script expliqué :

    var indMax=0;
    for (var i=0; i<this.numFields; i++) { // numFields = Nombre de champs dans le document
    if (this.getNthFieldName(i).indexOf("question.")==0) indMax++; // Si le nom du champ commence par "question." on incrémente indMax
    // this.getNthFieldName(i) = Nom du champ d'indice i
    // indexOf("question.") = Recherche la chaine de caractères "question."
    // si le résultat est -1 la chaine de caractères n'a pas été trouvée
    // sinon indique la position de cette chaine de caractères
    // donc ==0 signifie que le nom du champ commence par "question."
    }
    for (var a=0; a<indMax; a++) { // strictement inférieur car "question." basé sur 0
    ...
    }

    Tu devrais trouver beaucoup d’explication en consultant :
    https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html
    pour les propriétés ou méthodes, ou en anglais
    https://www.w3schools.com/jsref/default.asp
    ou en français
    https://developer.mozilla.org/fr/docs/Web/JavaScript/Guide/Introduction
    pour le JavaSCript

    @+
    😎

    en réponse à : Propriété d’un champ #73945
    bebarth
    Maître des clés

    bonjour,
    Voici un script qui compte le nombre de chqmps dont le nom commence par “question.”.
    var indMax=0;
    for (var i=0; i<this.numFields; i++) {
    if (this.getNthFieldName(i).indexOf("question.")==0) indMax++;
    }
    for (var a=0; a<indMax; a++) { // strictement inférieur
    ...
    }

    Avec ce script il faut que tous les indices soient consécutifs en partant de zéro sinon il faut mettre les noms des champs (ou juste les indices) dans une table et utiliser la longueur de la table en indMax;

    @+
    😎

    en réponse à : Propriété d’un champ #73940
    bebarth
    Maître des clés

    J’ai écris un utilitaire il y a quelques temps, mais il ne sera pas très utile à Michel car il se place en script d’application et je ne sais pas si et comment ça fonctionne avec son logiciel.

    Je partage le fichier .txt (à renommer en .js) si ça intéresse quelqu’un.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Propriété d’un champ #73938
    bebarth
    Maître des clés

    bonjour,
    https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html#id602
    La position d’un champ est définie dans une table de 4 éléments qui indique les positions x et y dans la feuille du point supérieur gauche et du point inférieur droit [x supérieur gauche, y supérieur gauche, x inférieur droit, y inférieur droit].

    @+
    😎

    en réponse à : Propriété d’un champ #73933
    bebarth
    Maître des clés

    Voici ce que je te disais avec la méthode fieldfull.

    if (event.fieldFull) {
    app.alert("Le champ texte est plein.\rNous allons augmenter sa hauteur pour pouvoir continuer à frapper.");
    var nomChamp=event.target.name;
    this.resetForm([nomChamp]); // Reset field to lose focus
    var aRect=event.target.rect;
    aRect[3]=aRect[3]-event.target.textSize*1.16;
    event.target.rect=aRect;
    event.change=event.changeEx;
    this.getField(nomChamp).setFocus();
    }

    Par contre :

    1. Je n’arrive pas à re-frapper directement. Il faut re-cliquer dans le champ.
    2. Impossible de revenir directement à un champ plus petit si on supprime du texte.

    @+
    😎

    • Cette réponse a été modifiée le il y a 5 mois et 2 semaines par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Propriété d’un champ #73931
    bebarth
    Maître des clés

    bonjour,
    Voici ce que je t’ai fait ! Les champs ne sont visibles que si la question et la réponse correspondante ne sont pas hors page.
    Ce n’est pas très compliqué. Tu me dis ce que tu ne comprends pas.

    // Script de document
    var hauteurChamp=7.5;
    var corps=9.5;
    var interligne=corps*1.16;
    var margeBas=0;
    var mm2pt=72/25.4;
    margeBas*=mm2pt;
    function reglage(champ,rect) {
    champ.delay=true;
    champ.rect=rect;
    champ.delay=false;
    }
    function reglageChamps(ind) {
    for (var i=ind; i<10; i++) {
    var f=this.getField("question."+i);
    var fRect=f.rect;
    var haut=fRect[1];
    var ff=this.getField("nbQ."+i);
    var ffRect=ff.rect;
    var g=this.getField("reponse."+i);
    var gRect=g.rect;
    var gg=this.getField("nbR."+i);
    var ggRect=gg.rect;
    if (i==ind) {
    if (event.target.name.indexOf("nbQ")==0) {
    var originale=fRect[3];
    var finale=fRect[1]-hauteurChamp*mm2pt-(Number(event.changeEx)-1)*interligne;
    } else {
    var originale=gRect[3];
    var finale=gRect[1]-hauteurChamp*mm2pt-(Number(event.changeEx)-1)*interligne;
    }
    var delta=originale-finale;
    if (event.target.name.indexOf("nbQ")==0) {
    fRect[3]=finale;
    reglage(f,fRect);
    gRect[1]-=delta;
    ggRect[1]-=delta;
    ggRect[3]-=delta;
    }
    gRect[3]-=delta;
    var bas=gRect[3];
    reglage(g,gRect);
    reglage(gg,ggRect);
    } else {
    fRect[1]-=delta;
    fRect[3]-=delta;
    reglage(f,fRect);
    ffRect[1]-=delta;
    ffRect[3]-=delta;
    reglage(ff,ffRect);
    gRect[1]-=delta;
    gRect[3]-=delta;
    var bas=gRect[3];
    reglage(g,gRect);
    ggRect[1]-=delta;
    ggRect[3]-=delta;
    reglage(gg,ggRect);
    }
    if (haut>=margeBas && bas>=margeBas) {
    f.display=display.visible;
    ff.display=display.visible;
    g.display=display.visible;
    gg.display=display.visible;
    } else {
    f.display=display.hidden;
    ff.display=display.hidden;
    g.display=display.hidden;
    gg.display=display.hidden;
    }
    }
    }

    // Script de touches personnalisé
    if (!event.willCommit) {
    reglageChamps(event.target.name.substring(event.target.name.lastIndexOf(".")+1));
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
Affichage de 99 réponses de 1 à 99 (sur un total de 3,174)