Toutes mes réponses sur les forums
-
AuteurRéponses
-
bebarthMaître des clés
-dans l’onglet formulaire, j’indique a la liste Mere de donner des possibilités a la liste Fille, Petite Fille, icone a la liste fille de donner des possibilité a la liste Petite Fille, icone a la liste Petite Fille d’afficher icone. -dans l’onglet script, j’indique ce qu’il y a dans les listes par: var elementsListes={ « ChoixDeListeMere »: [« PossibilitéListeFille », »PossibilitéListeFille »], etc… Mais je ne comprends pas où ou comment je remplace exemple ChoixDeListeMere par la variable txt1 ou txt2 ou …
Là c’est moi qui ne comprends pas !
Qu’est-ce que ” l’onglet formulaire” ou “l’onglet script” ? et qu’est-ce que tu veux faire exactement… Que sont les variables “txt1” et “txt2” ?
L’objet “elementsListes” est en script de document.@+
😎bebarthMaître des clésbonjour,
J’imagine que le script de ton menu déroulant vient de ce fichier :
https://www.abracadabrapdf.net/wp-content/uploads/2022/07/Se%CC%81lection-dimage-Mere-Fille_BB.pdfSi tu étudies ce fichier, tu verras qu’en script de document on définit l’objet “elementsListes” qui détaille les différents éléments des listes mères/Filles…
@+
😎3 décembre 2022 à 15:58 en réponse à : Javascript afficher/masquer un champ en fonction d’un calcul #72120bebarthMaître des clésbonjour,
Tu peux également réduire l’écriture du script :
var somme=0;
for (var i=1; i<=11; i++) somme+=Number(this.getField("VERS_REG_"+i).value);
event.value=somme;
if (event.value==100) event.target.display=display.hidden;
else event.target.display=display.visible;
@+
😎2 décembre 2022 à 14:39 en réponse à : Javascript afficher/masquer un champ en fonction d’un calcul #72117bebarthMaître des clésbonjour,
Il suffit d’écrire :
// somme des cases
VAL01 = Number((this.getField("VERS_REG_1").value)) ;
VAL02 = Number((this.getField("VERS_REG_2").value)) ;
VAL03 = Number((this.getField("VERS_REG_3").value)) ;
VAL04 = Number((this.getField("VERS_REG_4").value)) ;
VAL05 = Number((this.getField("VERS_REG_5").value)) ;
VAL06 = Number((this.getField("VERS_REG_6").value)) ;
VAL07 = Number((this.getField("VERS_REG_7").value)) ;
VAL08 = Number((this.getField("VERS_REG_8").value)) ;
VAL09 = Number((this.getField("VERS_REG_9").value)) ;
VAL10 = Number((this.getField("VERS_REG_10").value)) ;
VAL11 = Number((this.getField("VERS_REG_11").value)) ;
// Total
event.value = VAL01 + VAL02 + VAL03 + VAL04 + VAL05 + VAL06 + VAL07 + VAL08 + VAL09 + VAL10 + VAL11;
// Affichage
if (event.value==100) event.target.display=display.visible;
else event.target.display=display.hidden;
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Voici ce que l’on peut faire avec une fonction en script de document :
var temps=5;
var vert=["RGB",185/255,255/255,125/255];
var orange=["RGB",255/255,230/255,100/255];
var leScript="this.getField(\"btRad.\"+(ind+1)).readonly=false;this.getField(\"btRad.\"+(ind+1)).fillColor=vert;this.getField(\"chTxt.\"+(ind+1)).readonly=false;this.getField(\"chTxt.\"+(ind+1)).fillColor=vert;";
function attend(ind,temps) app.setTimeOut(leScript,temps*1000);
L’unité de temps de temporisation en première ligne est la seconde.
Dans cette exemple je modifies également la couleur des fonds pour montrer cette temporisation.@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Il ne suffit pas d’avoir une idée, il faut aussi trouver le temps de l’expliquer et/ou faire un fichier exemple !
Il existe plusieurs façons d’appréhender le sujet en fonction de la conception du formulaire. Si tu as déjà un fichier à partager ça facilitera la tâche…@+
😎bebarthMaître des clésDésolé, je ne suis pas passé sur le forum hier, mais du coup, tu vois qu’on y arrive à force de travail et de persévérance…
Bravo. 🙌@+
😎bebarthMaître des clésbonjour,
Les champs à indiquer pour resetForm() doivent être sous forme de table, donc :
for (var i=1; i<33; i++) {
for (var j=1; j<32; j++) {
this.getField("nom."+i+j+".0").defaultValue = ""
this.resetForm(["nom."+i+j+".0"]);
}
}
@+
😎bebarthMaître des clésbonjour,Après utilisation du bouton « email » la console dit qu’un champ n’existe pas : TypeError: this.getField(…) is null
Le champ “Nom_Fichier_1” se trouve sur la page modèle donc comme indiqué précédemment il faut trouver le préfixe pour que le “setFocus” s’exécute correctement sur le bon champ de la bonne page !
Donc pour trouver le préfixe :
var prefixe=event.target.name.substr(0,event.target.name.indexOf("000_VALIDATION"));
...
this.getField(prefixe+"Nom_Fichier1").setFocus();
...
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésPour le champ 113a…
Ici il faut trouver dans le document tous les noms de champs qui contiennent “176a_nom”, “176a_prenom” et “176a_email” donc :
if (this.getNthFieldName(i).indexOf("176a_nom")>-1) this.getField(this.getNthFieldName(i)).value=event.target.value;
etc.et sur le code java script « affichage », même pb
…et ici il faut trouver les champs “184_Pole” et “185_Metier” qui sont sur la même page que le champ “183_Typedepole” donc avec le même préfixe.
Donc prour trouver ce préfixe :
var prefixe=event.target.name.substr(0,event.target.name.indexOf("183_Typedepole"));
@+
😎26 novembre 2022 à 17:25 en réponse à : Configurer le format de plusieurs champs en même temps #72065bebarthMaître des clésbonjour,
👍
…et pour être un peu plus complet sur tous les types de formats que l’on peut paramétrer :
https://www.websupergoo.com/helppdfnet/default.htm?page=source%2F6-abcpdf.objects%2Ffield%2F2-properties%2Fformat.htm@+
😎bebarthMaître des clésC’est pas tout à fait le même principe…
Je n’ai pas le temps développer ni de vérifier immédiatement, mais voici ce que ça devrait donner.@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Dans ton fichier les champs des pages dupliquées sont renommées avec un préfixe et c’est normal sinon les champs de même nom auraient toujours la même valeur quelle que soit la page !
Il faut donc intégrer le préfixe pour chaque script, et ton document est pas mal fait pour ça.
Par exemple, pour ton champ 180_DS1 tu peux modifier ton script en :
if (!event.willCommit) {
if (event.changeEx=="0") {
this.getField(event.target.name.replace(/_DS1$/,"_DS2")).display=display.hidden;
this.getField(event.target.name.replace(/_DS1$/,"_DS3")).display=display.hidden;
} else this.getField(event.target.name.replace(/_DS1$/,"_DS2")).display=display.visible;
}
où tu remplaces le nom du champ “prefixe.180_DS1” par “prefixe.180_DS2” et “prefixe.180_DS3” et ce quel que soit ce préfixe.@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Il y avait déjà un post à ce sujet :
et j’avais partagé un fichier, ci-joint.@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonsoir,
Je n’y connais pas grand chose non plus en VBA, mais j’ai trouvé cette page :
https://bytescout.com/products/developer/pdfextractorsdk/how-to-extract-attachments-from-pdf-files-using-pdf-extractor-sdk-in-asp-net-vbnet-and-others
pour un script VBS, et celle-là pour intégrer un VBS dans une macro VBA :
https://www.developpez.net/forums/d937730/autres-langages/general-visual-basic-6-vbscript/vbscript/integrer-vbs-macro-vba-excel/
Si ça peut t’aider !!!@+
😎bebarthMaître des clésC’est parce que j’ai fait une erreur… Désolé !
Il faut écrire :
this.addScript("VarDefaut", "ListeDefaut="+DVD);
C’est ça de publier sans tester…
Mais tu peux aussi écrire directement :
this.addScript("VarDefaut", "ListeDefaut="+this.getField("entreesListe").value);
@+
😎bebarthMaître des clésbonjour,L’erreur venait du script ListeDefaut qui contient un format non conforme à une fonction je pense.
C’est parce que tu as mal écrit ta ligne de script !
Il manque les guillemets (et les caractères d’échappement) qui seront affiché dans la ligne de script ajoutée.@+
😎- Cette réponse a été modifiée le il y a 1 année et 10 mois par bebarth.
bebarthMaître des clésbonjour,
Je n’ai pas étudié entièrement le fichier, mais lorsqu’il y a beaucoup de champs et de scripts, il vaut mieux éviter les scripts de calcul qui sont exécutés à chaque fois qu’un des champs du formulaire passe par l’événement « Champ désactivé ».L’ordre d’exécution des événements dans les champs de formulaire PDF
Il vaut donc mieux préférer un autre déclencheur… quand c’est possible !@+
😎bebarthMaître des clésSinon, tu peux sauvegarder ta variable en script de document, elle sera récupérée à l’ouverture :
this.addScript("variable", "maVariable=\"peut-être une chaine de caractères ou un nombre !\";");
@+
😎bebarthMaître des clésbonjour,
Il faut la définir et la rappeler en la précédent du préfixe “global. “, par exemple :
global.nomVariable="ceci est une chaine de caractères";
et ensuite tu peux la rappeler avec :
console.println("Ma variable global est : "+global.nomVariable);
Attention, cette variable n’est plus valable si tu quitte l’application !
@+
😎bebarthMaître des clésbonjour,
Voici un lien pour la boite de dialogue et le paramètre printRange :
https://we.tl/t-Jer1xMZsPB
… le temps d’exécution est réellement meilleur et je pense que c’est la bonne solution !@+
😎bebarthMaître des clésbonjour,
…sinon, toujours en script de format personnalisé :
if (event.value>0) event.value=event.target.value.toFixed(2);
else event.value=0;
@+
😎bebarthMaître des clésbonjour,Après ça l’impression se lançait mais pour toutes les pages.
Je suis désolé d’apprendre que ce script ne fonctionne pas avec ton logiciel alors qui fonctionne parfaitement avec Acrobat !
Voici un nouveau lien pour ceux que ça intéresse car il y avait une inversion de page dans certains cas avec la version précédente.
La modification est en fin de script :
...
for (var i=0; i<lesPages.length; i++) t[lesPages].hidden=false;
t[t.length-1].hidden=true;
if (lesPages[lesPages.length-1]==t.length-1) t[t.length-1].hidden=false;
this.print({bUI: false});
...
N’oubliez-pas de supprimer les 2 slashs dans le script du fichier exemple.
Je viens de penser à une autre option : mettre une checkbox (CB.n) devant chaque champ agoto.n qui serait cochée si on souhaite imprimer la fiche de cet élève puis ce script affecté au bouton « imprimer » :
Je n’avais pas pensé au paramètre “printRange”, et on pourrait faire la même chose avec la boite de dialogue…
@+
😎bebarthMaître des clésbonjour,
Le message signifie que le script n’a pas trouvé de page modèle. J’imagine donc qu’il apparait depuis ton document !
Il faut donc créer les pages modèles sur ton document avec ce script :
for (var i=0; i<this.numPages; i++) {
if (i<10) var t=this.createTemplate({cName:"pageModele.0"+i, nPage: i});
else var t=this.createTemplate({cName:"pageModele."+i, nPage: i});
}
mais on ne peut pas l’exécuter depuis un bouton, donc soit via la console ou une action.
Le script d’impression devrait marcher beaucoup mieux ensuite…@+
😎bebarthMaître des clésbonjour,
Je pense que le plus simple c’est :
var leTexte=this.getField("nomChamp").value;
if (leTexte.indexOf("800")=0 || leTexte.indexOf("800")=0) event.value=leTexte;
else event.value="";
@+
😎bebarthMaître des clésbonjour,
En script de format personnalisé tu peux écrire :
event.value=event.target.value.toFixed(2);
Seul l’affichage apparaitra avec 2 décimales, mais la valeur réelle restera celle du champ !@+
😎bebarthMaître des clésVoici ce que ça pourrait donner… peut-être un peut long (17 s pou l’impression de toutes les pages), mais tout est relatif !
Attention, pour les 2 script, l’instruction d’impression est désactivé. Il faudra supprimer les 2 slash en début de ligne:
this.print({bUI: false});
Le lien pour télécharger l’exemple : https://we.tl/t-swe5I6wAd7
… et j’ai oublié, le script pour créer une page modèle pour toutes les pages :
for (var i=0; i<this.numPages; i++) {
if (i<10) var t=this.createTemplate({cName:"pageModele.0"+i, nPage: i});
else var t=this.createTemplate({cName:"pageModele."+i, nPage: i});
}
@+
😎- Cette réponse a été modifiée le il y a 1 année et 10 mois par bebarth.
- Cette réponse a été modifiée le il y a 1 année et 10 mois par bebarth.
Attachments:
You must be logged in to view attached files.bebarthMaître des clésPour le 1 c’est ce qui se passe avec les pages modèles sauf qu’elles sont juste cachées et non supprimées.
Je vais essayer de faire quelque chose ce soir….
il est possible de cocher les cases de la boîte de dialogue par défaut si ça t’intéresse. Ça dépend si la majeure partie du temps il y a plus de cases cochées ou non cochées. Tu me dis.
@+
😎bebarthMaître des clésContrairement à l’interface utilisateur, le JavaScript ne permet d’imprimer que des plages de pages, on est donc obligé de créer plusieurs impressions et donc pas (ou pas complètement) de recto/verso.
La solution serait peut-être de mettre toutes les pas imprimables en pages modèles et de cacher celles qui ne sont pas imprimées, cela permettrait de faire du recto/verso. On re-affiche toutes les pages après l’impression !@+
😎bebarthMaître des clésbonjour,
Essaye avec :
...
eval("if (theCB"+i+"==true) {console.println(\"Nom Page \"+"+(i+1)+");this.print({bUI: false, nStart: "+i+", nEnd: "+i+"});}");
...
mais normalement lorsqu’on n’indique pas nEnd, seule la page nStart est imprimée !@+
😎bebarthMaître des clésbonjour,
destylast wrote:… tu dois passer par tout cela pour que cela soit fonctionnel.
Le fichier en exemple définit et détaille les différentes étapes, mais en fait il n’y à pas grand chose à faire. Le premier bouton va juste vérifier qu’il n’y a pas d’éléments dans l’objet “icons”.
this.addIcon("nomDeLicone", this.getField("nomDuChamp").buttonGetIcon());
pour importer une icône dans l’objet “icons” depuis un champ image ou un bouton et c’est à peu près tout. Puis on vérifie si les différentes icônes ont bien été importées. On peut supprimer ce champ manuellement.
Ensuite on va rechercher une icône et la placer dans un champ avec :
event.target.buttonSetIcon(this.getIcon("nomDeLicone"));
@+
😎bebarthMaître des clésj’essaye de faire un exemple dans l’après-midi !
… c’est vrai que ça fait un peu tard dans l’après-midi, mais bon !
Je suis parti du fichier de Merlin avec les 2 champs images cachés.@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,Quand il s’agit que de nombre… le = est suffisant, mais quand c’est du texte il faut absolument == ?
Pas du tout !
== signifie « est égal à ».
= signifie « devient égal à ».
que ce soit un nombre, du texte ou une variable booléenne…@+
😎bebarthMaître des clésbonjour,
… voir un précédent post :
if(vRabais == « Oui ») event.value = 100;@+
😎bebarthMaître des clésbonjour,
… j’essaye de faire un exemple dans l’après-midi !@+
😎bebarthMaître des clésbonjour,
Sinon tu peux mettre tes images en icônes comme dans l’exemple, ça éviterait d’avoir des champs cachés !@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Voici un exemple de boite de dialogue personnalisée que l’on pourrait adapter.et j’aimerais également que les champs vides ne soient pas imprimés.
Ce ne sont que des champ texte ?
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Pas si simple en fait, parce qu’avec ce que j’ai compris, ça fonctionne différemment selon l’échelle…
Plus de 100% il faut redimensionner l’icône.
Entre 50% et 100% Acrobat le fait automatiquement.
Moins de 50%, il faut redimensionner par rapport à l’échelle 50%.
C’est du moins ce que ‘ai constaté sur mon Mac. J’espère que ça fonctionne pareil sur un PC !
Ci-joint un fichier qui fonctionne correctement sur mes iMac et MacBook.@+
😎PS : Pour ceux qui avaient suivi mon ancien post, il y avait une erreur. La taille exacte de l’icône “Punaise” est de 14 x 20.
Attachments:
You must be logged in to view attached files.bebarthMaître des clésTout est dit !
@+
😎bebarthMaître des clésbonjour,
Normalement la taille de l’icône s’adapte à l’échelle ! …avec Acrobat du moins, pour les autres logiciels je ne sais pas.
De toute façon on ne pourrait pas le faire automatiquement car le zoom ne déclenche pas un évènement. On pourrait à la rigueur adapter l’icône selon le zoom à l’aide d’un bouton puisqu’on peut connaitre l’échelle avec this.zoom.@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésÇa va venir…
@+
😎bebarthMaître des clésbonjour,
If faut écrire :
function ShowHide(indice) {
if (this.getField("test."+indice).display == display.visible) this.getField("test."+indice).display = display.hidden;
else this.getField("test."+indice).display = display.visible;
}
== signifie “est égal à”.
= signifie “devient égal à”.@+
😎bebarthMaître des clés…et tu sais comment ajouter des pages modèles ?
@+
😎bebarthMaître des clésheu… j’ai pas compris !
@+
😎bebarthMaître des clésbonjour,Un grand bravo. Aujourd’hui, vous avez fait un homme heureux 👌.
Certaines fois, il suffit de pas grand chose !
C’est juste parfait.
C’est exact !
En me relisant, je viens de m’apercevoir que la variable “menuDeroulant” de l’exemple précédent ne sert à rien… J’avais certainement dû modifier mon script et oublié de la retirer de la fonction !
Du coup la fonction s’écrit :
function affichage() {
this.getField("champ2").display=display.visible;
switch (event.changeEx) {
case "0":
var leMenu=[
["-SELECTIONNER-",0],
["Métier3",["-SELECTIONNER-","Cheval","Chien"]],
];
break;
case "1":
var leMenu=[
["-SELECTIONNER-",0],
["Métier1",["-SELECTIONNER-","Maison","Balcon"]],
["Métier2",["-SELECTIONNER-","Maison","Voiture"]],
];
break;
default:
var leMenu=[""];
this.getField("champ2").display=display.hidden;
this.getField("champ3").display=display.hidden;
}
this.getField("champ2").setItems(leMenu);
}
et pour l’appeler :
if (!event.willCommit) affichage();
Maintenant, si on veut approfondir l’apprentissage en JavaScript, on peut n’utiliser qu’une seule fonction avec plusieurs variables.
Ici le script n’est pas très long ce n’est donc pas très grave, mais s’il l’était ce serait plus intéressant.
Si par exemple le contenu des menus déroulants est identique, on peut écrire :
// Fontion à 2 variables
function affichage(menuDeroulant2,menuDeroulant3) {
this.getField(menuDeroulant2).display=display.visible;
switch (event.changeEx) {
case "0":
var leMenu=[
["-SELECTIONNER-",0],
["Métier3",["-SELECTIONNER-","Cheval","Chien"]],
];
break;
case "1":
var leMenu=[
["-SELECTIONNER-",0],
["Métier1",["-SELECTIONNER-","Maison","Balcon"]],
["Métier2",["-SELECTIONNER-","Maison","Voiture"]],
];
break;
default:
var leMenu=[""];
this.getField(menuDeroulant2).display=display.hidden;
this.getField(menuDeroulant3).display=display.hidden;
}
this.getField(menuDeroulant2).setItems(leMenu);
}
// Script pour champ1
if (!event.willCommit) affichage("champ2","champ3");
// Script pour champ4
if (!event.willCommit) affichage("champ5","champ6");
Une seule fonction commune et les 2 variables sont définies lorsqu’on appelle cette fonction…@+
😎- Cette réponse a été modifiée le il y a 1 année et 11 mois par bebarth.
- Cette réponse a été modifiée le il y a 1 année et 11 mois par bebarth.
Attachments:
You must be logged in to view attached files.bebarthMaître des clésJe ne comprends pas trop quelles informations il y a dans rect. A ce que je crois comprendre et après avoir lu deux trois trucs sur le net, c’est les coordonnées des 4 coins du champ en question?
https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html#id602
Autre truc que je crois avoir compris : currentValueIndices c’est la position des entrées dans le menu déroulant et on ajoute 1 car la numérotation commence à zero ?
Exact ! Si tes champs goto avaient commencé à 0 il n’y aurait pas eu besoin d’ajouter +1.
Dernière question : est il possible de se passer du bouton servant à générer les menus déroulants ? J’ai essayé en plaçant ce script en script de calcul pour chacun des champs Ch1 et Ch2 ça à l’air de marcher. La méthode est bonne ou y a-t-il mieux à faire ?
On peut mettre un script d’action en souris entrée… Le même pour les 2 menus déroulants.
var laListe=this.getField("liste00").value.split("\r");
event.target.setItems(laListe);
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Si avec le menu champ4 tu veux remplir le champ5, il faut utiliser ton autre fonction.
Doncif (!event.willCommit) affichage_1(event.target.name);
@+
😎bebarthMaître des clésbonjour,
Vu tes 2 problèmes, je suppose que tu ne connais pas les pages modèles !
Il va falloir t’y pencher dessus : https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html#template
Ici si tu veux ajouter ou supprimer des choses il faut le faire directement sur ces pages et non sur des copies qui dans l’exemple (que j’avais fait il y a quelques années) sont supprimées pour les cacher.Dans ce nouveau script on affiche ou masque les pages modèles. On peut donc ajouter ou supprimer des éléments. Ce sera pris en compte lorsque tu afficheras ou masqueras de prochaines fois… (je ne sais pas si c’est très clair…).
var t=this.templates;
if (event.target.buttonGetCaption()=="Voir les documents") {
for (var i=0; i<t.length; i++) t.hidden=false;
event.target.buttonSetCaption("Masquer les documents");
event.target.fillColor=["RGB",155/255,40/255,20/255];
} else {
for (var i=0; i<t.length; i++) t.hidden=true;
event.target.buttonSetCaption("Voir les documents");
event.target.fillColor=["RGB",0,127/255,0];
}
A l’époque j’avais affiché/masqué avec 2 boutons, mais on peut le faire avec un seul !
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clés…effectivement, je n’avais pas pensé à ça !!!
Il faut donc regarder la position des menus déroulants, mais ici on ne ragarde uniquement que la position cela présume que la position des noms dans les champs “goto.1”, etc est identique à celle des menus déroulants, sinon il faudrait comparer les valeurs (menu et champs texte)
var temp=this.getField("goto."+(this.getField("Ch1").currentValueIndices+1)).rect;
this.getField("goto."+(this.getField("Ch1").currentValueIndices+1)).rect=this.getField("goto."+(this.getField("Ch2").currentValueIndices+1)).rect;
this.getField("goto."+(this.getField("Ch2").currentValueIndices+1)).rect=temp;
J’ai réduit le script au minimum. Demande si tu ne comprends pas !
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Voici un script qui devrait répondre à ta question :
function eleve(nomChamp) {
var eleve=this.getField(nomChamp).value;
n=eleve.indexOf(" ");
return eleve.substr(n+1);
}
eleveCh1=eleve("Ch1");
eleveCh2=eleve("Ch2");
var temp=this.getField("goto."+eleveCh1).rect;
this.getField("goto."+eleveCh1).rect=this.getField("goto."+eleveCh2).rect;
this.getField("goto."+eleveCh2).rect=temp;
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbebarthMaître des clésx choix pour chacun des 50 définis par le menu 2 ?
@+
bebarthMaître des clésbonjour,
Qu’y a-t-il dans ce troisième menu en fondu deuxième ??? X choix différents pour les 50 éléments définis dans le deuxième menu ou juste un menu commun quel que soit le deuxième menu ?@+
😎bebarthMaître des clésbonjour,
Si tu ne t’y connais pas trop en expression régulière, il vaut mieux écrire :
var laListe=this.getField("liste00").value.split("\r");
this.getField("Ch1").setItems(laListe);
this.getField("Ch2").setItems(laListe);
Ensuite, je ne comprends pas trop ce que tu veux faire vu que les 2 listes sont identiques !
Admettons que tu ais “élève 3” dans le premier menu et “élève 5” dans le deuxième, que veux-tu faire ???@+
😎bebarthMaître des clésbebarthMaître des clésbebarthMaître des clésbonjour,
Il suffit de permuter la propriété “rect” des 2 champs :
var temp=this.getField("Ch1").rect;
this.getField("Ch1").rect=this.getField("Ch2").rect;
this.getField("Ch2").rect=temp;
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,C’est parce-que les listes sont initialisées à l’ouverture du document, donc réinitialisées à chaque ouverture du document.
Le script Champ1 est placé en validation donc exécuté à l’ouverture du document.
Je reconnais ce script et me semble que je l’avais adapté d’après un que tu m’avais fourni. Personnellement je n’écris pas tout à fait comme ça…
Ce weekend, j’essayerai de le réécrire à ma manière en script de touches personnalisé (c’est comme ça que je fais d’habitude).@+
😎bebarthMaître des clésJe re-regarderai demain car pour l’instant je ne comprends toujours pas !
Qu’est-ce qui devrait se passer et qui ne fonctionne pas ???@+
😎bebarthMaître des clésTu décompresses et tu places le fichier “Save_ destylast.js” (ci-joint) dans le répertoire JavaScript d’Acrobat, puis tu relances l’application.
Tu peux ensuite utiliser le bouton pour calculer le poids de ton fichier : https://we.tl/t-CEcBFS4UWD@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Désolé, mais pour l’instant après un essai rapide, je ne comprends pas ce qui ne fonctionne pas…@+
😎bebarthMaître des clésbonjour,1- peut-on avoir le poids du formulaire en temps réelle sans enregistré le document.
Non, comme l’a indiqué Merlin on doit obligatoirement enregistrer le document pour connaitre le poids du document.
2- avec un bouton peut-on avoir le poids dans un champs texte a chaque fois que l’on clic sur le bouton en temps réelle.
C’est possible, mais vu qu’il faut enregistrer le document depuis un bouton, il faudra écrire un script de document à placer dans le répertoire JavaScript de ton application Acrobat.
Tu me dis si tu es intéressé…étonnant mais alors pourquoi tu as le poids exact de ton formulaire sans l’avoir enregistré quand tu l’envoies directement par mail(tu as le poids du fichier dans la pièce jointe) avec un bouton envoie alors encore une fois le document et non enregistrer.
C’est une version enregistrée du document qui est placée en pièce jointe. Le poids est donc calculé !
@+
😎bebarthMaître des clés…après vérification, this.filesize retournant un nombre, il suffit décrire :
// Le document sera enregistré
function lesPoids(lePoids) {
if (lePoids<1000) return lePoids+" octets";
else if (lePoids<1000000) return (lePoids/1000).toFixed(1)+" Ko";
else if (lePoids<1000000000) return (lePoids/1000000).toFixed(1)+" Mo";
else return (lePoids/1000000000).toFixed(1)+" Go";
}
var avant=lesPoids(this.filesize);
// Le document a été enregistré
var apres=lesPoids(this.filesize);
this.getField("poids").value="Le poids avant enregistrement était de "+avant+", après enregistrement il est de "+apres+".";
@+
😎bebarthMaître des clésIl faut mettre ces script avec l’outils “Actions du document”.
https://we.tl/t-MpHCWJ8iHZ@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Voici 2 scripts à placer en Action de document :// Le document sera enregistré
function lesPoids(lePoids) {
if (Number(lePoids)<1000) return Number(lePoids)+" octets";
if (Number(lePoids)<1000000) return (Number(lePoids)/1000).toFixed(1)+" Ko";
if (Number(lePoids)<1000000000) return (Number(lePoids)/1000000).toFixed(1)+" Mo";
if (Number(lePoids)<1000000000000) return (Number(lePoids)/1000000000).toFixed(1)+" Go";
}
var avant=lesPoids(this.filesize);
// Le document a été enregistré
var apres=lesPoids(this.filesize);
this.getField("poids").value="Le poids avant enregistrement était de "+avant+", après enregistrement il est de "+apres+".";
…et tout fonctionne bien !
Voici par liens mon formulaire en cours de finalisation. https://www.casimages.com/f/
Le lien n’est pas correct et ne fonctionne pas.
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbebarthMaître des clésbonjour,
Si ton document ne comporte que ces pièces jointes, tu peux écrire :
var annots=this.getAnnots();
for (var i=0; i<annots.length; i++) if (annots.type=="FileAttachment") annots.destroy();
Sinon il faudrait faire une étude plus approfondie de chaque pièce jointe !@+
😎bebarthMaître des clésbonjour,
Première chose, ça ne sert à rien d’écrire this.event.value (ou autre) car event ne fonctionne qu’avec le document actif (this). Il suffit donc d’écrire event.value.Deuxièmement je ne comprend pas bien ce que tu veux faire !
if (event.value != "") {app.alert({cMsg:"Attention, liste pleine. L'entrée ne peut être saisie", nIcon:3});
signifie que si le champ n’est pas vide tu affiches ton message puis tu vide ce champ plus les deux autres ! Ça ne me parait pas trop logique… Tu pourrais n’avoir que le message ou demander si on veut ou pas effacer la ligne…
this.event.value = "";
this.getField("evenement1.31.1").value = "";
this.getField("commentaire1.31.1").value = "";
}Ça ne fonctionne pas, je n’ai pas étudié exactement le pourquoi, mais ça commence à faire une sacrée usine à gaz et il doit certainement y avoir redondance dans l’exécution des scripts.
@+
😎bebarthMaître des clésbonjour,
Désolé pour ce retard !
Le script est une fonction en script de document.@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clés…ça ne m’empêche pas de réfléchir !
Que doit-on faire si une pièce jointe est supprimée ? Remettre toutes les icônes à la suite ou laisser un espace vierge pour éventuellement remettre une icône à cette place ?@+
😎bebarthMaître des clésbonjour,
Je vais y réfléchir… mais pas aujourd’hui, certainement demain !@+
😎bebarthMaître des clésL’api reference indique pour event.modifier :
Specifies whether the modifier key is down during a particular event. The modifier key on the Microsoft
Windows platform is Control and on the Mac OS platform is Option or Command. This property is not
supported on UNIX.Pour info, sur Mac, seule la touche Option fonctionne, la touche Commande n’est pas reconnue (le fichier joint indique que l’on a appuyé sur aucune touche) et avec la touche ctrl rien ne se passe…
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clés👏💪👍
@+
😎bebarthMaître des clésPar exemple en utilisant CTRL + clic ou MAJ + clic, c’est une bête astuce à laquelle on ne pense pas assez souvent.
Je connais event.shift pour maj+clic mais je ne connais pas pour ctrl+clic ! C’est quoi la commande ?
1- je limite mes pièces jointes à 5 mais si la personne efface une d’elle sur les 5 et veuille la remplacer par exemple la position n° 3 la nouvelle viendra se superposer sur la 5 donc il y a un problème comment faire ?
Les pièces jointes sont indiquées dans l’ordre où on les importe. Si tu supprimes la numéro 3, la numéro 4 devient la numéro 3 et la numéro 5 devient numéro 4. Le nouveau fichier importé arrivera toujours en dernière position.
On peut désactiver la surbrillance de tous les champs avec app.runtimeHighlight=false et la simuler uniquement pour un champ avec event.target.fillColor=[“RGB”, 200/255,1,1]; par exemple !
@+
😎19 octobre 2022 à 20:31 en réponse à : Comment remplir automatiquement les cellules mois et annés #71638bebarthMaître des clésbonjour,
Voici un script. N’hésite pas à demander des explications…if (event.value!="") {
laDate=new Date(util.scand("mmmm yyyy", event.value).getTime());
var leMois=laDate.getMonth();
var lAnnee=laDate.getFullYear();
for (var i=2; i<=32; i++) {
leMois++;
if (leMois==12) {
var leMois=0;
lAnnee++;
}
this.getField("date."+i).value=util.printd("mmmm yyyy",new Date(lAnnee,leMois));
}
} else {
for (var i=2; i<=32; i++) this.getField("date."+i).value="";
}
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Le script ne fonctionnait pas car l’objet annots est nul (n’existe pas vu qu’il n’y a aucun commentaire).
Je te conseille de travailler avec la console pour voir les messages d’erreurs.
J’ai jeune (JavaScriptologiquement) lorsque j’ai écrit ce script et j’y ai donc apporté quelques modifications. 🤓var aRect=this.getField("Buttonn").rect;
annots=this.getAnnots();
var j=0;
if (annots!=null) {
for (var i=0; i<annots.length; i++) {
if (annots.type=="FileAttachment") j++;
}
}
if (j>4) {
app.alert({cMsg:"Vous ne pouvez importer plus de 5 pièces jointes.", nIcon:2});
} else {
var annot=this.addAnnot({
page: this.pageNum,
type: "FileAttachment",
author: "abracadabraPDF",
contents: "Double-clic pour ouvrir la piece jointe",
attachIcon: "PushPin",
point: [aRect[0]-(25*(j+1)), aRect[1]-10],
strokeColor: color.red,
});
annot.contents=annot.attachment.name;
annots=this.getAnnots();
for (var i=0; i<annots.length; i++) {
if (annots.type=="FileAttachment") {
var licone=annots.attachIcon;
var r=annots.rect;
r[2]=r[0]+20;
r[3]=r[1]+40;
annots.setProps({rect: r});
}
}
}
N’hésite pas à demander des explications.
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésÇa ne fonctionnera pas à partir d’un bouton !
Il faut lancer le script via une action (jointe) :this.insertPages ({
nPage: this.numPages-1,
cPath: "InsertExampleSource.pdf",
nStart: 0
});
this.saveAs({
cPath: "chemin du repertoire/"+this.documentFileName,
});
Pour “cPath” de “insertPages” tu indiques uniquement le nom du fichier s’il est dans le même répertoire que les autres, sinon tu indiques le chemin complet.
Pour “cPath” de “saveAs” tu indiques le chemin du répertoire.
Ensuite tu sélectionne l’action, tu indiques les fichiers à traiter (ou le répertoire) et tu la lances…
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésBonjour 2- peut on changer la taille de l’icône de la pièce jointe ainsi que de la remplacer par un personnel (un script explicatif serait le bienvenu pour mes deux questions). Non. Tout ce qu’on peut remplir c’est l’info-bulle, qui est ici dans ton script :
contents: « Double-clic pour ouvrir »,
eh ben si, comme expliqué dans le post !
@+
😎bebarthMaître des clésbonjour,
A vrai dire, je n’ai pas tout à fait compris !- Comment veux-tu supprimer la dernière page : via un script ? Avec Acrobat Pro ou Reader ? Qu’est-ce que l’import via ftf ?
- Tu as raison, il n’ai pas possible d’ajouter une page avec Acrobat Reader mais c’est possible de le faire sur plusieurs fichiers avec Acrobat Pro et d’enregistrer une copie dans un autre répertoire via une action.
Et pour alimenter ta base de données, comment penses-tu faire ?
@+
😎bebarthMaître des clésbonjour,
Il est normal que tes icônes s chevauchent à chaque fois vu que tu leurs donnes la même position [400,500] !
Le sujet a été traité il y a déjà un certain temps…Personnalisation d’un bouton permettant d’importer une pièce jointe
Je te joins le fichier que j’avais fait à l’époque. Essaye de l’étudier et n’hésite pas à demander ce que tu ne comprends pas !
Il n’est pas possible de personnaliser les icônes, mais on peut modifier leurs tailles comme indiqué dans le lien.
@ Merlin : Le fichier Excel que l’on a extrait m’a bien été utile pour retrouver le post et le fichier…
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clés…il faut juste connaitre la logique de calcul de ce nombre qui est 5 fois Nb1 plus Nb2. Seule la construction se fait avec 2 nombres aléatoires qui sont affichés dans la boite de dialogue.
Mais si un élève arrive à lire le script il pourra facilement déduire cette logique ! Il en est de même avec un champ texte avec option mot de passe même s’il est indiqué en unicode.@+
😎bebarthMaître des clésbonjour,
Je ne pense pas que cela soit possible de cacher la frappe d’une boite de dialogue, mais tu pourrais ajouter un champ avec l’option “Mot de passe” !
Une remarque, il faudrait peut-être mettre à jour le menu déroulant lorsqu’on supprime une page….…et on n’écrit pas : if (numpage = this.numPages – 1) mais : if (numpage == this.numPages – 1)
@+
😎- Cette réponse a été modifiée le il y a 1 année et 11 mois par bebarth.
bebarthMaître des clésSinon, sans supprimer ce bouton via un script d’ouverture de page, tu peux le cacher après avoir exécuté l’action de suppression de la dernière page…
@+
😎bebarthMaître des clésbonjour,
Attention, si on supprime la dernière page à l’aide du bouton de l’avant dernière, cette page devient la dernière et n’a donc plus besoin de ce bouton ! Il faudrait donc penser à le supprimer mais on ne peut le faire directement avec le script qui supprime la dernière page (on ne peut pas supprimer un bouton déclencheur d’un script). Je pense donc à un script d’ouverture de page qui testerait si c’est la dernière page et qu’elle contient un bouton pour la suppression de la page suivante…@+
😎bebarthMaître des clésCompris, merci !
@+
😎bebarthMaître des clésbonjour Merlin,
C’est une fonction tellement peu connue que je ne la connais pas du tout et je n’ai pas compris à quoi elle sert !
Une fois que tu as “Copier avec formatage” tu fais quoi ?
J’ai essayé de coller dans un champ texte, mais je ne vois pas de formatage…@+
😎bebarthMaître des clésbonjour,
En fait, il faut provoquer une erreur pour que le message s’affiche. Pour la deuxième boucle il faut donc mettre i<=32 (au lieu de i<32).
Le mieux aurait été de n’avoir qu’une seule boucle !Par contre, je n’avais pas vérifier mais lorsqu’on valide plusieurs fois la fenêtre de réponse s’affiche plusieurs fois ! Je ne vois pas pourquoi… J’essaie de regarder dans la journée.
@+
😎bebarthMaître des clésbonjour,
Voici, je te laisse étudier…
https://we.tl/t-j2iIATXTHI@+
😎- Cette réponse a été modifiée le il y a 2 années par bebarth.
bebarthMaître des clésbonjour,
Voici pour l’ensemble des calculs.
Je ne garantis pas le nom des polygones de plus de 12 côtés, je les ai trouvé sur internet !@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésMalheureusement la notation simplifiée est limitée aux 4 opérations…
Pour des calculs plus complexes if faudra utiliser le JavaScript !@+
😎bebarthMaître des clésbonjour,
- Il ne faut pas écrire le script en “Notation simplifiée du champ” mais en “Script de calcul personnalisé”.
- Dans ton script la valeur du champ que tu veux calculer (event.value) ne peut pas être en fonction de cette même valeur… (ici, this.getField(“TanPyPo”).value c’est la même chose que event.value)
J’espère avoir été clair car pas facile à expliquer !!!
Si j’ai un moment demain, je regarde l’ensemble du calcul…@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Si j’ai bien compris ce que tu veux faire, il faut écrire :
this.getField("nomDuChamp").userName="0 : toto\r1 : tata\r2 : titi";
@+
😎23 septembre 2022 à 09:16 en réponse à : Comment mettre en place la formule angle correctement #71519bebarthMaître des clésbonjour,
…moi, au contraire, j’adorais ça !var piRad=Math.atan(this.getField("EuclideH").value/this.getField("Euclidep").value);
event.value=piRad.toFixed(2)+" rad ou "+(piRad*180/Math.PI).toFixed(2)+"°";
var piRad=Math.atan(this.getField("EuclideH").value/this.getField("Euclideq").value);
event.value=piRad.toFixed(2)+" rad ou "+(piRad*180/Math.PI).toFixed(2)+"°";
@+
😎Attachments:
You must be logged in to view attached files.22 septembre 2022 à 20:00 en réponse à : JavaScript / oLB imprime frequement un “1”, par erreur #71511bebarthMaître des clésbonjour,
Voici ce que j’ai fait avec une fonction en script de document. Tous les champs sont au format yyyy-mm-dd.
On indique date1 qui se reproduit automatiquement dans date2 (champ texte que l’on peut modifier). Le menu déroulant date3 reprend ces 2 dates (si différente car les doublons sont supprimés) avec possibilité d’ajouter une nouvelle date.
Idem pour le champ avec contour rouge.// Fonction qui supprime les doublons d'une table
function sansDoublons(uneTable) {
return uneTable.filter((valeur, indice) => uneTable.indexOf(valeur)===indice);
}
// Script de calcul date2 permet de modifier la valeur indiquée par date1
if (event.source && event.source.name=="date1") event.value=this.getField("date1").value;
// Script de validation date2
var laTable=[this.getField("date1").value,event.value];
this.getField("date3").setItems(sansDoublons(laTable).sort());
// Script de validation date3
var laTable=[this.getField("date1").value,this.getField("date2").value,event.value];
this.getField("rencontre_date_BB").setItems(sansDoublons(laTable).sort());
Je n’ai pas vu l’utilité d’ajouter un élément vierge pour les menus déroulants !
J’espère avoir répondu à ta demande.@+
😎Attachments:
You must be logged in to view attached files.21 septembre 2022 à 20:19 en réponse à : JavaScript / oLB imprime frequement un “1”, par erreur #71510bebarthMaître des clésJe regarde demain…
@+
😎21 septembre 2022 à 14:47 en réponse à : JavaScript / oLB imprime frequement un “1”, par erreur #71508bebarthMaître des clésJe crois avoir mis le doight dessus en ajoutant: var that = e.options[e.selectedIndex];
Très bien, si tu t’en es sorti…
@+
😎20 septembre 2022 à 20:03 en réponse à : JavaScript / oLB imprime frequement un “1”, par erreur #71504bebarthMaître des clésbonjour,
Je ne suis pas certain de comprendre le process !
A chaque fois que tu entres une nouvelle Date1 (champ texte) elle s’ajoute (sans vérifier si elle existe déjà) dans le menu déroulant Date2 et lorsque tu sélectionnes une Date2, Date1 et Date2 s’ajoutent au menu déroulant Date3 (?????? ça me parait étrange).
Que doit-il y avoir dans le menu déroulant avec le cadre rouge ????Peux-tu expliquer exactement !
@+
😎 -
AuteurRéponses