Toutes mes réponses sur les forums
-
AuteurRéponses
-
michel c.
ParticipantMerci pour la réponse, je viens d'apprendre quelque chose, je ne savais pas comment incrémenter une valeur.
Entre temps j'avais trouvé un moyen mais plus tiré par les cheveux…
Et effectivement, je ne maitrise pas “isBoxChecked”. J'ai commencé à regarder le lien que tu as posté, il va me falloir un peu de temps, l'anglais n'est pas mon fort….michel c.
ParticipantOui, je me suis aperçu de ma bourde cet après midi. Je comptais poster là dessus mais je me suis laisser happer par un autre truc sur lequel je bute…
Je compte mettre en place une aide interactive qui s'affiche via un bouton en face de chaque question (ça je pense savoir faire)Mais j'aimerais aussi qu'à la fin de l'exercice, l'élève en cliquant sur un bouton pour connaitre son % de bonnes réponses, s'affiche également le nombre de fois ou il a fait appel à l'aide.
J'ai tenté un truc mais qui ne fonctionne pas. Peut être que mes variables ne sont pas déclarées au bon endroit…
Merci
Ps : je n'ai pas intégré encore la modif que tu as faite au script dans mon document mais je ne comprend pas ceci :Code:replace(/,/, “.”)michel c.
ParticipantJe viens de trouver tout seul comme un grand (mais aussi avec une recherche sur le forum mieux formulée)
Je n'arrive par contre pas encore à accepter les points et les virgules pour les séparateurs.michel c.
ParticipantBonjour, je ne comprends pas trop le javascript de document (j’ai du mal avec les fonctions)
Code:function Time2Num(sFormat, sTime) {
if(sTime==””) return “”; // exit
// get date time for Epoch date and sTime
var oTime=util.scand(“mm/dd/yyyy “+sFormat, “01/01/1970 “+sTime);
// convert UTC Offset to milliseonds for adjustment
var fTZOffset=oTime.getTimezoneOffset()*1000*60
// time since the start of the day in millseconds
var fTime=oTime.valueOf()-fTZOffset;
// convert to seconds and return value
return Math.round(fTime/1000);
}Voici ce que je comprend :
Code:function Time2Num(sFormat, sTime)Je suppose que l’on déclare la fonction TimeNum ayant comme paramètres sFormat et sTime
Code:if(sTime==””) return “”; // exitSi la variable sTime est non vide alors on abandonne l’exécution de la fonction
Par contre ensuite, je ne comprend pas pourquoi il n’y a pas “else”
Code:// get date time for Epoch date and sTime
var oTime=util.scand(“mm/dd/yyyy “+sFormat, “01/01/1970 “+sTime);On déclare la variable oTime par contre la fonction util.scand d’après mes recherches sert à convertir la chaine mm/dd/yyyy en secondes (je ne suis pas sûr) mais je ne sais pas trop comment et je ne sais pas à quoi servent les paramètres qui suivent
Code:// convert UTC Offset to milliseonds for adjustment
var fTZOffset=oTime.getTimezoneOffset()*1000*60On déclare la variable fTZOffset mais je ne comprends pas trop la suite…
Pour la suite je pourrais peut être la comprendre seul si j’avais la réponse à ces interrogations.
Mercimichel c.
Participantbonjour,
Je pense que michel c. a oublié de poster un fichier…
Voici une solution sans JavaScript.
@+
:bonjour:Ben pourtant si : le mot Réponse en fin de post renvoie vers un lien hypertexte : le fichier reponse.pdf
michel c.
ParticipantVoila ce que j’ai pu faire : calcul du montant via un bouton. Le calcul ne s’effectue pas si la puissance ou le kilométrage est incorrect. Dans ces cas une fenêtre s’ouvre pour afficher un message d’erreur.
michel c.
ParticipantNe serait il pas possible que :
- si le document n’est pas signé ; lors de la fermeture de celui-ci, la mention Lu et approuvé soit effacée
- si “lu et approuvé” est inscrit et le document signé, cela “aplatisse” le pdf afin que plus aucun champ ne soit modifiable et sauvegarde du document dans la foulée?
[/list]
michel c.
ParticipantDonc pas de possibilité d’avoir une forme de propriété intellectuelle sur des scripts inclus dans les pdf. Si vous vendez à un client des formulaires, rien n’empêche l’échange et la diffusion des scripts inclus dans les documents ?
michel c.
ParticipantJ’ai déjà téléchargé des pdf dont le menu formulaire était verrouillé. Comme celui ci ? Lien
Mon éditeur me précise que les les fonctionnalités d’édition sont limitées car le document contient un formulaire XFA dynamique.
D’après ce que j’ai lu ICI, cela veut dire que ce type de formulaire pdf est tout de même modifiable avec Adobe Designer ?michel c.
ParticipantÇa ne protège que contre les grand-mères et ceux qui ne savent pas utiliser Googol, il existe des dizaines de sites et d’utilitaires comme celui-ci :
https://smallpdf.com/fr/unlock-pdf:geek:
Mince, je ne pensais pas que ce type de protection ne valait pas un clou…
michel c.
Participantmichel c.
ParticipantJe viens de trouver….
michel c.
ParticipantMerci bebarth ! C’est de toute beauté. :jerisjaune:
Effectivement….
Sinon 2 questions : dans cette ligne :
Code:this.getField(theField).display=this.getField(theField).display==display.visible?display.hidden:display.visible;à quoi sert le “?”
Et dans cette ligne :
Code:checkABC(event.target.name.substr(0,1));substr(0,1)) veut dire que l’on extrait 1 caractère à partir de la position 0 du nom du bouton cible ?
Merci
michel c.
ParticipantJe pense que oui, il suffit que les 2 conditions soient remplies.
Si la variable b = 5 alors le champ Cb est visible.
Si la variable c = 7 alors le champ Cc est visible.
Si la variable b=5 et la variable c= 7 alors le champ Ca est visible.Code:var b = (this.getField(“saisieB”).value);
var c = (this.getField(“saisieC”).value);if (b == 5 && c ==7) {
this.getField(“Ca”).display = display.visible;
this.getField(“Cb”).display = display.visisble;
this.getField(“Cc”).display = display.visible;
}else if (b == 5 && c!=7) {
this.getField(“Ca”).display = display.hidden;
this.getField(“Cb”).display = display.visible;
this.getField(“Cc”).display = display.hidden;
}else if (c == 7 && b!=5) {
this.getField(“Ca”).display = display.hidden;
this.getField(“Cb”).display = display.hidden;
this.getField(“Cc”).display = display.visible;
}else {
this.getField(“Ca”).display = display.hidden;
this.getField(“Cb”).display = display.hidden;
this.getField(“Cc”).display = display.hidden;
}ça devrait marcher je pense.
michel c.
ParticipantMerci pour la réponse, j’ai pas mal tergiversé car même après avoir renommé mes checkbox, cela ne fonctionnait pas, j’ai dû faire ce que vous m’aviez expliqué précédemment :.
Code:var positionMenu=this.getField(“repOpi”).currentValueIndices;
this.getField(“operateur1”).value=this.getField(“repOpi”).getItemAt(positionMenu,true);
this.getField(“operateur2”).value=this.getField(“repOpi”).getItemAt(positionMenu,true);.
repOpi est une checkbox cachée, sur le choix “?” et operateur1&2 les checkbox que je souhaite initailiser.
En tout cas, tout marche à merveille maintenant…michel c.
ParticipantBonjour, je ne suis pas découragé, au contraire.
Je suis enseignant et tout a commencé avec le 1er confinement pendant lequel j’ai commencé à utiliser les formulaires pdf afin de faciliter le travail à distance des élève.
J’ai fait acheter pour notre lycée 25 licences d’un logiciel permettant de créer des formulaires pdf afin que d’autres collègues puissent également en profiter.Au bout d’un an d’utilisation, j’ai découvert de plus en plus de possibilités et depuis quelques mois j’ai commencé à tenter d’intégrer quelques scripts, pour rendre les documents un peu plus interactifs et attractifs.
Mais avec le javascript, c’est l’engrenage, je découvre qu’il y a énormément de possibilités et étant de nature curieuse, j’ai envie d’en apprendre toujours un peu plus…
En tout cas, je trouve que vous faites un travail admirable sur ce forum et c’est extrêmement agréable de disposer d’une aide aussi précieuse.michel c.
ParticipantIt’s working. Thank you.
I understand english but i don’t speak very well.
I would have liked to find books in French on javascript for pdf forms but this kind of book does not exist, so I have no other choice to learn javascript for pdf than to do it in English …michel c.
ParticipantMerci pour ta réponse, le javascript est nouveau pour moi et j’essaye de me dépatouiller avec votre aide et les différents sites qui traitent du sujet. J’ai l’impression d’avancer mais aussi peut être d’avancer sans maitriser les fondamentaux…J’ai également commandé un ouvrage mais il tarde un peu à arriver…
Bref, tout ça pour dire que j’ai un peu étudié le script modifié et j’ai quelques incertitudes ; voici ce que j’ai compris :
Code:// on déclare la fonction que l’on nomme simplify. pour str je suppose que c’est l’argument à passer à la fonction
function simplify(str) {
// on déclare la variable result et on lui donne une valeur nulle
var result=””;
// supposition : on déclare la variable data qui sera séparée par un/
var data=str.split(“/”);
// on déclare la variable numOne qui aura comme valeur …là je sèche
var numOne=Number(data[0]);
var numTwo=Number(data[1]);
//boucle pour chaque valeur de i égal au maximum entre numOne et numTwo et i>1 …la suite je sèche
for (var i=Math.max(numOne,numTwo); i>1; i–) {
if (numOne%i==0 && numTwo%i==0) {
numOne/=i;
numTwo/=i;
}
}
// si numTwo égal à 1 alors on donne à la variable result la valeur de numOne je suppose
if (numTwo===1) result=numOne.toString();
// sinon on donne à la variable result la valeur de numOne puis / puis la valeur de numTwo
else result=numOne.toString()+”/”+numTwo.toString();
// on met fin à la fonction et on renvoie la valeur result à la fonction simplify
return result;
}
// on affecte au champ Text1 la valeur 4/6 traitée par la fonction simplify
this.getField(“Text1”).value=simplify(“4/6”);
// on affecte au champ Text2 la valeur 84810/985612 traitée par la fonction simplify
this.getField(“Text2”).value=simplify(“84810/985612”);
Sinon, j’ai également essayé de déclarer 2 variables avant la déclaration de la fonction pour pouvoir saisir la fraction à simplifier sans avoir à modifier le script (j’ai également crée 2 champs : nombre1 et nombre2 sur ma page)
Code:var numerateur = this.getField(nombre1).value;Code:var denominateur = this.getField(nombre2).value;
J’ai ensuite essayé de modifier la fin du script en mettant :
Code:this.getField(“Text1”).value=simplify(“numerateur/denominateur”);
Mais ça ne donne rien…
22 juin 2021 à 18:00 en réponse à : Inscrire le choix d’une liste déroulante dans une zone de texte #69372michel c.
ParticipantMerci beaucoup, ça fonctionne
michel c.
ParticipantPeut être en exportant la valeur 1 pour chaque case cochée puis un script verrouille en écriture chaque checkbox (this.getField(“nom_de_ta_checkbox”).readOnly=true) si la somme des valeurs exportées = 5
michel c.
ParticipantEn réalité j’utilise PDF X-Change editor qui était moins cher pour notre établissement (scolaire). Il y a une console mais je ne l’avais jamais utilisée, je vais m’y mettre…
michel c.
ParticipantC’est pour le cas de figure ou je supprimerais un des champs c* ? Ce qui empêcherait le script de tourner ?
michel c.
Participantça marche très bien, merci.
michel c.
ParticipantMerci pour le lien, je m’endormirais moins bête.
Autre question en passant : y a-t-il un moyen d’éviter les répétitions de ce style :Code:this.getField(“c1”).display = display.visible;
this.getField(“c2”).display = display.visible;
this.getField(“c3”).display = display.visible;
this.getField(“c4”).display = display.visible;
this.getField(“c5”).display = display.visible;
this.getField(“c6”).display = display.visible;
this.getField(“c7”).display = display.visible;En cherchant sur le forum, je viens de tester ça :
Code:var i = 0;
for (i=0 ; i<=7 ; i++){
this.getField(“c” +i ).display = display.visible;Mais sans grand succès
Test4
Mercimichel c.
ParticipantAvec ce code ça à l’air de marcher :
Code:var cSaisie = Number(this.getField(“codesaisi”).value);if (cSaisie == 1024) {
app.alert({cMsg:”code ok”, nIcon:1});
this.getField(“bravo”).display = display.visible;
}else {
app.alert({cMsg:”code faux”, nIcon:1});
this.getField(“codesaisi”).value = 0;
this.getField(“bravo”).display = display.hidden;
}Je ne sais pas pourquoi cela ne marchait pas avec le précédent…
michel c.
ParticipantMerci beaucoup, tout fonctionne implacablement bien maintenant.
J’ai en plus trouvé sur un autre fil un moyen de faire ce qu’il me manquait : faire apparaitre en rouge les champs non remplis.
Je ne connaissais rien à la programmation avant de me mettre aux formulaires pdf et je trouve cela très intéressant.
Avez vous un ouvrage à conseiller (en français) pour que je puisse m’y mettre sérieusement ?michel c.
ParticipantBonsoir, j’espère ne pas être trop pénible avec mes questions, mais je voulais savoir pourquoi ce script :
Code:if (this.getField(“b1”).isBoxChecked(0)) {
this.getField(“aa1”).display = display.visible;
}else {this.getField(“aa1”).display = display.hidden;
}fonctionne correctement avec une seule checkbox b1 mais pas avec les autres ?
- Je voudrais que si la checkbox a1a est cochée ; les checkbox b1 ne puissent pas être cochées et le champ aa1 apparaisse pour masquer le texte. (ça c’est ok)
- et sinon, si une des 4 checkbox b1 est cochée, l’avertissement soit masqué par le champ aa1
[/list]En gros je souhaite que l’avertissement soit visible si aucune case n’est cochée sur la ligne…
.
.
Je pensais avoir tout bon mais quand ça veut pas…Merci pour votre patiencemichel c.
ParticipantMessage écrit par erreur, je viens de découvrir mon erreur après avoir relu mon message…
michel c.
ParticipantMerci pour la réponse, étant débutant en javascript, je tatonne pas mal et j’apprend un peu plus tous les jours…
Je n’avais pas pensé au calcul de valeur par le maximum entre la note calculée et la note proposée.
Merci encore pour ton aide précieuse.michel c.
ParticipantLà j’ai un truc qui fonctionne à peu près ; il faut juste que je vois comment déclencher l’action : il ne faut pas que le document puisse être imprimé avec une valeur erronée :
Code:var noteproposee= this.event.value;
var nNotauto = Number(this.getField(“note20”).value);if (noteproposee < nNotauto || event.value > 20) {
app.alert({cMsg:”La valeur saisie n’est pas conforme, merci de recommencer.”, nIcon:2});
this.getField(“note20p”).value = Math.ceil(this.getField(“note20”).value*2)/2
}michel c.
ParticipantAvec ce code la boite d’alerte s’affiche mais si on la ferme, une saisie précédente incorrecte peut rester.
Code:var noteproposee= this.event.value;
var nNotauto = Number(this.getField(“note20”).value);if (noteproposee < nNotauto || event.value > 20) {
app.alert({cMsg:”La valeur saisie n’est pas conforme, merci de recommencer.”, nIcon:2});
}J’aimerais qu’en cas de saisie incorrecte, une valeur calculée par ce code remplace la valeur erronée :
Code:this.getField(“note20p”).value = Math.ceil(this.getField(“note20”).value*2)/2merci
michel c.
ParticipantMerci pour le conseil, j’ai supprimé le lien vers le document.
Je n’arrive pas à faire fonctionner le script. Qu’il soit déclenchée par une action (souris vers le bas) ou dans la validation de la valeur, rien n’y fait. Quelle que soit la valeur saisie, le message d’alerte n’apparait pas. Je vais continuer à chercher.
Mercimichel c.
ParticipantBonjour, effectivement c’est peut être plus simple en partageant le contenu.Ce document ne pouvant être public, voici un lien vers un document identique avec des zones masquées.
documentIl s’agit du champ nommé note20p ; dans ce document temporaire, j’ai utilisé un script pour le calcul d’une valeur arrondie au demi point supérieur car je n’arrivais pas à faire autrement mais il faudrait que l’examinateur puisse proposer la note qu’il souhaite et que celle ci valide les conditions suivantes :
- valeur supérieure ou égale au champ “note20”
- valeur inférieure ou égale à 20
- uniquement une valeur entière ou avec 5 dixième comme valeur décimale acceptée uniquement
- la valeur obtenue est ensuite utilisée pour le calcul du champ “note60”
[/list]Merci
michel c.
ParticipantJe viens de réussir sans avoir à faire de script.
http://meca05.fr/edu/documentation/files/test2.pdfa+
-
AuteurRéponses