abracadabraPDF › Forums › PDF – Général › Formulaire PDF, listes en cascades. – RÉSOLU
- Ce sujet est vide.
-
CréateurSujet
-
2 mai 2012 à 12:07 #44174RafaelLopesMembre
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 -
CréateurSujet
-
AuteurRéponses
-
2 mai 2012 à 12:50 #53009MerlinMaî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:
2 mai 2012 à 12:56 #53010RafaelLopesMembreJe 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 encore2 mai 2012 à 12:58 #53011MerlinMaître des clésDe mémoire, il doit aussi y avoir sur ce forum des sujets concernant Scribus.
:geek:3 mai 2012 à 08:29 #53012RafaelLopesMembreBonjour.
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.3 mai 2012 à 08:54 #53013MerlinMaître des clésSalut,
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:
3 mai 2012 à 09:23 #53014RafaelLopesMembreOui 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éponses3 mai 2012 à 09:42 #53015MerlinMaître des clésTout 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:
3 mai 2012 à 09:53 #53016RafaelLopesMembreJe 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 Lopes3 mai 2012 à 10:02 #53017MerlinMaître des clésAcrobat (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.pdfAcroJS 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]
3 mai 2012 à 13:26 #53018RafaelLopesMembreD’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 !3 mai 2012 à 13:40 #53019MerlinMaître des clésDisons 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:
4 mai 2012 à 07:41 #53020RafaelLopesMembreHmm, 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 !4 mai 2012 à 09:26 #53021MerlinMaître des clés2- 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:
4 mai 2012 à 10:19 #53022RafaelLopesMembreParfait,
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;}4 mai 2012 à 10:26 #53023MerlinMaître des clésDans 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:7 mai 2012 à 08:33 #53024RafaelLopesMembreBonjour,
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 Lopes9 mai 2012 à 10:10 #53025RafaelLopesMembreJe 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]
9 mai 2012 à 12:49 #53026alexParticipantL’é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]
9 mai 2012 à 12:54 #53027MerlinMaître des clésLes 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]
9 mai 2012 à 14:53 #53028RafaelLopesMembreMerci à 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 versionMerci encore pour vos réponses rapides !
9 mai 2012 à 15:53 #53029MerlinMaître des clésMerci, 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:9 mai 2012 à 16:23 #53030alexParticipantPour 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…
9 mai 2012 à 16:34 #53031MerlinMaître des clésŒuf corse !
:bonjour:10 mai 2012 à 07:19 #53032RafaelLopesMembreLa 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: )14 mai 2012 à 10:15 #53033RafaelLopesMembreBonjour,
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 !14 mai 2012 à 10:25 #53034MerlinMaître des cléscertains 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]
14 mai 2012 à 11:14 #53035alexParticipantC’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…
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.