Donnez vie à vos documents numériques !
 

Formulaire PDF, listes en cascades. – RÉSOLU

abracadabraPDF Forums PDF – Général Formulaire PDF, listes en cascades. – RÉSOLU

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #44174
    RafaelLopes
    Membre

    Bonjour,

    Je tiens tout d’abord à préciser que j’ai cherché sur plusieurs forums solutions à mon problème mais qu’à ce jour je n’ai toujours rien, je m’adresse donc à vous.

    Dans le cadre de mon boulot je dois créer un formulaire au format PDF, je ne peux cependant pas acquérir de licence Acrobat Pro et je ne peux pas passer par la version d’essai (milieu professionnel…). Je crée donc un formulaire Avec OpenOffice Calc et je l’exporte au format formulaire PDF, cela marche plutôt bien mais j’ai un soucis. J’aimerais que deux de ses listes sois liées. Par exemple la première liste contient “Nourriture – Boisson” et si l’on sélectionne “Nourriture” la deuxième liste affiche alors “Croissant, Jambon, Saucisson” tandis que si on sélectionne “Boisson” dans la première, la seconde affiche “Coca – RedBull”. Cependant cela marche dans OpenOffice mais lorsque j’ouvre mon pdf via un reader tel que Adobe Reader ou Foxit Reader, la deuxième liste ne s’actualise pas en fonction du choix de la première.

    Auriez vous des solutions avec OpenOffice ? d’autres logiciels à me proposer afin de réaliser ceci ? Du code à créé ? (j’ai des bases de Javascript)

    Merci d’avance pour vos réponses.

    Cordialement,
    Rafaël Lopes

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

    Bonjour et bienvenue,

    concernant les listes liées il y a plusieurs sujets et exemples concrets sur ce forum.
    Si tu as du mal à les trouver je pourrais t’y aider (ce soir).

    Concernant le logiciel a utiliser pour créer des formulaires PDF sans Acrobat je conseillerais en priorité Scribus qui est gratuit et qui supporte toutes les fonctions JavaScript du format PDF.

    :Smiley01:

    #53010
    RafaelLopes
    Membre

    Je vous remercie.
    Je vais télécharger Scribus et essayer de résoudre mon problème tout seul. J’ai eu peur pendant un moment que ce ne soit pas possible sans Acrobat mais le problème vient du fait que le Javascript n’est pas géré avec OpenOffice je crois, je vais donc passer par Scribus!
    Je reposterais dans ce topic si je n’y arrive pas.
    Merci encore

    #53011
    Merlin
    Maître des clés

    De mémoire, il doit aussi y avoir sur ce forum des sujets concernant Scribus.
    :geek:

    #53012
    RafaelLopes
    Membre

    Bonjour.
    J’ai essayé de m’habituer à l’interface de Scribus, c’est pas encore ça mais ça commence à venir. Du coup j’ai essayé de résoudre mon problème, soit faire deux listes déroulante liées, j’ai essayé de prendre exemple sur ce topic “http://abracadabrapdf.net/forum/index.php/topic,1178.msg5648.html” mais l’interface de script de Scribus me parait bien différente des logiciels Adobe et je n’ai rien réussi à faire.
    Auriez vous un petit coup de pouce à me donner?
    Merci d’avance.

    #53013
    Merlin
    Maître des clés

    Salut,

    Dans Scribus :

    – Afficher les Outils PDF : menu Fenêtre : Outils PDF.
    – Double-clic sur un champ (bouton, champ texte, case-à-cocher, etc.) pour ouvrir la fenêtre des Propriétés du champ.
    – Les scripts de documents se trouvent dans le menu Edition : JavaScripts.

    :Smiley15:

    #53014
    RafaelLopes
    Membre

    Oui je sais où mettre les script cependant je ne comprend pas comment récupérer le choix d’une liste en javascript? quelle syntaxe faut il utiliser et où mettre ce code? dans le code validation de la première liste? dans le code action d’une seconde? De plus comment “créer” les différents choix d’une liste en javascript?
    Pardon si mes questions sont basiques mais je pense que je bloque au démarrage, une fois lancé ça devrait aller ^^’
    Merci d’avance pour vos réponses

    #53015
    Merlin
    Maître des clés

    Tout est dans l’exemple fourni par Alex, mais tu pourras difficilement te passer d’Acrobat (au moins une version démo) pour récupérer les JavaScripts car Adobe Reader ne le permet pas.
    Pour le coup, si tu peux attendre la fin de journée ou demain, je pourrais te les ressortir en texte mais c’est un problème que tu rencontreras souvent.
    (Il est toujours plus simple de récupérer des éléments sur des formulaires existants plutôt que de ré-inventer la roue à chaque fois).

    :Smiley01:

    #53016
    RafaelLopes
    Membre

    Je ne comprend pas vraiment en quoi j’aurai besoin D’Acrobat, j’ai besoin d’être un peu plus éclairé sur ce point s’il vous plait.
    Je veux créer un formulaire PDF avec Scribus qui sera ensuite ouvert sous Foxit Reader. Or on peut intégrer du javascript depuis Scribus, à quel moment aurais-je besoin d’Acrobat? J’ai l’impression que mon problème vient du fait que je n’utilise pas la bonne syntaxe. Exemple pour faire un truc bidon. J’ai deux champs Texte, un nommé “Nom” et l’autre nommé “Prenom”, j’aimerais que lorsque l’on remplisse Nom, puis Prénom, un message d’alerte apparaisse. J’ai essayé le code suivant rentré en tant que Validation pour le champ Prenom.

    Code:
    var Valeur1 = this.getField(“Nom”);
    var Valeur2 = this.getField(“Prenom”);
    alert(‘vous vous appellez’ Valeur1 Valeur2 ‘?’);

    cependant ça ne m’affiche rien, je suppose que c’est parce que ma syntaxe est mauvaise et je pense que pour les listes liées le problème est similaire.
    Pardon d’avance si je ne suis pas très clair.
    Cordialement,
    Rafaël Lopes

    #53017
    Merlin
    Maître des clés

    Acrobat (ou PDF Converter, ou autre) te servirait par exemple à récupérer les scripts et autres fonctions des milliers de formulaires existants sur le web.

    Problème de syntaxe en effet :

    var Valeur1 = this.getField(“Nom”).value;
    var Valeur2 = this.getField(“Prenom”).value;
    app.alert(“Vous vous appelez ” + Valeur1 + ” ” + Valeur2 + “.”);

    Les bibles sont disponibles ici :
    AcroJS
    http://partners.adobe.com/public/developer/en/acrobat/sdk/AcroJS.pdf

    AcroJS guide du JavaScript
    http://www.adobe.com/devnet/acrobat/pdfs/AcroJSGuide.pdf
    Lien corrigé : http://partners.adobe.com/public/developer/en/acrobat/sdk/pdf/javascript/AcroJSGuide.pdf

    :Smiley01:

    [attachment deleted by admin]

    #53018
    RafaelLopes
    Membre

    D’accord, le fait est que je réalise ce formulaire dans le cadre d’un stage, du coup l’entreprise aimerait mieux ne pas acheter Acrobat, d’autant plus que si j’ai bien compris Acrobat me serait d’une grande aide mais ne m’est pas indispensable? Si je dois me taper des masses de Javascript alors Soit, ça me fera un gros projet a présenter pour mon rapport de stage  :Smiley08:
    Bon vu qu’apparemment je vais avoir beaucoup de JS, je vais aller me retaper des tutos dessus plutôt que de venir vous embêter pour des idioties comme je viens de le faire.
    Merci pour les deux liens mais le deuxième est mort!
    Merci encore pour le coup de pouce!
    Edit:”Pour le coup, si tu peux attendre la fin de journée ou demain, je pourrais te les ressortir en texte mais c’est un problème que tu rencontreras souvent.”
    Hm oui je veux bien, au moins pour un exemple parce que la je n’arrive pas à démarrer, et si après je vois que j’en ai encore besoin je téléchargerai Acrobat et je me débrouillerai!
    PS:Merci pour tes réponses si rapides !

    #53019
    Merlin
    Maître des clés

    Disons que vouloir faire des formulaires PDF sans Acrobat c’est un peu comme vouloir faire des fichiers SWF sans Flash ou vouloir faire des fichiers PSD sans Photoshop…
    Ca complique forcément.

    Heureusement, il existe d’autres logiciels que ceux d’Adobe pour faire des formulaires PDF : PDF Converter Pro, PDFpenPro, etc.
    Tous disponibles en version démo.

    :idee:

    #53020
    RafaelLopes
    Membre

    Hmm, oui sauf que je fais ça dans le cadre du travail, je ne peux donc pas profiter de tous ces logiciels :/
    J’aurais besoin d’un peu d’aide pour quelques syntaxes de base et après je pourrais me dérouiller tout seul, avec scribuc créer les champs et la mise en page et facilement faisable, j’ai juste des problèmes de syntaxe.
    En gros j’ai besoin de savoir faire en Javascript ces 4 choses:
    1-) Récupérer la valeur d’un champ/d’une liste, ca c’est bon vous m’avez donné la syntaxe auparavant, soit “var Valeur1 = this.getField(“Nom”).value;
    2-) Attribuer une valeur à un champ via Javascript: J’ai testé “Texte1.value = “Miam”;” lorsque j’appuie sur un bouton mais ça ne marche pas, ça aurait été trop simple.
    3-) Attribuer une liste de valeur à une liste via Javascript, la je sais pas trop, faut passer par un tableau peut être?
    4-) Afficher un texte dans un champ NON MODIFIABLE par l’utilisateur via Javascript(genre si il choisi France je dois pouvoir afficher dans un champ le mot Europe, pas dans une alerte mais dans un champ)
    Alors voilà pourriez vous m’aider avec ces 4 formules? je suis sur que ce n’est pas bien dur, après c’est de l’application toute bête que je pourrais faire. Par avance désolé de ne pas pouvoir faciliter le travail en téléchargeant un logiciel payant ou une version d’essai mais dans le cadre de l’entreprise je ne peux pas trop me permettre.
    PS: Merci merlin pour toute l’aide que vous m’apportez !

    #53021
    Merlin
    Maître des clés

    2- mauvaise syntaxe :

    this.getField(“Texte1”).value = “Miam”;

    3- Il faut rechercher “insertItemAt” dans la bible JavaScript.

    4- On peut “pousser” l’info vers le champ en lecture seule (depuis la liste déroulante par ex.) :

    if (event.target.value == “France”) {this getField(“champNonModifiable”).value = “Europe”;}

    Ou bien la “tirer” :

    if (this.getField(“Liste”).value == “France”) {event.target.value = “Europe”;}

    :Smiley15:

    #53022
    RafaelLopes
    Membre

    Parfait,
    Exactement ce qu’il me fallait.
    merci encore.
    Edit: Dans tes 2 syntaxes pour la 4 tu as oublie le ” ” ” après “Europe” et le “.” entre “this” et “getField”, je le dis juste au cas où d’autres personnes se serviraient de ce topic a l’avenir :)
    Aussi le script 4 ne marche pas chez moi (étrange) je l’ai modifié comme cela et maintenant ça marche : “if (this.getField(“myList”).value == “France”) {this getField(“champNonModifiable”).value = “Europe;}

    #53023
    Merlin
    Maître des clés

    Dans tes 2 syntaxes pour la 4 tu as oublie le ” ” ” après “Europe” et le “.” entre “this” et “getField”, je le dis juste au cas où d’autres personnes se serviraient de ce topic a l’avenir :)

    Merci, c’est corrigé.
    :geek:

    Aussi le script 4 ne marche pas chez moi (étrange) je l’ai modifié comme cela et maintenant ça marche : “if (this.getField(“myList”).value == “France”) {this getField(“champNonModifiable”).value = “Europe;}

    Tout dépend de là où il se trouve : event.target fait référence au champ “cible de l’évènement utilisateur”, en clair c’est le champ cliqué/activé.
    :Smiley01:

    #53024
    RafaelLopes
    Membre

    Bonjour,
    je reviens moi et mes problèmes, décidément  :Ooops:
    J’explique mon problème:
    Les données ne sont pas prises en comptes en “temps réel”, par exemple, je choisi France dans la liste1 et j’aimerais cliquer juste après dans la liste 2 et avoir comme option “Paris – Lyon – Marseille …”. Or la je choisi un élément dans la première liste et je suis obligé de cliquer ailleurs, me repositionner sur la première liste et ensuite appuyer sur Entrée et enfin la deuxième liste est remplie.
    J’ai essayé de lancer la fonction via d’autre actions javascript, par exemple lorsque la souri se positionne sur la deuxième liste etc… mais cela provoque aussi des bugs de la même nature :/
    J’ai testé avec Adobe Reader et Foxit Reader, le problème ne vient donc pas du reader je pense.
    Question supplémentaire concernant le deleteItemAt(); il ne supprime qu’un élément, n’y a-t-il pas moyen  de supprimer tous les éléments?
    Edit : Trouvé, c’est la fonction”clearItems”
    Pardon encore pour mes problèmes “bidons” et Merci d’avance pour votre aide.
    Cordialement,
    Rafaël Lopes

    #53025
    RafaelLopes
    Membre

    Je me permet un petit UP.
    En effet la réalisation du formulaire touche à sa fin et j’ai toujours ce “problème” dérangeant.
    Auriez vous une solution?
    J’ai mis en pièce jointe un exemple du problème.
    Merci d’avance

    [attachment deleted by admin]

    #53026
    alex
    Participant

    L’évènement déclencheur n’est pas la validation du premier champ mais sa modification (voir ce qui concerne les évènements dans la spécification JavaScript d’Acrobat).
    Donc script ci-dessous à placer Onglet Format:script de touche personnalisé:

    console.clear();
    ev=this.event.change;
    console.println(ev);
    if (ev==”France”)
    {
    this.getField(“Liste2”).clearItems();
    this.getField(“Liste2”).insertItemAt(“Paris”);
    this.getField(“Liste2”).insertItemAt(“Tours”);
    }

    if (ev==”Angleterre”)
    {
    this.getField(“Liste2”).clearItems();
    this.getField(“Liste2”).insertItemAt(“Londes”);
    this.getField(“Liste2”).insertItemAt(“Brighton”);
    }

    if (ev==”Portugal”)
    {
    this.getField(“Liste2”).clearItems();
    this.getField(“Liste2”).insertItemAt(“Lisbonne”);
    this.getField(“Liste2”).insertItemAt(“Porto”);
    }

    Voir maquette jointe qui répond à votre problème.
    Nota1: depuis que la gestion des évènements sous Acrobat fonctionne à peu près correctement, il n’est pas nécessaire d’utiliser eventWillCommit comme dans mes exemples précédents, attention par contre à bien prendre en compte event.change ou event.changeEx (voir mes exemples sur ce site).
    Nota2: la syntaxe insertItemAt() utilisée ici fonctionne mais elle est incomplète (voir mes exemples).

    [attachment deleted by admin]

    #53027
    Merlin
    Maître des clés

    Les grands esprits se rencontrent…
    :Smiley01:

    J’ai une autre solution beaucoup moins technique à base de case-à-cocher (capture d’écran jointe), mais contrairement à la solution d’Alex cela ne fonctionne qu’avec les versions 7 ou ultérieures de Reader et d’Acrobat (ou peut-être 6, je ne me souviens plus bien).

    :Smiley03:

    [attachment deleted by admin]

    #53028
    RafaelLopes
    Membre

    Merci à vous deux !
    @ alex: merci je vais tester ça!
    @ Merlin: Merci, cependant es tu sur que c’est sous scribus? je ne trouve pas cette option sur ma version :/

    Merci encore pour vos réponses rapides !

    #53029
    Merlin
    Maître des clés

    Merci, cependant es tu sur que c’est sous scribus? je ne trouve pas cette option sur ma version

    Non, c’est une capture d’écran d’Acrobat.
    Pour Scribus la solution d’Alex me parait plus adaptée.
    :Smiley01:

    #53030
    alex
    Participant

    Pour moi, cocher la case à cocher n’est pas suffisant car il faut également lancer le script de remplissage du champ fille sur validation, cette fois et en prenant pour argument this.event.value. Ceci ne fonctionnera que sur les versions récentes d’Acrobat ou Adobe Reader. Les solutions que je propose fonctionneront sur des versions plus anciennes où la case à cocher dont parle Merlin n’existait pas…

    #53031
    Merlin
    Maître des clés

    Œuf corse !
    :bonjour:

    #53032
    RafaelLopes
    Membre

    La solution d’alex fonctionne à merveille, Cependant ça fout un peu la zizanie si on remplace les if/else if par des switch case ! La syntaxe de mon switch case devrait être bonne puisqu’elle fonctionnait avant mais une fois adaptée à ton script, cela rempli bien la deuxieme liste mais des que je clique sur celle ci(la deuxieme) les items disparaissent  :Smiley07:, je vais donc faire ca avec des if, la syntaxe est plus lourde mais cela a le mérite de fonctionner au moins !

    Merci à vous deux.  :Smiley08:
    Sous Scribus il faut mettre le script d’alex dans l’onglet Format (de la liste) -> Sur Mesure -> Frappe. (je le dis au cas où certains auraient le même problème que moi à l’avenir.  :Smiley01: )

    #53033
    RafaelLopes
    Membre

    Bonjour,
    Me revoilà  :Smiley11:
    La conception de mon formulaire touche (enfin) à sa fin!
    Il  me reste juste deux petits soucis.
    certains nombres sont arrondis, par exemple si je crée une fonction comme celle ci si (x=blabla) alors y=12.07 j’aurai dans le champs y la valeur 12. rien à faire, j’ai beau mettre des points, des virgules, des guillemets, sans guillemets, j’aurai toujours 12 en résultat. Auriez vous une solution à ce problème?
    Enfin, il me reste une fonction à implémenter, un calcule de nombre de jours ouvrés entre deux dates, qui exclue donc weekend et fériés.
    Je saurais probablement le faire si je mettais 4 Champs, un pour le jour (Lundi Mardi …), un pour le jour (12, 23…), le mois( Novembre…) et l’année (1992) que doit remplir l’utilisateur, mais ça me donnerait une énorme fonction avec plusieurs boucles for … un joyeux bordel donc, je me demandais s’il n’y avait pas un moyen plus “simple”.
    Merci d’avance !

    #53034
    Merlin
    Maître des clés

    certains nombres sont arrondis, par exemple si je crée une fonction comme celle ci si (x=blabla) alors y=12.07 j’aurai dans le champs y la valeur 12. rien à faire, j’ai beau mettre des points, des virgules, des guillemets, sans guillemets, j’aurai toujours 12 en résultat. Auriez vous une solution à ce problème?

    Capture d’écran (de Scribus) jointe.
    :Smiley01:

    [attachment deleted by admin]

    #53035
    alex
    Participant

    C’est sans doute le format du champ qui n’est pas correct (voir réponse de Merlin) , il suffit de le préciser. Toutefois, avec Scribus, je ne sais pas si on a droit au séparateur de milliers. A voir. En ce qui concerne le comptage des jours ouvrés, j’ai déjà fait ça, e vais voir si je n’ai pas un script dans mes placards, mais je ne suis pas sûr qu’i exclue bien les jours de semaine fériés…

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