Donnez vie à vos documents numériques !
 

PDF avec boutons-radio et listes déroulantes (mère, fille et petite-fille)

abracadabraPDF Forums PDF – Général PDF avec boutons-radio et listes déroulantes (mère, fille et petite-fille)

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #46186
    leludo
    Membre

    Bonsoir à tous
    Je viens de passer quelques heures à rechercher sur Internet et la plupart m’ont conduit sur ce forum

    Voilà, je cherche à faire un formulaire sous Acrobat X me permettant de choisir dans une liste (mère) différents items, puis chaque item devra permettre d’ouvrir une liste (fille) puis chaque fille devra également m’ouvrir d’autres items (petites-filles)
    Ce n’est pas évident d’être clair. Grosso modo, l’utilisateur choisi via un bouton radio une “filière” et le menu s’adapte à son choix

    Je suis parvenu à faire presque ce que je voulais mais…. (j’ai modifié un fichier formulaire trouvé sur ce forum)

    En fonction du choix de la filière, les listes déroulantes doivent évoluer.

    je parviens à faire “mère, fille et petite fille” mais je m’interroge sur un point précis

    Pour mère, j’ai le choix à l’aide d’un bouton radio du choix de la filière (voir mon doc joint), mais je voudrais que les listes déroulantes changent en fonction de la filière “Gestion, Transport et Logistique” (les items changent en fonction de la filière).
    Dois-je faire un quatrième niveau (cela me semble fort difficile) ou bien le choix via le bouton radio est une bonne piste ?

    Je joins mon fichier pdf (fait pour la filière “gestion”) – Je n ‘ai pas fait pour la filière “Transport” et encore pas pour la filière “logistique”
    Là, je bloque vraiment ….

    Je ne vois pas quel chemin je dois prendre
    Merci à vous

    Ludovic P.

