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éateurSujet
-
26 décembre 2019 à 18:38 #46186leludoMembre
Bonsoir à tous
Je viens de passer quelques heures à rechercher sur Internet et la plupart m’ont conduit sur ce forumVoilà, 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 choixJe 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 à vousLudovic P.
-
CréateurSujet
-
AuteurRéponses
-
27 décembre 2019 à 09:44 #66648MerlinMaî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:27 décembre 2019 à 14:21 #66649leludoMembreBonjour
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.
28 décembre 2019 à 14:56 #66650bebarthMaître des clésbonjour,
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:28 décembre 2019 à 17:53 #66651leludoMembreBonjour
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 niveauxje 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.28 décembre 2019 à 20:46 #66652bebarthMaître des clésest-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:28 décembre 2019 à 21:36 #66653leludoMembreMerci 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 quoije 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 P29 décembre 2019 à 18:46 #66654leludoMembreBonsoir
La nuit porte conseils
J’ai réfléchi et n’ai pas travaillé de suite sur ordinateurJe 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;
}
}30 décembre 2019 à 19:29 #66655leludoMembreBonsoir
Bon encore plusieurs à essayer de faire qqchose qui fonctionne et ….. pas terribleje 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 à vousLudovic P
1 janvier 2020 à 19:57 #66656leludoMembreBonsoir à 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.
2 janvier 2020 à 10:42 #66657MerlinMaître des clésj’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:
2 janvier 2020 à 10:51 #66658MerlinMaître des clésJe 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#msg168492 janvier 2020 à 15:00 #66659leludoMembre:tutut:
Il y a beaucoup plus simple quand on utilise Acrobat, voir : https://abracadabrapdf.net/forum/index.php/topic,2974.msg16849.html#msg16849Merci ; je ne connaissais pas le lien : je mettrai sur Framadrop car je connais bien Framasoft
2 janvier 2020 à 15:04 #66660leludoMembreC’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 internetMerci encore
2 janvier 2020 à 18:38 #66661MerlinMaître des clésj’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 !
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.