Toutes mes réponses sur les forums
-
AuteurRéponses
-
michel c.Participant
J’ai supprimé ce script dans la dernière version (j’avais juste posté le code mais pas le ficher).
Mais ça a l’air de marcher.
Attachments:
You must be logged in to view attached files.michel c.ParticipantJe viens de tenter de modifier le script remplissage par celui-ci :
function remplissage(indice){
var leNom=this.getField(“goto.”+indice).value;
var leMotif=this.getField(“motif.”+indice).value;
var laDate=util.printd(“dd/mm/yyyy”,new Date());
if (leNom!=”” && leMotif!=”-“) {
var commentaire=app.response({
cTitle: “COMMENTAIRE”,
cQuestion: “Commentaire du “+laDate+” pour le motif : \””+leMotif+”\”.”,
cDefault: “Sans commentaire !”,
cLabel: “Élève : “+leNom
});
if (commentaire!=null) {
try {
var OK=0;
for (var i=0; i<32; i++) {
if (this.getField(“date”+indice+”.”+i+”.0″).value==””) {
this.getField(“date”+indice+”.”+i+”.0″).value=laDate;
this.getField(“evenement”+indice+”.”+i+”.0″).value=leMotif;
this.getField(“commentaire”+indice+”.”+i+”.0″).value=commentaire;
OK++;
break;}
if (this.getField(“date”+indice+”.”+i+”.0″).value!=””) {
app.alert({cMsg:”Attention, liste pleine. L’entrée ne peut être saisie”, nIcon:3});
// this.getField(“date”+indice+”.”+i+”.0″).value=””;
//this.getField(“evenement”+indice+”.”+i+”.0″).value=””;
//this.getField(“commentaire”+indice+”.”+i+”.0″).value=””;
OK++;
break;}}
if (!OK) {
for (var i=0; i<32; i++) {
if (this.getField(“date”+indice+”.”+i+”.1″).value==””) {
this.getField(“date”+indice+”.”+i+”.1″).value=laDate;
this.getField(“evenement”+indice+”.”+i+”.1″).value=leMotif;
this.getField(“commentaire”+indice+”.”+i+”.1″).value=commentaire;
break;
}
}
}
} catch(e) {
app.alert(“La fiche de l’élève “+leNom+” est pleine.”,3);
}
};
}
}Mais ça ne fonctionne pas…
michel c.ParticipantOups
michel c.ParticipantJe viens de tester un truc mais qui n’est pas complètement satisfaisant :
J’ai mis en calcul pour le dernier champ de date (date1.31.1) : celui de l’élève 1 (je ne l’ai pas fait pour tous les élèves) le script suivant
if (this.event.value != "") {app.alert({cMsg:"Attention, liste pleine. L'entrée ne peut être saisie", nIcon:3});
this.event.value = "";
this.getField("evenement1.31.1").value = "";
this.getField("commentaire1.31.1").value = "";
}
Du coup la date ne se remplit pas mais par contre cela n’efface pas les champs evenement1.31.1 et commentaire1.31.1 jouxtant le champ date.
Je suppose que l’on peut intégrer cela au script remplissage mais je bloque un peu.
De plus je me demandais si c’était possible de saisir le nombre d’élèves (n) de la classe sur la 1ère page et de ne rendre imprimable que les n pages correspondantes via un bouton imprimer. (Pour éviter d’imprimer des pages non utilisées).
Merci
- Cette réponse a été modifiée le il y a 2 années et 2 mois par michel c..
Attachments:
You must be logged in to view attached files.michel c.ParticipantOui, c’est plus simple et c’est ce que j’ai fait au début, mais après réflexion je me suis dit qu’il y allait forcément y avoir un cas pour lequel ça va arriver (j’aurai une trentaine d’élèves par an sur ce type de dossier)
Et si l’élève a déjà bien rempli son dossier, il est bon pour faire un copié/collé de tout les champs vers un nouveau formulaire vide et de refaire entièrement la page supprimée….
Travaillant sur des formulaires pdf pour la saisie de cours, exercices…Il est relativement fréquent qu’un élève quitte le logiciel sans sauvegarder.
Là je ne veux pas prendre de risque car ces dossiers seront le résultat d’un an de travail.
michel c.ParticipantSi la boite de dialogue affiche 7,5 c’est en fait les valeurs aléatoires affectées aux variables Nb1 et Nb2 (donc 7 et 5) séparés par une virgule.
Il suffit de saisir le résultat du calcul (7×5) + 5 → soit 40 (5 fois le nombre 1 + le nombre 2)
Pour confirmer la suppression.
En fait ce fichier sera un dossier pré-rempli que les élèves devront compléter mais pour ne pas avoir de pages blanches je voulais permettre la suppression de pages tout en vérifiant moi-même qu’ils ne suppriment pas une page par erreur.
Leur version du logiciel que j’utilise ne leur permet pas d’éditer les formulaires et de toute façon ici c’est sans intérêt pour eux d’essayer de cracker ce code.
Le vrai moyen de cracker pour eux c’est de noter les codes proposés et ceux que je saisis et d’arriver à faire la corrélation entre les deux pour retrouver la formule magique. Mais je leur demanderai de détourner le regard lorsque je saisirais le code.
michel c.ParticipantMerci, je vais corriger çà bien que je crois ne plus avoir besoin des boutons en bas de page.
Pour la mise à jour de la liste déroulante une fois les pages supprimées, pour l’instant je ne vois pas trop comment faire mais je vais chercher.
Concernant le mot de passe, en fait, je souhaite un mot de passe pour pas que les élèves suppriment une page accidentellement et qu’ils sauvegardent après.
Le contournement que j’ai trouvé c’est de générer un nombre aléatoire qui s’affiche dans la boite de dialogue.
A partir de ce nombre il faut saisir un code qui est fonction de ce dernier. Les élèves seront donc dans l’obligation de me demander avant la suppression d’une page.
Voici mon code concernant la suppression de page :
var page = (this.getField("PageNumber").value);
var numpage = this.getField("PageNumber").value-1;
var Nb1=(Math.floor(Math.random()*9))+3;
var Nb2=(Math.floor(Math.random()*90))+1;
var codeok = ((5*Nb1)+(Nb2));
this.pageNum = numpage;
this.zoomType = zoomtype.fitP;
var cResponse = app.response({
//Attention, opération irréversible !
cQuestion: " \u0041\u0074\u0074\u0065\u006e\u0074\u0069\u006f\u006e\u002c\u0020\u006f\u0070\u00e9\u0072\u0061\u0074\u0069\u006f\u006e\u0020\u0069\u0072\u0072\u00e9\u0076\u0065\u0072\u0073\u0069\u0062\u006c\u0065\u0020\u0021 ",
//Supprimer la page
cTitle: "\u0053\u0075\u0070\u0070\u0072\u0069\u006d\u0065\u0072\u0020\u006c\u0061\u0020\u0070\u0061\u0067\u0065\u0020 " + page + "?",
cDefault: "",
//Saisir le code
cLabel: " \u0053\u0061\u0069\u0073\u0069\u0072\u0020\u006c\u0065\u0020\u0063\u006f\u0064\u0065 " +" - " + Nb1 + "," + Nb2
});
if (cResponse == codeok){
this.pageNum = numpage;
this.deletePages(numpage);
numeroPage();
this.calculateNow();
//Fait
app.alert({cMsg:"\u0046\u0061\u0069\u0074 ", nIcon:3});
}
//Opération annulée
else {this.pageNum = 0;
app.alert({cMsg:"\u004f\u0070\u00e9\u0072\u0061\u0074\u0069\u006f\u006e\u0020\u0061\u006e\u006e\u0075\u006c\u00e9\u0065", nIcon:3});}
michel c.ParticipantJ’ai trouvé une solution qui est plus acceptable : je gère la suppression des pages depuis la 1ère page avec un menu déroulant qui permet de choisir la page à effacer, la page à effacer qui s’affiche en plein écran avec boite de dialogue de confirmation.
Ainsi je paramètre d’emblée qu’aucune des 12 premières page puisse être effacée, la page contenant le bouton ne peut donc pas l’être.
Par contre un truc que je n’arrive pas à faire : que le code dans la boite de dialogue de confirmation ne s’affiche pas en clair (pas trop grave car je viens de penser à une astuce qui me permettrait de contourner ce problème)
Attachments:
You must be logged in to view attached files.michel c.ParticipantJe viens de modifier le script associé au bouton de l’avant dernière page : en ajoutant cette ligne : if (numpage = this.numPages – 1) {this.getField(“supp_PS49″).display = display.hidden};
Et ça à l’air de fonctionner. Voici le script complet.
var numpage = (event.target.page+1);
var cResponse = app.response({
//Attention, opération irréversible !
cQuestion:
”
\u0041\u0074\u0074\u0065\u006e\u0074\u0069\u006f\u006e\u002c\u0020\u006f\u0070\u00e9\u0072\u0061\u0074\u0069\u006f\u006e\u0020\u0069\u0072\u0072\u00e9\u0076\u0065\u0072\u0073\u0069\u0062\u006c\u0065\u0020\u0021
“,
//Supprimer la page suivante?
cTitle:
”
\u0053\u0075\u0070\u0070\u0072\u0069\u006d\u0065\u0072\u0020\u006c\u0061\u0020\u0070\u0061\u0067\u0065\u0020\u0073\u0075\u0069\u0076\u0061\u006e\u0074\u0065\u003f
“,
cDefault: “”,
//Saisir le code
cLabel: ” \u0053\u0061\u0069\u0073\u0069\u0072\u0020\u006c\u0065\u0020\u0063\u006f\u0064\u0065 ”
});
if (cResponse == “4096”){
if (numpage = this.numPages – 1) {this.getField(“supp_PS49″).display = display.hidden};
else if {this.deletePages(numpage);
numeroPage();
app.alert({cMsg:”Fait”, nIcon:3});
}}
else {app.alert({cMsg:”Opération annulée”, nIcon:3});}Par contre, je ne sais pas trop comment faire pour que se script fonctionne pour cacher tous les boutons supp_PS… qui peuvent se retrouver sur la dernière page après suppression d’autres pages.
michel c.ParticipantJe n’y avais pas pensé. Je vais me pencher là dessus. Il faut que je m’active, je dois donner les fichiers aux élèves lundi après midi…
michel c.ParticipantBonjour, je ne vois pas ce qu’est une page template ni comment on la déclare comme tel (je ne suis pas sous acrobat DC mais sur Pdf XChange Editor)
Sinon, j’avais vu que la 1ère page portait le numéro 0 et qu’il fallait mettre des champs de noms différents pour que cela fonctionne.
Je n’ai pas mis de bouton sur la dernière page non plus car il me semble que l’on ne peut pas effacer la page sur laquelle se trouve le bouton.
michel c.ParticipantJe viens de trouver en ajoutant :
this.calculateNow();
michel c.ParticipantBonjour, je viens de réussir mais j’ai un bouton sur chaque page (sauf sur la dernière) permettant de supprimer la page suivante.
Le bouton fonctionne bien, cependant le numéro de page ne s’actualise pas. Je ne vois pas trop comment faire…
Merci
Attachments:
You must be logged in to view attached files.michel c.ParticipantJe viens de tester :
this.event.value = event.target.page
; sur chacun de mes champs mais cela ne donne rien…michel c.ParticipantJ’ai l’impression que le problème vient du
catch(e) {...
dans la fonction remplissage
Je ne maitrise pas du tout ça mais je crois comprendre cela sert à gérer une erreur, or je ne suis pas sûr que la boucle for précédente génère une erreur si tous les champs sont remplis.
J’ai essayé de remplacer cela par une condition mais pour l’instant je n’y arrive pas.
J’ai inséré
if (this.getField("evenement1.31.1").value != "") {
app.alert("La fiche de l'élève "+leNom+" est pleine.",3);à la place juste pour tester avec la fiche bilan de l’élève 1 mais ça ne fonctionne pas.
Attachments:
You must be logged in to view attached files.michel c.ParticipantSuper, merci beaucoup. Pas sur que j’y sois arrivé tout seul. Sinon, j’aurais mis beaucoup plus de temps pour un résultat qui aurait ressemblé à une usine à gaz.
Il va me falloir du temps pour bien comprendre tout ton script.
J’ai apporté quelques petites modifs et j’ai constaté que l’alerte quand la fiche est pleine ne fonctionne pas.
Je vais essayer de trouver pourquoi mais je ne suis pas sur d’y arriver tout de suite…
- Cette réponse a été modifiée le il y a 2 années et 2 mois par michel c..
Attachments:
You must be logged in to view attached files.michel c.ParticipantMais je ne pense pas avoir besoin de mettre le code en unicode dans le script car le fichier sera présent seulement sur mon poste (prof). par contre cela m’intéresserait si lors de la saisie, des astérisques s’affichent au lieu du texte en clair mais je ne vois pas comment….
Merci
michel c.ParticipantMerci pour les réponse, j’ai intégré le script à une fonction, cela marche à merveille.
Pour les caractères unicode, je ne sais pas trop comment intégrer ça à mon document.
Je précise que je ne travaille pas sous un logiciel adobe mais sous PdfXchange editor.
J’ai trouvé des “traducteurs” de texte en unicode mais je ne vois pas trop comment faire.
Merci
Attachments:
You must be logged in to view attached files.michel c.ParticipantMerci, la page de menu est toute récente et faite un peu trop vite, mais je viens de la corriger. Par contre je ne vois pas trop à quoi sont dues les erreurs de compatibilité avec acrobat et foxit.
Je vais chercher un peu.
- Cette réponse a été modifiée le il y a 2 années et 5 mois par michel c..
Attachments:
You must be logged in to view attached files.michel c.ParticipantMerci beaucoup pour ces précisions, ça va bien m’aider à comprendre.
michel c.ParticipantMon fichier a des bugs, celui de BB marche bien.
J’ai apporté une modif pour éviter la saisie en double d’un élève.
Attachments:
You must be logged in to view attached files.michel c.ParticipantMerci,
J’ai effectivement quelques questions sur la solution que tu proposes.
- La 1ère est sur la forme : pourquoi sur cette ligne :
for (var i=1; i<=nbPlaces; i++) posEleve=[this.getField("El."+i).value,this.getField("place."+i).value];
il n’y a pas d’accolades ? - Ensuite celle ci :
posEleve=[this.getField("El."+i).value,this.getField("place."+i).value];
je ne comprends pas trop le rôle de la virgule - Et globalement, je ne connais pas les tableaux. Celui ci possède 18 lignes et 2 colonnes si je comprend bien avec pour la 1ère colonne :
this.getField("El."+i).value
et pour la 2ème :this.getField("place."+i).value
? - La fonction placement possède 2 paramètres (indice et position) ?
for (var i=1; i<=nbPlaces; i++)
: pour les valeurs i comprises entre 1 et 17 :if (pos==posEleve[1] && ind!=i)
: si le paramètre pos égale à la place i et l’indice différent de i ? (pas sûr du tout)app.alert(posEleve[ind][0]+" et "+posEleve[0]+" ont le même numéro de place : "+posEleve[1],3);
: afficher le message d’alerte…pas bien comprisposEleve[1],3
Bref, il y a pas mal de trucs que je ne maîtrise pas ici. Il faudrait que je m’exerce sur des tableaux plus basiques.
Sinon, j’avais réussi à arriver à mes fins cette nuit d’une autre manière :
for (var i=1 ; i<17 ; i++){
var k = i+1
if (this.getField("place."+i).value == this.getField("place."+k).value)
{app.alert({cMsg:"Plusieurs élèves partagent la même place", nIcon:1});
this.getField("place."+i).fillColor=["RGB", 255/255, 255/255, 0/255];
this.getField("place."+k).fillColor=["RGB", 255/255, 255/255, 0/255];
}
}
for (var i=1 ; i<18 ; i++){
this.getField("eleve."+i).value = this.getField("El."+this.getField("place."+i).value).value;}
Je me demandais si il était possible dans le cas ou le même numéro est attribué que la boite de dialogue affiche en plus du message les n° de places disponibles restantes.
- Cette réponse a été modifiée le il y a 2 années et 8 mois par michel c..
- Cette réponse a été modifiée le il y a 2 années et 8 mois par michel c..
- Cette réponse a été modifiée le il y a 2 années et 8 mois par michel c..
Attachments:
You must be logged in to view attached files.michel c.ParticipantBonjour, j’ai corrigé ces erreurs, malgré tout j’ai le même problème :
Lorsque je clique sur le bouton, seul l’élève affecté à la place 13 s’inscrit dans le champ “eleve.13”
Lorsque je clique une seconde fois, l’élève affecté à la place 14 s’inscrit dans le champ “eleve.14”
Et lorsque je clique encore, plus rien…
Attachments:
You must be logged in to view attached files.13 avril 2022 à 14:52 en réponse à : Insertion obligatoirement différentes de valeurs. – RÉSOLU #70969michel c.ParticipantBonjour, la pièce jointe d’Alex n’est plus disponibe, est ce qu’il est possible de remettre son lien ou est elle définitivement perdue ?
Merci
michel c.ParticipantJe vais me pencher là dessus, je ne sais pas trop encore comment faire. Dans l’immédiat, mon script permettant d’attribuer chaque élève à une place ne fonctionne toujours pas (sauf pour 3 élèves).
Je l’ai simplifié mais je ne vois pas ou est le problème…
for (var l=1 ; l<18 ; l++){
this.getField("place."+l).fillColor=color.white;}
for (var i=1 ; i<18 ; i++){
if (this.getField("place."+i).value < 1 | this.getField("place."+i).value>17) {
app.alert({cMsg:"La valeur est hors de la plage", nIcon:1});}
}
for (var j=1 ; j<17 ; j++){
var k = j+1
if (this.getField("place."+j).value == this.getField("place."+k).value)
{app.alert({cMsg:"Attention, deux élèves ne peuvent pas partager la même place", nIcon:1});
this.getField("place."+j).fillColor=["RGB", 255, 255/255, 0];
this.getField("place."+k).fillColor=["RGB", 255, 255/255, 0];
}
}
for (var m=1 ; m<18 ; m++) {
if (this.getField("place."+m).value == this.getField("El."+m).name.substring(3,5)) {this.getField("eleve."+m).value = this.getField("El."+m).value;}}
Merci
Attachments:
You must be logged in to view attached files.michel c.ParticipantJe n’ai pas encore essayé le setAction car je galère déjà à permuter les contenus de mes champs élèves.i
Je ne sais pas si j’ai la bonne approche, ça marche pour certains champs mais pas tous….
Le script ne me renvoie pas d’erreur mais il y a un truc qui cloche…
J’ai l’impression d’avoir fait une usine à gaz ….
Attachments:
You must be logged in to view attached files.michel c.ParticipantEn fait lorsque je suis en classe, je me base sur mon plan de classe pour plusieurs choses :
- faire l’appel plus rapidement (si une place est libre, l’élève est absent)
- me permettre d’avoir un suivi de l’élève : lorsque je clique sur le nom d’un élève dans un champ “eleve.i”, cela me renvoie directement à la page qui le concerne. Là je peux inscrire si il a été en retard, absent, si il a besoin d’une aide particulière, ses difficultés….
Le souci c’est que sur une année scolaire, il y a parfois des changements de place.
Si je permute les valeurs des champs eleve.1 avec eleve.5 par exemple, lorsque je vais cliquer sur sur le champ élève.1 cela va me renvoyer à la page de suivi de l’élève.5 qui était à cette place auparavant.
Il faut aussi que je permute les contenus des champs que j’ai nommé _motif.i et amotif.i.
Je pourrais donc faire cela sauf que je n’y arrive pas non plus…
Mais je cherche…
michel c.ParticipantJ’ai pensé à permuter les champs “eleves” grâce à leur position mais je coince aussi, il faudrait qu’il y ait une “détection” du nom des champs qu’il faut permuter.
Dans l’exemple, j’ai fait un bouton qui permet de permuter les champs “eleve.1” et “eleve.2” mais ça ne va pas, il faudrait permuter le champ qui se trouve à la position x avec le champ qui se trouve à la position y….
Il y a certainement une fonction que je ne connais pas qui pourrait m’aider à faire ce que je souhaite.
- Cette réponse a été modifiée le il y a 2 années et 8 mois par michel c..
Attachments:
You must be logged in to view attached files.michel c.ParticipantJ’ai trouvé une solution plus simple que de permuter les champs :
Je saisis les noms des élèves dans la liste au centre et j’affecte le n° de place dans la liste déroulante attenante.
La position des élèves dans la liste centrale ne changeant pas, je n’ai plus ce problème de permutation.
Cela a fonctionné au début mais je ne comprends pas pourquoi ça ne marche plus…
Le problème vient peut être du fait qu’il y a la possibilité d’affecter 2 fois la même place à un élève.
Je ne sais pas trop comment remédier à cela.
Merci
Attachments:
You must be logged in to view attached files.michel c.ParticipantMerci beaucoup, cela fonctionne.
michel c.ParticipantJuste une question en passant :
Pourquoi ne pas remplacer
event.value+=" M"+String.fromCharCode(0x00B2);
par :
event.value+=" M²"
?
Merci
michel c.Participantle
+ " "
est là pour ajouter un espace entre la valeur saisie et M²
michel c.ParticipantEffectivement, ça venait de là. Merci
michel c.ParticipantMerci pour l’astuce, je l’ai encore modifié car pour le formulaire sur lequel je travaille, je ne dois pas faire un reset de tous les champs mais seulement de certains.
Mais j’ai trouvé le code qui permet de le faire :
this.resetForm(["Nombre1", "Nombre2", "Text2", "Result"]);
michel c.ParticipantSi tu n’en dis pas plus ou si tu ne met pas ton document en lien ça va être un peu dur de te répondre (en tout cas pour moi).
michel c.ParticipantAlors ça va, ça n’aura pas été fait pour rien.
michel c.ParticipantBon, j’ai commenté un truc avec des commentaires positifs et tout, cependant, je ne sais pas trop qui les verra, j’ai jamais trop bien compris comment fonctionnent ces réseaux sociaux.
Bon je n’ai pas d’abonnement à LinkedIn, juste un compte gratuit, je suppose qu’il y a certaines limitations pour la publication de commentaires.
michel c.ParticipantJe viens de me souvenir que j’avais un compte chez Linked In sur lequel je vais quasiment jamais. Je cherche comment faire pour publier les recommandations mais je n’ai pas trop l’habitude de ce genre de trucs….
michel c.ParticipantMalheureusement je n’utilise aucun réseau social…
michel c.Participant@Merlin : merci, j’ai acheté le bouquin, il a l’air vraiment bien fait et gros avantage pour moi : c’est en français.
@ BB : Merci aussi pour les commentaires sur le script, ça me fait gagner un temps fou.
Et merci aussi pour ce site, j’ai énormément progressé grâce à vous. Il y a quelques moi j’étais loin d’imaginer tout ce que l’on pouvait faire avec des formulaires pdf.
Pour un débutant en programmation, c’est très agréable d’avoir un site comme celui-ci pour se faire aider.
michel c.ParticipantJe commence à étudier ton script, j’en suis au début ;
la variable modeleRegEx est définie par :
/^\d?$/;
Le
\d
définit la saisie de chiffres de 0 à 9 si je comprend bien.^
et$
: semblent marquer le début et la fin d’une ligneLe
?
: Correspond à 0 ou 1 occurrence de l’élément précédent → je ne vois pas trop …Y a t-il de la documentation à ce sujet ? J’ai regardé un peu sur le net et dans JavaScript for Acrobat API Reference mais ça me semble un peu confus.
J’ai aussi du mal à comprendre la ligne suivante :
aTester.splice(event.selStart, event.selEnd-event.selStart, event.change);
event.selStart
semble marquer le début de la saisie etevent.selEnd-event.selStart
; ce qu’il y a entre le début et la fin mais je ne suis pas sûr.Par contre je ne saisis pas le
.splice
Merci
michel c.ParticipantBonjour, je ne comprends pas bien pourquoi je n’arrive plus à voir les réponses de ce fil. Je ne vois plus que ma première intervention du 21/01…
Edit : le fait de répondre a réglé ce problème.
Merci BB pour ta dernière proposition.
- Cette réponse a été modifiée le il y a 2 années et 11 mois par michel c..
michel c.ParticipantJe viens d’intégrer la fonction format chiffre proposée par Merlin dans le fichier proposé par BB. Du coup seuls les chiffres peuvent être saisis.
Attachments:
You must be logged in to view attached files.michel c.Participant@Merlin : Merci pour ces réponses. Je n’ai pas eu besoin d’implémenter le dernier code proposé.
J’ai pu formater mes champs en nombre et pour que cela fonctionne j’ai modifié les conditions dans la fonction affLigne :
if (ac0 === 0 | ac1 === 0 | ac2 === 0 | ac3 === 0 | ac0 > 0 | ac1 > 0 | ac2 > 0 | ac3 > 0)
Et j’ai trouvé ce code super pratique pour déclarer un grand nombre de variable :
for (var i=0; i<=19; i++) {eval("var ac"+i+" = this.getField(\"ac."+i+"\").value");}
Je ne connaissais pas la fonction eval(). J’ai fait un peu des recherches et il y a certaines choses que je ne comprend pas bien.
J’ai entre autre lu que : La fonction eval()évalue le code JavaScript représenté sous forme de chaîne. et plus loin : Si la chaîne représente une expression, eval() évalue l’expression. Si l’argument représente une ou plusieurs instructions JavaScript, eval() évalue les instructions.
Mais je ne comprend pas bien ce qu signifie évaluer une expression.
Et un peu plus loin je lis qu’il est dangereux d’utiliser cette fonction : eval() est une fonction dangereuse, qui exécute le code qui lui est passé avec les privilèges de l’appelant. Si vous exécutez eval() avec une chaîne qui pourrait être affectée par une partie malveillante, vous risquez d’exécuter un code malveillant sur la machine de l’utilisateur avec les autorisations de votre page Web/extension.
Je suppose que le danger évoqué concerne le javascript utilisé sur des pages web et non pas celui intégré aux pdf?
Source : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#never_use_eval!
Merci
Edit : @BB : Merci pour le fichier, je vais prendre le temps d’y voir un peu plus clair….
Attachments:
You must be logged in to view attached files.michel c.Participant@BB (suite) : J’ai regardé le try catch et si je comprends bien, cela crée une exception lors de l’exécution d’une fonction pour qu’une erreur n’affecte pas sa bonne exécution. Je vais essayer de potasser un peu ça.
michel c.ParticipantBonjour et merci pour les réponses.
@BB, pour l’instant, je n’arriverai pas à faire ces modifs, il y a trop de choses que je ne maîtrise pas dans ce script et il me faut pas mal de temps pour le décrypter.J’ai essayé de modifier celui que j’avais fait avec les propositions de Merlin mais en faisant cela fonctionne mal. toutes les lignes s’affichent dès la saisie d’un champ sur la 1ère. J’ai une solution en tête mais ça va être très chargé, surtout sans faire utiliser de variables.
J’ai un souci avec le script de raz ; je dois cliquer 1 fois sur le bouton pour effacer les valeurs et une 2ème fois pour effacer. Et je n’ai pas pu formater les champs en nombre car cela crée une erreur (je pense qu’un champ nombre ne peut pas contenir la valeur vide “”.
Attachments:
You must be logged in to view attached files.michel c.ParticipantMerci pour la proposition.
Lors de la saisie de la dernière ligne il y a un message d’erreur sur la ligne 11 du script (this.getField….is null)
Sinon, ça fonctionne nickel, tu as résolu le problème que j’avais avec le “0” qui lorsqu’il était saisi ne faisait pas apparaître la ligne suivante.
Il y a par contre pas mal de choses que je ne connais pas dans ce script, il va me falloir pas mal de temps pour le décrypter, mais en tout cas merci, ça me fait progresser.
michel c.ParticipantMerci beaucoup, ça fonctionne.
michel c.ParticipantBonjour, je dirais :
var choixA = this.getField("nom_du_menu_a").value;
var choixB = this.getField("nom_du_menu_b").value;
if (choixA == choixB) {this.getField("nom_du_champs_de_point).value = 1}
if (choixA != choixB) {this.getField("nom_du_champs_de_point).value = 0}
Et pour chaque menu déroulant, il faut que tu mettes les valeurs d’export identiques pour les éléments des listes donnant les points à l’utilisateur.
Mais je ne suis pas encore un pro du javascript, donc à vérifier…
michel c.ParticipantMerci
michel c.ParticipantSuis-je bêta, c’était devant mon nez… Comme je n’avais jamais eu besoin de cela, je n’avais pas vu….
Merci pour la réponse
michel c.ParticipantJ’ai trouvé mon erreur ; le script corrigé :
var i = this.getField("Level").value;
var f = this.getField("Table").value;
var Nb1=(Math.floor(Math.random()*i))+1;
var Nb2="";
console.println(i);
console.println(f);
if (f == 10) {var Nb2=(Math.floor(Math.random()*9))+1;
this.getField("Nombre2").value = Nb2;
this.getField("Nombre1").value = Nb1;
console.println(Nb1);
}
if (f < 10) {var Nb2 = f;
this.getField("Nombre2").value = Nb2;
this.getField("Nombre1").value = Nb1;
console.println(Nb1);
console.println(Nb2);}
michel c.ParticipantJe viens de regarder, c’est ce qui est fait dans le script mais en passant par la variable oDate
michel c.ParticipantBonjour, entre temps j’ai réussi à faire quelque chose qui fonctionne (avec l’aide du net) → voir en pièce jointe
bonjour,
michel c. wrote:
(util.printd(« dd/mm/yyyy », new Date())) → 05/01/2022 C’est sur cette ligne que ça cloche ; quelle que soit la date choisie, et le nombre de jours de décalage j’ai cette date du 5/01/22
Il faut écrire : util.printd(« dd/mm/yyyy », new Date(n)); sinon c’est le jour actuel qui est pris en compte ! @+Je vais essayer d’intégrer cela pour voir ce que ça donne.
Merci
- Cette réponse a été modifiée le il y a 2 années et 11 mois par michel c..
Attachments:
You must be logged in to view attached files.michel c.ParticipantMême problème sur le dernier fichier proposé. J’ai juste ajouté un bouton pour afficher les valeurs sur la console.
Je me demandais si il n’y avait pas une solution pour contourner ce problème. Pour cela je voulais savoir à quoi correspond la variable n (il me semble que c’est l’intervalle de temps en millisecondes entre la date décalée et le 1er janvier 1970) mais je ne suis pas sûr.
Attachments:
You must be logged in to view attached files.michel c.ParticipantBonjour, j’ai testé et cela fonctionne sur Adobe mais toujours pas sur notre logiciel.
J’essaye de comprendre…
J’ai affecté le script initial à un bouton en le modifiant un peu (un champ permet de saisir le nombre de jours de décalage pour afficher la date à n+le nombre de jours) : j’ai demandé à afficher sur la console les variables pour voir ce qui ne va pas.
Donc pour la date du 25/03/2030 avec 10 jours de décalage, la console affiche ceci :
le numéro du jour extrait de la date saisie (jour) → 25
le numéro du mois extrait de la date saisie (mois) → 03
l’année extrait de la date saisie (annee) → 2030
le nombre de jours de décalage (nb) → 10
la date saisie (d) → Mon Mar 25 2030 00:00:00 GMT+0100 (Paris, Madrid)
le résultat du calcul (d.getTime()+(nb*24*3600*1000)) (variable n) → 1901487600000
la date calculée avec le décalage (util.printd(“dd/mm/yyyy”, new Date())) → 05/01/2022C’est sur cette ligne que ça cloche ; quelle que soit la date choisie, et le nombre de jours de décalage j’ai cette date du 5/01/22
Attachments:
You must be logged in to view attached files.michel c.ParticipantMerci, je viens enfin de comprendre la différence entre la variable locale et une variable pour tout le document…. Je suis un peu long parfois.
Si je comprends bien, l’ajout de cette ligne :
function boiteDeDialogue() {
au début du script de document fait que tout le script est une fonction et que celle-ci ne se déclenche pas tant que le bouton n’appelle pas la fonction.
Alors que dans l’autre cas, le script s’exécute dès l’ouverture du document ?
michel c.ParticipantPour l’instant mes élèves ne peuvent pas éditer les documents car les contrôles sont fait en classe et j’ai un logiciel de supervision des postes informatiques.
Jusqu’à présent je faisait faire les contrôles en distanciel grâce au module quizmaker sur mon site wordpress mais les possibilités sont moindres que sur les formulaires pdf.
J’hésitais à franchir le pas pour faire les contrôles en distanciel en pdf mais je crois que je vais attendre pour voir ce que je peux mettre en place… Il y a aussi le souci de l’échange de documents entre élèves…
Merci encore pour ces précisions.
michel c.Participantmichel c.ParticipantBonjour, je relance ce fil car il y a un truc qui me chiffonne avec ce fichier…
Au travail, nous avons opté pour un autre logiciel qu’adobe DC pour des raisons financières.
Jusqu’à présent tous les formulaires fonctionnaient aussi bien sur adobe reader DC que sur notre logiciel.
Mais là, c’est le 1er fichier qui me pose un problème (la même date s’affiche dans tous les champs)
Ensuite, j’ai essayé de rajouter les champs manquants pour les semaines 3 à 6 en copiant les scripts et là, même sur adobe reader DC cela ne marche plus, certaines dates sont incohérentes.
Bref, je sèche un peu là….
Attachments:
You must be logged in to view attached files.michel c.ParticipantMerci pour les réponses. Je ne vois pas cette erreur car avec le logiciel dont je dispose pour l’édition de pdf, aucun message ne s’affiche. J’ai pris en compte les remarques en mettant pour chaque script des variables d’incrémentation différentes. ça a l’air de marcher, je n’ai pas de message d’erreur.
J’ai laissé par contre les mêmes pour les scripts associés à des bouton différents mais dont les scripts sont identiques, en supposant que dans ce cas, ce n’est pas nécessaire…
Attachments:
You must be logged in to view attached files.michel c.ParticipantBonne année également et un grand merci pour ce forum et pour le temps passé à répondre aux questions.
michel c.Participantavec la copie d’écran…
Attachments:
You must be logged in to view attached files.michel c.ParticipantMerci beaucoup, ça fonctionne.
Voici le script :
var lesLignes=this.getField("entreesListe").value.split("\r");
for (var i=0; i<lesLignes.length; i++) {lesLignes=lesLignes.split("\/");}
for (var i=0; i<10; i++) {this.getField("liste."+i).setItems(lesLignes);}
michel c.ParticipantBonjour,
Je fais une 3ème tentative, je n’ai toujours pas réussi à poster dans la section PDF – Général et je viens de poster ici sans que cela fonctionne…
Voila, j’ai un script qui me permet d’importer dans 10 listes déroulantes chaque ligne d’un champ de texte multiligne comme élément de la liste.
Ce que j’aimerais faire c’est qu’à la fin de chaque ligne, après un séparateur comme un ; ou un / , l’utilisateur termine la ligne par une valeur numérique.
Et que l’on importe dans les listes déroulantes chaque ligne (avant le séparateur) comme élément de liste et que la valeur après le séparateur soit importée comme valeur d’export de chaque élément des listes.
J’ai trouvé comment à partir d’un script importer des éléments de liste avec des valeurs d’export :
this.getField("liste."+i).setItems([ ["-","0"], ["Choix A",10], ["Choix B",20], ["Choix C",30],["Choix D",40]]);
Et j’ai trouvé également un script qui permet d’importer chaque ligne comme éléments de liste (je l’ai un peu modifier pour faire la même chose pour les 10 listes):
this.getField("liste."+i).setItems(this.getField("entreesListe").value.split(/[\r\n]+/g));
Par contre je ne sais pas trop comment m’y prendre pour faire ce que je souhaite. J’ai lu de la documentation à ce sujet mais il y a pas mal de choses que je ne maîtrise pas, comme l’usage des séparateurs et comment ensuite réintégrer les différentes données dans les listes déroulantes..
Derrière ce besoin, je voudrais que des utilisateurs lambdas puissent mettre les éléments qu’ils souhaitent avec les valeurs d’export sans qu’ils ne rentrent dans les scripts pour cela.
Merci
- Cette réponse a été modifiée le il y a 2 années et 12 mois par michel c..
Attachments:
You must be logged in to view attached files.michel c.ParticipantJe ne crois pas que cela soit possible.
Tu peux faire un formulaire en ligne et il est possible d’exporter ce formulaire en pdf mais garder l’interactivité d’un pdf ….
As tu vu un site web sur lequel ça se fait ?
michel c.ParticipantJe viens de regarder mais quelle que soit la date choisie, c’est la semaine qui commence le 21/12/2021 qui s’affiche en semaine 1 comme en semaine 2 avec mon logiciel (PDF XChange Editor) alors qu’avec adobe acrobat DC ça fonctionne.
C’est la 1ère fois que je vois un script qui dysfonctionne avec ce logiciel…
michel c.ParticipantMerci beaucoup !!!
J’ai pu enfin arriver au bout de ce que je voulais faire. J’ai également amélioré la vérification finale afin qu’elle soit plus fonctionnelle.
Voici le fichier terminé, en espérant qu’il n’y ait pas de bug.
Une des questions que je me pose, sans savoir si cela est possible par la programmation c’est si en spécifiant une année quelle quelle soit (par exemple 2024) est ce qu’il est possible que pour chaque champ (semaine.0 à semaine.53) soit inscrit automatiquement la semaine spécifiée (du lundi au dimanche) en commençant par la 1ère semaine de septembre.
Je ne demande pas le code qui doit être assez long à faire mais juste savoir si c’est possible ou pas.
Merci
Attachments:
You must be logged in to view attached files.michel c.ParticipantJe viens de tenter un truc : créer des variables de A à I avec une valeur 0 qui se mettent à 1 pour chaque “erreur”
Et les messages d’alertes qui s’affichent si la valeur de ces variables est différente de 0.
La variable J avec valeur initiale 0 se met à 1 si toutes les autres variables ont des valeurs différentes de 1.
Si la variable J est différente de 0, le message d’alerte indiquant que tout est ok s’affiche.
Toutes les alertes étant en dehors de la boucle for, je me disais que ça devrait marcher.
Sauf que non….
var condA=0
var condB=0
var condC=0
var condD=0
var condE=0
var condF=0
var condG=0
var condH=0
var condI=0
var condJ=0
if (this.getField("SLR").value != this.getField("LT").value) {var condA = 1;}
if (this.getField("SER").value != this.getField("ET").value) {var condB = 1;}
//Le nombre de PFMP pour les apprentis n'est pas conforme
if (this.getField("SCR").value != this.getField("VT").value) {var condC = 1;}
//Le nombre de semaines de congé pour les apprentis n'est pas conforme
if (this.getField("SLRE").value != this.getField("LE").value) {var condD = 1;}
//Le nombre de semaines au lycée pour les élèves n'est pas conforme
if (this.getField("SERE").value != this.getField("PFMP").value) {var condE = 1;}
//Le nombre de PFMP pour les élèves n'est pas conforme
if (this.getField("SCRE").value != this.getField("VE").value) {var condF = 1;}
//Le nombre de vacances pour les élèves n'est pas conforme
for (var i = 0; i < this.numFields; i++) {
if (this.getField("CheckBox."+i).value == "A" & this.getField("TheckBox."+i).value != "D") {var condG = 1;
///Attention pour les semaines en rouge, les apprentis ne peuvent pas être au lycée quand les élèves sont en PFMP ou en vacances
this.getField("semaine."+i).fillColor = color.red;}
if (this.getField("CheckBox."+i).value == "Off") {var condH = 1;
//Indiquer ou sont les apprentis pour les semaines en vert
this.getField("semaine."+i).fillColor = color.green;}
if (this.getField("TheckBox."+i).value == "Off") {var condI = 1;
//Indiquer ou sont les élèves pour les semaines mises en bleu
this.getField("semaine."+i).fillColor = color.blue;}
if (condA !=1 & condB !=1 & condC !=1 & condD !=1 & condE !=1 & condF !=1 & condG !=1 & condH !=1 & condI !=1) {var condJ=1;
this.getField("semaine."+i).fillColor = color.transparent;}
}
if (condA !=0) {app.alert({cMsg:"Le nombre de semaines au lycée pour les apprentis n'est pas conforme", nIcon:2});}
if (condB !=0) {app.alert({cMsg:"Le nombre de PFMP pour les apprentis n'est pas conforme", nIcon:2});}
if (condC !=0) {app.alert({cMsg:"Le nombre de semaines de congé pour les apprentis n'est pas conforme", nIcon:2});}
if (condD !=0) {app.alert({cMsg:"Le nombre de semaines au lycée pour les élèves n'est pas conforme", nIcon:2});}
if (condE !=0) {app.alert({cMsg:"Le nombre de PFMP pour les élèves n'est pas conforme", nIcon:2});}
if (condF !=0) {app.alert({cMsg:"Le nombre de vacances pour les élèves n'est pas conforme", nIcon:2});}
if (condG !=0) {app.alert({cMsg:"Attention pour les semaines en rouge, les apprentis ne peuvent pas être au lycée quand les élèves sont en PFMP ou en vacances", nIcon:2});}
if (condH !=0) {app.alert({cMsg:"Indiquer ou sont les apprentis pour les semaines en vert", nIcon:2});}
if (condI !=0) {app.alert({cMsg:"Indiquer ou sont les élèves pour les semaines mises en bleu", nIcon:2});}
if (condJ !=0) {app.alert({cMsg:"Tout est ok", nIcon:2});}
Attachments:
You must be logged in to view attached files.michel c.ParticipantBonjour,
j’avais voulu simplifier mon document pour le poster mais ce n’était pas une bonne idée.
Voici le document complet ou presque.
Cette erreur est toujours présente et je n’arrive pas à activer la ligne 37 sans que le message d’alerte s’affiche 53 fois…
Merci
Attachments:
You must be logged in to view attached files.michel c.ParticipantBonjour, la proposition de merlin fonctionne bien.
Pour la dernière proposition, lorsque je colle le script dans la console et que j’exécute, la console renvoie undefined.
Ce que tu appelle script de touche personnalisée c’est un script qui se déclenche souris vers le haut par exemple ?
Je met le 1er script pour tous les menus déroulants et le 2nd sur les champs diff ?
Tu as du oublier la pièce jointe.
Tu as raison de préciser qu’il est inutile d’exécuter les 53 scripts; J’avais remarqué que lorsque j’ai un pdf dans lesquels trop de champs contiennent des scripts, il arrive que mon éditeur plante.
Je précise que je ne suis pas sous adobe mais sous PDF XChange Editor Plus (mais je pense qu’il y a à peu près les mêmes fonctionnalités)
Je réessayerai ce soir
Merci pour les propositions en tout cas.
PS : je ne comprend pas bien cette ligne : this.getField(“sequence.”+i).commitOnSelChange=true
michel c.ParticipantMerci beaucoup pour la réponse et pour les explications.
Ce type de script n’est pas facile pour moi, même si je comprends le principe, il y a certaines choses qui m’échappent encore….mais je vais étudier ça en détail.
Je reviendrai peut être pour d’autres petites questions je pense.
michel c.ParticipantBonjour Est-ce que ce sont des cases à cocher indépendantes ou bien est-ce qu’elles fonctionnent avec un choix unique pour chaque ligne (comme des boutons-radio) ? Peux tu partager ton document ou un exemple ?
Bonjour, il y a un choix unique pour chaque ligne.
Dans mon premier message, le fichier est attaché, je suis le seul à le voir ?
Je remet le fichier.
- Cette réponse a été modifiée le il y a 3 années par michel c..
Attachments:
You must be logged in to view attached files.michel c.ParticipantBon, j’ai fini par trouver ….
J’ai extrait les chiffres des noms de champ et j’ai mis le même script pour toute la colonne 1 :
var nom=event.target.name;
var i = nom.substring(1,3);
if (event.target.isBoxChecked(0)) {
this.getField("E"+i).display = display.hidden;
this.getField("V"+i).display = display.hidden
}
else {
this.getField("E"+i).display = display.visible;
this.getField("V"+i).display = display.visible
}
Pour la colonne 2, j’ai remplacé :
("E"+i) et ("V"+i) par ("L"+i) et ("V"+i)
Pour la colonne 3, j’ai remplacé:
("E"+i) et ("V"+i) par ("L"+i) et ("E"+i)
- Cette réponse a été modifiée le il y a 3 années par michel c..
michel c.ParticipantLe formulaire initial est en construction, je le réactiverai sous peu
michel c.ParticipantPrincipe de base de tout éditeur de logiciel : laisser l’utilisateur croire que c’est de sa faute…
Oui, tu ne crois pas si bien dire…
Après pas mal d’essais, je me suis rendu compte que c’est le fait de rendre la signature obligatoire qui provoquait ce bug…
michel c.ParticipantOui mais je pense que l’erreur vient de moi. Je dois avoir fait une erreur de parametrage.
Lorsque mon formulaire était un peu plus simple et épuré je ne validait qu’une fois…
michel c.ParticipantSi certains veulent voir ce que ça donne, j’ai presque fini mon 1er formulaire → Droit à l’image : personnes majeures
J’ai juste un bug : il faut cliquer 2 fois sur envoyer pour soumettre le formulaire…je planche là dessus…
Vous recevrez le pdf généré à l’adresse e-mail renseignée (le message risque de se retrouver dans les spams)
J’ai mis un mot de passe sur la page pour éviter que n’importe qui accède au formulaire. Il s’agit du nom d’un célèbre site dédié aux formulaires pdf (tout en minuscules)
Je désactiverai ce mot de passe dans quelques jours, je vous laisse le temps de tester si ça vous intéresse…
michel c.ParticipantAprès de nombreux essais, il existe une solution entièrement gratuite et fonctionnelle :
l’extension Contact Form 7
l’extension Send PDF for contact Form 7 (un peu difficile à appréhender au début mais j’ai réussi à sortir un formulaire simple avec un entête)
l’extension Contact Form 7 Signature Addon
Je ne connais pas la portée juridique mais l’extension Send PDF for contact Form 7 permet l’apposition d’une balise : [reference]Et, je cite l’auteur :
[reference] est une simple balise qui est utilisée pour créer des PDF uniques. Elle est également enregistrée dans la base de données. Chaque PDF est nommé comme suit : nom-pdf-[reference] et est téléversé dans le dossier de téléversement de WordPress. Par exemple : document-pdf-56BC4A3EF0752.pdfPar exemple : documennt-pdf-6181a0c2494c6.pdf
Bref, pour des extensions gratuites, ce n’est pas trop mal…
michel c.ParticipantOk, pour les solutions gratuites, il y a :
- l’extension Contact Form 7 qui permet de réaliser des formulaires sur son site word press assez facilement
- Si on ajoute l’extension Send PDF for contact Form 7, on peut exporter le formulaire en pdf et l’admin du site reçoit un exemplaire en pdf du formulaire (il est possible me semble t il d’envoyer une copie par mail à celui qui rempli le formulaire). Je suis en train de tatonner un peu pour bien arriver à faire fonctionner cette extension
- Si on ajoute l’extension PDF Forms Filler for CF7, il est possible de lier son formulaire en ligne avec un formulaire pdf et de mapper les champs que l’on souhaite mais lors de l’export, une filigrane apparaît (sauf si l’on paye pour la version complète)
Parmi les solutions payantes, la meilleure est me semble-t-il WPForms (la version gratuite est déjà pas mal)
Pour 200 $ on peut bénéficier de signatures numériques
l’extension pour générer des pdf semble gratuite en basique mais assez limitée, je suis en train de tester…michel c.ParticipantJe vais fouiller un peu ça, je ne vais plus poster ici, c’est un peu hors sujet dans ce forum. Sauf si cela intéresse certains.
michel c.ParticipantEst ce que quelqu’un a déjà essayé d’intégrer un formulaire à un site wordpress avec signature numérique et export en pdf ?
Il existe beaucoup de modules wp qui proposent cela, j’en ai testé déjà quelques uns. L’option signature est toujours payante (en tout cas d’après ce que j’ai vu jusqu’à présent) mais avant d’envisager un achat, j’aimerais avoir quelques retours.
Merci
michel c.ParticipantJe suis bien d’accord. Cela fait longtemps que l’état aurait du embaucher des développeurs pour que nos administrations puissent bénéficier d’applications adaptées, ça n’est pas les talents qui manquent en France.
Un gros paquet d’argent part effectivement chez Microsoft et autres multinationales du numérique.
Pour en revenir au sujet, je n’a rien trouvé d’aussi simple qu’Adobe Sign pour les parents. Si c’est trop complexe, ce ne sera pas utilisé. Je n’ai pas encore envisagé une signature numérique via page html hébergée sur le site du lycée. Je ne sais pas si c’est faisable et quelle est la portée juridique.
michel c.ParticipantApparemment certains établissement scolaires ont pris des abonnements à adobe sign :
la signature numerique prend sa place dans le monde de l’education
Je vais voir notre gestionnaire à la rentrée pour faire une demande.
Merci en tout cas
michel c.ParticipantJe viens de tester ça, c’est vrai que c’est nickel. La seule question c’est si notre établissement scolaire sera prêt à payer les licences (notre gestionnaire préfère les logiciels achetés plutôt que des abonnements). Et cela dépendra aussi du nombre de licences à acheter je suppose qu’il en faut une pour chaque personne qui utilisera cette fonction.
Les principaux intéressés chez nous sont la secrétaire et l’intendante mais il est fréquent que des enseignants demandent des signatures aux parents pour des sorties ou des voyages. Si on refile du boulot à la secrétaire pour gérer les signatures, ça risque de ne pas le faire…
Je me demandais si il y avait une solution à peu près identique (en tout cas pas trop complexe pour les signataires) et sans abonnement.
michel c.Participant<p style=”text-align: left;”>
Pourquoi ne pas utiliser directement le format « Code Postal » ?
</p>
<p style=”text-align: left;”>Euh. En fait, je n’y avais pas pensé.</p>
<p style=”text-align: left;”>Le bon côté c’est que j’ai appris quelque chose.</p>- Cette réponse a été modifiée le il y a 3 années et 2 mois par michel c..
michel c.ParticipantMerci beaucoup. Du coup je viens de comprendre des trucs.
J’ai fait une modif pour que la fin du prénom soit en minuscules.
this.getField("PRENOM").value.substr(0,1).toUpperCase()+this.getField("PRENOM").value.substr(1).toLowerCase();
michel c.ParticipantMerci, cela marche impec.
J’ai le même souci avec le champ prénom : en action de format j’ai mis le script pour capitaliser la 1ère lettre dispo dans les scripts. Mais si dans le champ prénom la 1ère apparait bien en Majuscule, dans le champ concaténé, la première lettre se transforme en minuscule (sauf si lors de la saisie elle était en majuscule).
Et si je remplace cPrenom.value par cPrenom.valueAsString, cela ne change rien…
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 ? -
AuteurRéponses