Affichage de 14 réponses de 1 à 14 (sur un total de 14)
  • Auteur
    Réponses
  • #66648
    Merlin
    Maître des clés

    Bonjour et bienvenue

    Ceci devrait t’intéresser : https://gist.github.com/JoelGeraci/f14d5277b910d9714a509c98f28e1e4b
    Avec en plus un exemple fourni : http://practicalpdf.com/acrobat-javascript-examples/dependentLists.pdf
    :Smiley15:

    #66649
    leludo
    Membre

    Bonjour
    Merci pour la réponse
    J’ai regardé en détail le js du fichier joint….. J’ai du mal à tout comprendre…. :(
    J’ai modifié quelques noms de champs pour essayer de comprendre…. j’y arrive tout doucement.
    Par contre, je n’ai aucune idée de permettre à un bouton radio de “s’orienter vers une liste déroulante plutôt que une autre”…
    Je n’arrive même pas à concrétiser “ce vers quoi je dois m’orienter”.

    Cependant, avant de prendre connaissance de votre document/aide, j’ai continuer mon travail avec l’aide d’internet, de fichiers exemples

    J’arrive à peu près à ce que je souhaite (4 niveaux-> mere, fille , petite fille et arriere petite fille)

    Le document sera imprimé et sur ce document, il doit y avoir 4 activités (4 blocs de menus déroulants). J’ai fait un 1er bloc “bien” et j’ai fait copier-coller pour arriver à 4 blocs.
    Hors, (je m’en doutais), quand je choisis un menu du bloc 1…. cela se répercute sur le bloc 2.3.4… Comment faire pour “désolidariser” cela ?
    Il faut que l’utilisateur final, puisse compléter indépendamment les 4 bloc/activités …..

    Je ne vois pas du tout… Je sens que j’arrive au but mais ce n’est pas encore cela et pour le moment mon “”travail”” n’est pas exploitable

    merci d’avance pour vos conseils et aides

    Ludovic P.

    #66650
    bebarth
    Maître des clés

    bonjour,
    Il suffit de lancer une initialisation de la liste mère différente selon la valeur du bouton radio :

    Code:
    function Initialisation() {
        if (this.getField(“btRadio”).value==1) {
            init1();
        } else {
            init2();
        }
    }

    @+
    :bonjour:

    #66651
    leludo
    Membre

    Bonjour
    Merci ; c’est toujours sympa de trouver de l’aide.

    Je regarde cela en détail mais rapidement…… Puisqu’il y a un bouton radio (c’est ce que je voulais au début puis j’avais abandonné l’idée), je n’ai plus besoin de 4 niveaux (mon niveau 1 ne doit plus exister du coup sinon, je peux prendre le bouton radio avec le choix 1 et modifier le niveau 1 ce qui n’est pas logique).
    Je vais réfléchir ce soir à un truc : avec ce que vous m’avez indiqué/réalisé, avez-vous tenu compte que l’activité 1 peut dépendre de “gestion administration” et activité 2 de “logistique” et encore l’activité 3 de “Gestion administration” et même l’activité 4 de “logistique” ?…. Si c’est le cas, je vais chercher à rendre cela possible ou bien, les ajouts de votre part ne permettent pas cela ?

    [Hors sujet] Je ne sais pas si j’ai été clair :) [/Hors sujet]

    Edit (après réflexion)

    J’ai 4 activités donc je dois faire “en initialisation”,  —> 4 tests imbriqués les uns dans les autres ?
    par exemple ;

    • en activité 1, je nomme mon groupe de boutons “btRadioActivite1”, en activité 2, je nomme mon groupe de boutons “btRadioActivité2”,etc.
    • je fais des boutons radios, soit 3 boutons radios dans le groupe “btRadioActivite1”, autant dans le groupe ““btRadioActivite2”” et cela donc pour les 4 activités donc 12 boutons radios
    • je fais autant de init que de boutons radio soit 12 init.
    • et….. cela devrait marcher
    • [/list]est-ce dans ce sens que je dois aller ?

      Edit 2 : (après 1h15 de travail/réflexion/analyse),

      j’ai modifié votre Initialisation pour mettre 3 init (du coup, j’ai fait un 3ème init)
      Mais je suis en pleine réflexion : je suis parti sur 4 niveau mais avec les boutons radios, je  n’ai besoin que de 3 niveaux (gestion adm, transport, logistique étant en bouton radio, cela n’a aucun sen que ce soit le 1er niveau !)
      est-il plus facile de revenir à 3 niveaux avec bouton radio ou bien, supprimer le bouton radio et conserver les 4 niveaux

      je débute…. vous l’aurez compris ;)

      mon bout de code est-il propre ? Merci

      Code:
      function Initialisation() {
      if (this.getField(“btRadio”).value==1) {
      init1();
      } else {if (this.getField(“btRadio”).value==2) {
      init2();
      } else {
      init3();
      }
      }
      }
      [/CODE]

      Encore merci
      Ludovic P.

    #66652
    bebarth
    Maître des clés

    est-il plus facile de revenir à 3 niveaux avec bouton radio ou bien, supprimer le bouton radio et conserver les 4 niveaux

    Ce n’est ni plus facile ni plus difficile et je n’ai à première vue pas de préférence, par contre je commencerais chaque liste par “Sélectionnez…” ou quelque chose comme ça !
    Sinon to code n’est pas tout à fait correct, il faut écrire :

    Code:
    function Initialisation() {
        if (this.getField(“btRadio”).value==1) {
            init1();
        } else if (this.getField(“btRadio”).value==2) {
            init2();
        } else {
            init3();
        }
    }

    @+
    :bonjour:

    #66653
    leludo
    Membre

    Merci pour le conseil
    Je regarde cela encore et encore (encore 1 h à comprendre votre code, etc…)
    et je finis par perdre “mon latin”
    je vais me mettre en pause jusque demain car là, je fais n’importe quoi

    je repartirai à “zéro” avec 3 listes déroulantes : à partir du moment où Gestion administration ou Transport ou Logistique est activée via un bouton radio, il n’est pas opportun d’ajouter à nouveau cette information
    Je ferai dans un 1er temps seulement UNE activité puis après je réfléchirai à la reproduire 3 fois MAIS sans lien entre activité 1-2-3-4 (mon doc doit permettre la saisie de 4 activités)
    Mon problème à l’heure actuelle est de ne plus lier l’activité 1 à la 2-3-4 (le copier coller a tout collé est quand je complète le bloc 1, c’est le 2-3-4 qui sont mis à jour de manière identique)
    je joins une image (bidouillée) pour montre ce que je veux au final
    encore merci pour l’aide
    Ludovic P

    #66654
    leludo
    Membre

    Bonsoir
    La nuit porte conseils
    J’ai réfléchi et n’ai pas travaillé de suite sur ordinateur

    Je vais donc abandonner les 4 niveaux de liste, et faire 3 niveaux qui dépendent de 3 boutons radios
    Par exemple (voir capture), en cliquant sur le btRadio2 cela “active” la “fonction” Init2 et affiche le seul contenu de la partie “transport”
    De plus, je réduis au maximum mon Init à la seule “activité. Par exemple, mon init1 contiendra uniquement les valeurs liées à la “gestion administration”, le init 2 uniquement “transport” etc.
    Comme je vais avoir 4 bloc , cela me donnera 12 inits
    donc j’ai étudié dans la fonction initialisation le contenu suivant (je début en javascript donc soyez indulgent)

    Vous en pensez quoi ? je vais dans le bon sens ou pas ? Merci encore

    Code:
    function Initialisation() {
      switch (this.getField(“btRadio”).value){
          // bloc Activité 1
            case 1:
            init1();
            break;
          case 2:
            init2();
            break;
          case 3:
            init3();
            break;
          //bloc Activité 2
          case 4:
            init4();
            break;
          case 5:
            init5();
            break;
          case 6:
            init6();
            break;
          //bloc Actvité 3
          case 7:
            init7();
            break;
          case 8:
            init8();
            break;
          case 9:
            init9();
            break;     
          //bloc Activité 4
          case 10:
            init10();
            break;
          case 11:
            init11();
            break;
          case 12:
            init12();
            break;       
      }     
    }
    #66655
    leludo
    Membre

    Bonsoir
    Bon encore plusieurs à essayer de faire qqchose qui fonctionne et ….. pas terrible

    je parviens grâce à votre aide à faire les 3 ou 4 niveaux de listes déroulantes ; j’ai mis cela dans un bloc que j’appelle “activité 1”
    etant donné que j’ai 3 autres actvités appelées activite 2-3-4,j’ai tenté le copier-coller et là, cela ne fonctionne pas (je m’en doutais)

    en lisant le scipt “fille”, petite fille, etc, on voit bien que  le sélecteur s’appelle ld avec un chiffre et dès lors, un copier coller ne fonctionne pas

    de plus, j’ai abandonné l’idée dans Initialisation (), de faire des choix multiples avec case et break …. cela ne fonctionne pas

    je ne sais plus vers où chercher ? si vous avez des idées, je suis preneur

    je joins mon fichier dans l’état actuel de mes avancées
    merci à vous

    Ludovic P

    #66656
    leludo
    Membre

    Bonsoir à tous
    Je m’y suis remis et je suis parvenu à faire des trucs qui me conviennent ; ce n’est sans doute pas “propre” mais cela “semble fonctionner” !

    Je vous joins le fichier mais il ne peut pas être hébergé ici car trop lourd, je le mets donc sur “ci-joint.com”.  –> https://www.cjoint.com/c/JAbt0Qpt78U
    J’ai quelques questions toutefois

    • j’ai abandonné dans initialisation(), le code Case/Break que je voulais mettre en place ; cela ne fonctionnait pas.
    • le fichier est très lourd (4 Mo), comment faire pour diminuer son poids sachant que 95 % du poids du fichier  est occupé par les “polices” ! (en comparaison, le pdf créé par l’un d’entre vous -> les gourmandises fait x pages pour 2-3 mo ! donc j’ai un gros souci avec mon fichier (voir capture d’écran)
    • j’ai un souci : je veux un bouton “enregistrer” mais dans les propriétés du champs créé, la fonction “utiliser une commande “est grise/vierge ; je ne peux pas créer “exécuter une commande de menus” !
    • je suis ouvert à toutes remarques/critiques donc cela est bienvenue.
    • [/list]Pour info, j’ai presque fini le fichier (sauf activité 3 & 4)

      Encore merci.

    #66657
    Merlin
    Maître des clés

    j’ai un souci : je veux un bouton “enregistrer” mais dans les propriétés du champs créé, la fonction “utiliser une commande “est grise/vierge ; je ne peux pas créer “exécuter une commande de menus” !

    C’est un bug, cette fenêtre devrait proposer une liste de commandes.
    Ceci étant, ce n’est pas grave car la fonction “Enregistrer” n’est pas accessible depuis les champs de formulaire.
    On ne peut que “Enregistrer sous”, et le plus fiable est d’utiliser la commande JavaScript car “Exécuter une commande de menu” dépend de l’interface du logiciel.
    L’interface d’Acrobat pourrait changer, et il n’y a pas qu’Acrobat pour remplir des formulaires PDF.

    app.execMenuItem(“SaveAs”);

    le fichier est très lourd (4 Mo), comment faire pour diminuer son poids sachant que 95 % du poids du fichier  est occupé par les “polices” ?

    – Ne jamais reprendre un vieux document trouvé sur un forum, fait par on ne sait qui, avec on ne sait quel logiciel et qui contient des dizaines de commentaires inutiles. (Salut Alex !  :Smiley08: )
    – N’utiliser que les 14 polices standard dans les champs de formulaire, voir : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/les-14-polices-standard-du-format-pdf/
    – Si la fonction “Optimiser PDF” ne permet pas de supprimer les polices, comme c’est le cas pour ce formulaire, le plus simple est de créer un nouveau document PDF vierge, et d’y copier-coller les champs et les éléments graphiques.

    :Smiley15:

    #66658
    Merlin
    Maître des clés

    Je vous joins le fichier mais il ne peut pas être hébergé ici car trop lourd, je le mets donc sur “ci-joint.com”

    :tutut:
    Il y a beaucoup plus simple quand on utilise Acrobat, voir : https://abracadabrapdf.net/forum/index.php/topic,2974.msg16849.html#msg16849

    #66659
    leludo
    Membre

    :tutut:
    Il y a beaucoup plus simple quand on utilise Acrobat, voir : https://abracadabrapdf.net/forum/index.php/topic,2974.msg16849.html#msg16849

    Merci ; je ne connaissais pas le lien : je mettrai sur Framadrop car je connais bien Framasoft

    #66660
    leludo
    Membre

    C’est un bug, cette fenêtre devrait proposer une liste de commandes.
    Ceci étant, ce n’est pas grave car la fonction “Enregistrer” n’est pas accessible depuis les champs de formulaire.
    On ne peut que “Enregistrer sous”, et le plus fiable est d’utiliser la commande JavaScript car “Exécuter une commande de menu” dépend de l’interface du logiciel.
    L’interface d’Acrobat pourrait changer, et il n’y a pas qu’Acrobat pour remplir des formulaires PDF.

    app.execMenuItem(“SaveAs”);

    Merci ; je vais regarder cela de plus près

    – Ne jamais reprendre un vieux document trouvé sur un forum, fait par on ne sait qui, avec on ne sait quel logiciel et qui contient des dizaines de commentaires inutiles. (Salut Alex !  :Smiley08: )
    – N’utiliser que les 14 polices standard dans les champs de formulaire, voir : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/les-14-polices-standard-du-format-pdf/
    – Si la fonction “Optimiser PDF” ne permet pas de supprimer les polices, comme c’est le cas pour ce formulaire, le plus simple est de créer un nouveau document PDF vierge, et d’y copier-coller les champs et les éléments graphiques.

    :Smiley15:

    D’accord ; le fichier pris sur un forum a été pris sur ce forum que je parcours en long, en large et en travers.
    Pour les polices, je ne savais pas.
    Je vais donc créer un nouveau document pdf vierge ; depuis lelien, j’ai téléchargé les abracadabra Tools mais la commande “nouveau fichier ” n’est pas présente contrairement à ce qui est inscrit dans la page internet

    Merci encore

    #66661
    Merlin
    Maître des clés

    j’ai téléchargé les abracadabraTools mais la commande “nouveau fichier ” n’est pas présente

    Mille excuses, la version en ligne (abracadabraTools DC) n’est pas censée fonctionner avec ta version d’Acrobat. Supprime la.

    Pour Acrobat Pro X il faut la version abracadabraTools X, disponible ici : https://documentcloud.adobe.com/link/track?uri=urn%3Aaaid%3Ascds%3AUS%3Af3c88724-12a9-4eba-8c93-1b3dfd427115

    C’est un document PDF qu’il faut télécharger et ouvrir avec Acrobat, les instructions et le fichier abracadabraTools_X.js sont dedans.

    Bonne année !

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