Toutes mes réponses sur les forums
-
AuteurRéponses
-
bebarthMaître des clés
bonjour,
Adobe Reader demande une connexion ?
Quel OS ? Il existe d’autres lecteurs gratuits.@+
😎bebarthMaître des clésbonjour,
Une petite amélioration du script pour ne pas pouvoir taper une série de zéro en début de frappe !
Voici l’expression régulière :
/^(([0]|([1-9]\d{0,11}))(\,\d{0,2})?)?$/
…et ajout automatique d’une virgule après un chiffre qui commence par zéro.@+
😎- Cette réponse a été modifiée le il y a 1 année et 5 mois par bebarth.
Attachments:
You must be logged in to view attached files.bebarthMaître des clésQuand j’ai quelque chose dans la tête, je ne l’ai pas au… tre part !
Voici donc un fichier avec le script mis en fonction.Script de touches personnalisé :
if (!event.willCommit) {
if (event.value.length==0 && event.change==",") event.change="0,";
var aTester=event.value.split("");
aTester.splice(event.selStart,event.selEnd-event.selStart,event.change);
var testeChaine=aTester.join("");
RegExAmount=/^(\d{0,12}(\,\d{0,2})?)$/;
if (RegExAmount.test(testeChaine)) {
ecriture(testeChaine);
} else event.rc=false;
} else {
RegExAmount=/^(\d{1,12}(\,\d{0,2})?)$/;
if (event.value=="" || RegExAmount.test(event.value)) {
ecriture(event.value);
} else event.rc=false;
}
Le reste est en script de document.
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Voici un fichier avec script de touches personnalisé qui permet de répondre aux 2 demandes.
L’écriture en lettres se fait au fur et à mesure de la frappe des chiffres.
J’ai recopié 2 fois le script d’origine pour raison de temps mais cela nécessiterait d’écrire une fonction en script de document !
Si j’avais à réécrire ce script aujourd’hui il serait un peu différent mais vu qu’il fonctionne…var etoiles="**********";
if (!event.willCommit) {
var aTester=event.value.split("");
aTester.splice(event.selStart,event.selEnd-event.selStart,event.change);
var testeChaine=aTester.join("");
RegExAmount=/^(\d{0,12}(\,\d{0,2})?)$/;
...
}
} else event.rc=false;
}
@+
😎- Cette réponse a été modifiée le il y a 1 année et 5 mois par bebarth.
Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
As-tu réussi ?@+
😎bebarthMaître des clés👍
@+
😎bebarthMaître des clésbonjour,
Dans mon idée « this » représente le document qui vient d’être enregistré, qui est actif et donc au premier-plan à l’instant T.
Ce n’est effectivement pas bien clair, mais pour moi “this” représente “l’objet” d’où est lancé la partie du script. Si c’est un document, “this” est ce document, si c’est d’une boite de dialogue, “this” est cette boite de dialogue.
Bonjour, le script a fonctionné
Combien de fichiers as-tu traité et en combien de temps ?
@+
😎bebarthMaître des clésbonjour,Je suppose que c’est automatique, mais si ce n’est pas le cas il faudra ajouter (après l’étape Enregistrement) une nouvelle étape « Exécuter un JavaScript » en utilisant ce script : this.closeDoc(true);
“this” représente le fichier dont on veut extraire la première page donc this.closeDoc(true); ne fermera pas le fichier temporaire.
Pour ma part voici le script à utiliser :
var newDoc=app.newDoc();
newDoc.insertPages ({
nPage: 0,
cPath: this.path,
nStart: 0
});
newDoc.deletePages(0);
newDoc.saveAs({
cPath: this.path.replace(/.pdf$/i,"_extrait.jpg"),
cConvID: "com.adobe.acrobat.jpeg",
bCopy: true,
bPromptToOverwrite: true
});
newDoc.closeDoc(true);
Il vaut effectivement traiter les 5000 fichiers par lots, sinon il faudrait écrire un autre script pour savoir où on en est dans le traitement…
@+
😎bebarthMaître des clés…pas besoin d’indiquer nEnd si on n’imprime qu’une seule page.
@+
😎
bebarthMaître des clésbonjour,
pour moi il faudra attendre la semaine prochaine car je suis sans ordinateur…
j’espère que ton stage est un peu plus long
@+
😎bebarthMaître des clésbonjour,
regarde les actions Acrobat :
https://helpx.adobe.com/fr/acrobat/using/applying-actions-scripts-pdfs.html
tu devrais y arriver, sinon il faudra attendre la semaine prochaine…@+
😎bebarthMaître des clésbonjour,
avec Acrobat Pro ou Reader ?
je n’ai pas d’ordinateur avec moi cette semaine mais regarde la méthode « print » de l’api référence…
@+
😎bebarthMaître des clésbonjour,
Il faudrait écrire un script de touches personnalisé comme celui que j’ai fait pour ce post :
je serai de retour la semaine prochaine.
@+
😎bebarthMaître des clésVoici quelquelques liens pour t’aider à comprendre le script :
https://www.w3schools.com/jsref/jsref_obj_date.asp
https://developer.mozilla.org/fr/docs/Web/JavaScript/Guide/Numbers_and_dates#lobjet_date
et
https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html#printd@+
😎bebarthMaître des clésbonjour,
Il y avait effectivement une erreur dans le script !
Mieux, on met le script au niveau du document :
if (this.getField("validite").value=="") this.getField("validite").value=util.printd("dd/mm/yyyy", new Date(new Date().getTime()+(365*24*3600*1000)));
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Si tu caches le champ de la date du jour cela signifie que tu n’en a pas besoin !
Tu peux donc réduire ton script à :
Oups! Script modifié…
if (event.value=="") event.value=util.printd("dd/mm/yyyy", new Date(new Date().getTime()+(365*24*3600*1000)));
@+
😎- Cette réponse a été modifiée le il y a 1 année et 6 mois par bebarth.
Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
En script de document tu écris :
this.getField("nomDuChamp").setFocus();
@+
😎bebarthMaître des clés👍
bebarthMaître des clésbebarthMaître des clésbonjour,
Le plus simple est de donner un nom à l’annotation lors de sa création puis supprimer celle qui porte ce nom !if (event.target.buttonGetCaption()=="AJOUTER") {
var coordonnees=event.target.rect;
var annotation=this.addAnnot({
page: 0,
type: "Text",
point: [coordonnees[2]+20,coordonnees[1]+20],
name: "annotationNo1",
});
event.target.buttonSetCaption("SUPPRIMER");
event.target.fillColor=color.red;
event.target.textColor=color.white;
} else {
var lesAnnotations=this.getAnnots({nPage:0});
for (var i=0; i<lesAnnotations.length; i++)
if (lesAnnotations.name=="annotationNo1") lesAnnotations.destroy();
event.target.buttonSetCaption("AJOUTER");
event.target.fillColor=color.green;
event.target.textColor=color.black;
}@+
😎- Cette réponse a été modifiée le il y a 1 année et 6 mois par Merlin. Raison: Ce script n'est pas complet, voir ci-dessous
Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Il faut écrire le script comme ceci :
for (var i=0; i<this.numFields; i++) {
var oFld=this.getField(this.getNthFieldName(i));
if (oFld.type == "text" && (/^Question\.\d+\.\d+/.test(oFld.name) || /^R\.\d+\.\d+/.test(oFld.name) || /^Q\.\d+\.\d+/.test(oFld.name))) {
oFld.setAction("Calculate", "EditReps();");
oFld.setAction("Keystroke", "Default();");
}
}
@+
😎bebarthMaître des clésIl faut mettre les champs en lecture seule uniquement si ils ont été remplis !
var lesChamps=["champs1","champs2","champs3","etc."];
for (var i=0; i<lesChamps.length; i++) {
if (this.getField(lesChamps).value!=this.getField(lesChamps).defaultValue) this.getField(lesChamps).readonly=true;
}
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Le plus simple est de mettre le noms des champs dans une table et de placer ce script au même endroit que le précédent : “Lorsque le document sera enregistré” :
var lesChamps=["champs1","champs2","champs3","etc."];
for (var i=0; i<lesChamps.length; i++) this.getField(lesChamps).readonly=true;
@+
😎PS : Voir la copie d’écran car les crochets n’apparaissent pas dans la ligne de code !
- Cette réponse a été modifiée le il y a 1 année et 6 mois par bebarth.
Attachments:
You must be logged in to view attached files.bebarthMaître des clésVoici une petite modification de ton formulaire sur le champ Email ou j’ai rajouté un script pour demander une adresse valide
L’expression régulière que tu utilises vérifies vraiment que le minimum… On peut par exemple utiliser des caractères accentués alors qu’ils ne sont pas autorisés.
Si tu cherches sur internet tu trouveras des dizaines d’expressions régulières pour cette vérification et toutes différentes !
Moi j’utilise celle-ci…
/^[a-zA-Z0-9.!#$%&'*+/=?^_
{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/`@+
😎bebarthMaître des clésbonjour,TOUT fonctionne correctement comme je le souhaitais
Une petite précision : lorsqu’on utilise “event” dans un script, ce n’est pas la peine de le faire précéder par “this”.
“event” ne s’utilise que dans le document actif et “this” indique que c’est pour le document actif ! C’est donc redondant…@+
😎bebarthMaître des clésbonjour,
Oui, en script d’action lorsque le document sera enregistré on peut passer ces champs en lecture seule !@+
😎bebarthMaître des clésbonjour,
Il faut modifier l’ordre de calcul des champs.
Voici un des scripts :
if (this.getField("CARTE").value=="") var total=this.getField("1JS").value*this.getField("PU1JSE").value;
else var total=this.getField("1JS").value*this.getField("PU1JS").value;
if (this.getField("SUPPL").value=="") event.value=total;
else event.value=total*0.3;
Ici on peut indiquer n’importe quoi en numéro de carte et pour la réduction supplémentaire !
On pourrait peut-être ajouter une expression régulière afin de vérifier si c’est bien un numéro de carte correct…Désolé pour ne pas t’avoir répondu directement sur ta boite mail, j’ai encore été très occupé ces derniers jours.
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbebarthMaître des clésVoici un exemple de ce qui pourrait se faire !
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,« Et donc dans mes rêves les plus fous, le pop-up n’apparait plus une fois qu’on a ‘enregistré-sous’. » On devrait peut être pouvoir bidouiller quelque chose… Je vais réfléchir.
En script d’actions du document “Le document sera enregistré” on peut supprimer l’alerte avec “this.removeScript”.
… et utiliser “try… catch” pour éviter de futur erreurs lors des prochains enregistrements !
@+
😎- Cette réponse a été modifiée le il y a 1 année et 6 mois par bebarth.
bebarthMaître des clésbonjour,
J’arrive un peu après la bataille, mais pour inverser 2 variables a et b on peur utiliser :
b=[a, a=b][0];
D’où ma version (en français) :
var leMot=this.getField("MelangeLettre").value;
this.getField("MelangeLettre").value=melangerMot(leMot);
function melangerMot(leMot) {
var tableMot=leMot.split("");
var tableMelangee=melangerTable(tableMot);
return tableMelangee.join("");
}
function melangerTable(table) {
for (var i=table.length-1; i>0; i--) {
var j=Math.floor(Math.random()*(i + 1));
table[j]=[table,table=table[j]][0];
}
return table;
}
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Pour programmer ton formulaire plus facilement, il va falloir au préalable revoir les noms des champs et les valeurs d’exportations des menus déroulants. Tu imagines bien que si dans les formules on a uniquement des valeurs du type ” Absence de RDV préalable – 2 appels infructueux, demande de RDV “, le script va vite devenir illisible… Des chaines de caractères de ce type ne doivent être que des valeurs attribuées à des champs.J’ai quand même fait l’exemple donné, mais Merlin à raison : pour établir une formule il faut une règle et non juste un ou des exemple :
if (!event.willCommit) {
if (event.changeEx==" Chantier non déclaré (CND)") {
this.getField("N° Téléservice de la Dict").fillColor=color.gray;
this.getField("N° Téléservice de la Dict").readonly=true;
this.getField("Si absence de RDV").fillColor=color.gray;
this.getField("Si absence de RDV").readonly=true;
this.getField("si rdv non respecté").fillColor=color.gray;
this.getField("si rdv non respecté").readonly=true;
this.getField("si non respect des prescriptions").fillColor=color.gray;
this.getField("si non respect des prescriptions").readonly=true;
} else {
this.getField("N° Téléservice de la Dict").fillColor=color.transparent;
this.getField("N° Téléservice de la Dict").readonly=false;
this.getField("Si absence de RDV").fillColor=color.transparent;
this.getField("Si absence de RDV").readonly=false;
this.getField("si rdv non respecté").fillColor=color.transparent;
this.getField("si rdv non respecté").readonly=false;
this.getField("si non respect des prescriptions").fillColor=color.transparent;
this.getField("si non respect des prescriptions").readonly=false;
}
}
Dans ton cas, s’il n’y a pas de règle bien définies, il faudra utiliser des “else if” pour chaque cas.
if (!event.willCommit) {
if (event.changeEx==" Chantier non déclaré (CND)") {
this.getField("N° Téléservice de la Dict").fillColor=color.gray;
this.getField("N° Téléservice de la Dict").readonly=true;
this.getField("Si absence de RDV").fillColor=color.gray;
this.getField("Si absence de RDV").readonly=true;
this.getField("si rdv non respecté").fillColor=color.gray;
this.getField("si rdv non respecté").readonly=true;
this.getField("si non respect des prescriptions").fillColor=color.gray;
this.getField("si non respect des prescriptions").readonly=true;
} else if (event.changeEx==" Absence de RDV préalable - 2 appels infructueux, demande de RDV") {
...
...
} else if (event.changeEx==" Non respect des prescriptions GRTgaz") {
...
...
} else {
this.getField("N° Téléservice de la Dict").fillColor=color.transparent;
this.getField("N° Téléservice de la Dict").readonly=false;
this.getField("Si absence de RDV").fillColor=color.transparent;
this.getField("Si absence de RDV").readonly=false;
this.getField("si rdv non respecté").fillColor=color.transparent;
this.getField("si rdv non respecté").readonly=false;
this.getField("si non respect des prescriptions").fillColor=color.transparent;
this.getField("si non respect des prescriptions").readonly=false;
}
}
Autre recommendation, pour les menus déroulants, pense à cocher la case “Valider la valeur sélectionnée immédiatement”.
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Dans ton fichier Excel, je ne vois pas à voir quelles cellules sont grisées en fonction de quels éléments des menus déroulants !
Pourrais-tu donner quelques exemples.mais si je met plusieur mot dans la liste d’élément dans la liste déroulante
À première vue if suffirait d’ajouter des “ou” (||).
@+
😎bebarthMaître des clésbonjour,
Il existe plusieurs façons de faire ça !
En script de touches personnalisé du menu déroulant qui ne s’exécute que lors de la modification du menu :
if (!event.willCommit) {
if (event.changeEx=="Champs grisés") {
this.getField("Text2").fillColor=color.gray;
this.getField("Text2").readonly=true;
this.getField("Text3").fillColor=color.gray;
this.getField("Text3").readonly=true;
} else {
this.getField("Text2").fillColor=color.transparent;
this.getField("Text2").readonly=false;
this.getField("Text3").fillColor=color.transparent;
this.getField("Text3").readonly=false;
}
}
ou en script de calcul des champs modifiés, mais ces scripts s’exécutent après chaque évènement ce qui peut être pénalisant s’il y en a beaucoup :
if (this.getField("Dropdown7").value=="Champs grisés") {
event.target.fillColor=color.gray;
event.target.readonly=true;
} else {
event.target.fillColor=color.transparent;
event.target.readonly=false;
}
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Les tampons sont stockés dans un répertoire Stamps.
Tu télécharges l’utilitaire show_me_the_path et tu sera exactement où ils se trouvent :@+
😎bebarthMaître des clésbonjour,
Il y avait la même chose dans l’API Reference, mais perso je préfère regarder la valeur :
var premierPoint=event.target.name.indexOf(".");
var dernierPoint=event.target.name.lastIndexOf(".");
var ind1=event.target.name.substring(premierPoint+1,dernierPoint);
this.getField("Aide."+ind1+".2").display=event.target.value!="Off"?display.visible:display.hidden;
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbebarthMaître des clésJe n’ai pas de message d’erreur mais ça ne marche pas…
Je n’ai pas vérifié le script entier, mais la première chose que je vois est que resetForm() doit s’appliquer à une table, il faut donc écrire :
if (oFld.type == "combobox") {this.resetForm([oFld.name]);}
Je regarderai plus précisément si ça ne fonctionne pas mieux…
@+
😎bebarthMaître des clésbonjour,Par exemple si je veux extraire le chiffre compris entre les 2 points d’un champ qui se nommerait R.5.3 (ici le chiffre 5) mais il faudrait que ça fonctionne pour le cas d’un nombre à 2 chiffres comme R.12.10 (pour extraire le nombre 12)
Pour celà, il faut prendre la valeur indiquée entre le premier et le dernier point. Essaye ceci :
var nomChamp="R.12.10";
var premierPoint=nomChamp.indexOf(".");
var dernierPoint=nomChamp.lastIndexOf(".");
var indice=nomChamp.substring(premierPoint+1,dernierPoint);
console.println("indice : "+indice);
Ce serait un peu plus compliqué s’il y avait plus de 2 points mais c’est faisable quand même !@+
😎bebarthMaître des clésbonjour,
Il faut écrire le script en fonction de l’indice des champs.
Pour la fonction :
function HM_Format(ind) {
var enminutes=Math. round(somme/60)
// Heures
var heures=Math.floor(enminutes/60);
// Minutes
var minutes=((enminutes/60)-heures)*60;
if (this.getField("caseAcocher."+ind).value!="Off") heures--;
event.value=util.printf("%,302.0f", heures)+":"+util.printf("%,302.0f", minutes);
}
et pour appeler la fonction :
event.value= "";
var somme=Time2Num("hh:mm", this.getField("end.0").value)-Time2Num("hh:mm", this.getField("start.0").value);
HM_Format(event.target.name.substr(6));
A noter que tu devrais utiliser la même méthode pour la variable somme.
Tu devrais également positionner ces scripts en scripts de touche personnalisés des menus déroulants start et end ce qui éviterait que les calculs se fassent après chaque évènement déclenché dans ton formulaire !@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Voici pour moi ! Juste une petite modification de la fonction HM_Format :function HM_Format() {
var enminutes=Math. round(somme/60)
// Heures
var heures=Math.floor(enminutes/60);
// Minutes
var minutes=((enminutes/60)-heures)*60;
// Suppression d'une heure
if (heures>6) heures--;
// ou
// if (this.getField("caseAcocher").value!="Off") heures--;
//
event.value=util.printf("%,302.0f", heures)+":"+util.printf("%,302.0f", minutes);
}
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,Attention quand même : cette requête GREP détecte le « R » en début de mot, mais pas forcément en début de nom.
C’est pourquoi il vaut mieux écrire :
...
if (/^R./.test(oFld.name)) {
...
ou
...
if (oFld.name.indexOf("R.")==0) {
...
@+
😎- Cette réponse a été modifiée le il y a 1 année et 8 mois par bebarth.
bebarthMaître des clésVoici donc ma proposition :
function verifier(n) {
var nbChamps=0;
for (var i=0; i<this.numFields; i++) {
if (this.getNthFieldName(i).indexOf("Q"+n+".")==0) nbChamps++;
}
var erreurs=0;
for (var a=1; a<=nbChamps; a++) {
this.getField("Q"+n+"."+a).readonly=true;
if (this.getField("Q"+n+"."+a).value!=0) {
this.getField("Q"+n+"."+a).fillColor=color.white;
} if (this.getField("Q"+n+"."+a).value==0) {
this.getField("Q"+n+"."+a).fillColor=color.red;
erreurs++;
}
}
if (!erreurs) {
this.getField("Bravo.1").display=display.visible;
this.getField("Masque."+n).display=display.hidden;
} else {
if (erreurs==1) this.getField("Erreurs.1").value="Il y a une erreur.";
else this.getField("Erreurs.1").value="Il y a "+erreurs+" erreurs.";
this.getField("Erreurs.1").display=display.visible;
}
}
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,Il faudrait un code qui me permettrait de compter tous les champs qui commencent par « Q »+n+ ». »
Voici ce que tu peux écrire :
var nbChamps=0;
for (var i=0; i<this.numFields; i++) {
if (this.getNthFieldName(i).indexOf("Q"+n+".")==0) nbChamps++;
}
console.println("Nombre de champs Q"+n+". : "+nbChamps);
@+
😎bebarthMaître des clésBonne année à tous !
🍾😎
bebarthMaître des clésMath.floor arrondit à l’entier inférieur tandis que Math.round arrondit à l’entier le plus proche.
@+
😎bebarthMaître des clésbonjour,
Essaye plutôt :Math.round(Math.random()*3)+1;
@+
😎bebarthMaître des clésA ce moment la il faut procéder autrement, directement lors de la création des liste.
Donc on modifie ta fonction :
function LaListe() {
var lesLignes=this.getField("entreesListe").value.split("\r");
for (var a=0; a<lesLignes.length; a++) if (lesLignes[a]=="") lesLignes[a]=lesLignes[a]=" ";
for (var a = 0; a < 11; a++) {if (this.getField("motif."+a) != null) {this.getField("motif."+a).setItems(lesLignes);}}
}
et tu peux supprimer l’autre script.@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésJe n’avais pas fait attention que c’était un bouton, je pensais que c’était un champ image.
Un champ image est un bouton sans couleur de fond où l’action et le script sont déjà intégrés.@+
😎bebarthMaître des clésbonjour,
Je ne vois pas bien à quoi ça sert, mais tu peux écrire :
this.getField("champTXT").value=this.getField("champTXT").value.replace(/\r\r/g,"\r \r");
@+
😎bebarthMaître des clésbonjour,
Comme ça je ne vois pas !
As-tu essayé d’importer une autre image pour voir le résultat ?@+
😎bebarthMaître des clésbonjour,
En script de format personnalisé :
if (event.value!="") event.value=event.value+" km";
avec un “k” minuscule pour l’unité, et
if (event.value!="") event.value=event.value+" €";
@+
😎bebarthMaître des clésbonjour,
Avant de modifier la langue, il faut repérer la position de chaque menu avec “currentValueIndices”, puis repositionner la valeur des menus après modification.@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
La fonction exportdataobject marche si on importe une PJ normalement via l’onglet PJ mais pas via les annots
C’est malheureusement correct !!!
@+
😎16 décembre 2022 à 20:59 en réponse à : Javascript afficher/masquer un champ en fonction d’un calcul #72227bebarthMaître des clésbonjour,Le nombre 15 a-til une définition particulière en JS ?
En JavaScriptologie, je ne pense pas !
As-tu un message d’erreur dans la console ? Peux-tu partager un fichier ?
@+
😎bebarthMaître des clésbonjour,
Ici peut-être ! https://www.abracadabrapdf.net/forums/topic/champs-calcule-difference/@+
😎bebarthMaître des clésbonjour,
C’est parce que tu supprimes uniquement le champs, mais l’objet est toujours là !
Il faudrait le supprimer avec :
this.removeIcon("BB");
…ou autre avant de réinitialiser.
Manuellement tu peux taper cette ligne dans la console, sinon tu pourrais avec ton champ liste.66 supprimer complètement l’élément sélectionné (champ et objet).
Essaye et dis-moi, sinon j’essayerai de faire ça lundi…@+
😎bebarthMaître des clésbonjour,
Voici ! J’ai apporté quelques modifications dans tes scripts afin de réduire le nombre de lignes.@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Il faut appeler différents éléments de l’objet “elementsListes” en fonction de la langue :
var bouton=this.getField("icone");
if (event.target.buttonGetCaption()=="Français") {
event.target.buttonSetCaption("Anglais");
event.target.fillColor=color.black;
event.target.textColor=color.white;
this.getField("ListeMere").setItems(["aAnglais","bAnglais","cAnglais"]);
this.getField("ListeFille").setItems([elementsListes["aAnglais"],elementsListes["bAnglais"],elementsListes["cAnglais"]]);
this.getField("ListePetiteFille").clearItems();
} else {
event.target.buttonSetCaption("Français");
event.target.fillColor=color.black;
event.target.textColor=color.white;
this.getField("ListeMere").setItems(["aFrancais","bFrancais","cFrancais"]);
this.getField("ListeFille").setItems([elementsListes["aFrancais"],elementsListes["bFrancais"],elementsListes["cFrancais"]]);
this.getField("ListePetiteFille").clearItems();
}
bouton.buttonSetIcon(this.getField("bt1").buttonGetIcon());
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonsoir,
event.value=Math.atan(this.getField("CtanRLD").value)*180/Math.PI;
@+
😎Attachments:
You must be logged in to view attached files.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 9 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 9 mois par bebarth.
- Cette réponse a été modifiée le il y a 1 année et 9 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. -
AuteurRéponses