Toutes mes réponses sur les forums
-
AuteurRéponses
-
bebarthMaître des clés
bonjour,
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 2 années et 2 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 et 2 mois 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 !
@+
😎bebarthMaître des clésbonjour,
Les écritures des opérations JavaScript sont décrites ici :
https://www.w3schools.com/jsref/jsref_obj_math.aspPour la racine carrée c’est donc Math.sqrt(x) et voici pour l’exemple posté précédemment.
@+
😎Attachments:
You must be logged in to view attached files.19 septembre 2022 à 11:30 en réponse à : JavaScript / oLB imprime frequement un “1”, par erreur #71489bebarthMaître des clésbonjour,
le VAR n’imprime pas dans la case / disparait
En fait, je ne comprends pas ce que cela signifie… Pourrais-tu partager un fichier ?
@+
😎18 septembre 2022 à 09:03 en réponse à : JavaScript / oLB imprime frequement un “1”, par erreur #71483bebarthMaître des clésbonjour,
Dans l’onglet “Options” des propriétés du menu déroulant tu sélectionnes “Valider la valeur sélectionnée immédiatement”. Ça devrait fonctionner !@+
😎16 septembre 2022 à 22:45 en réponse à : JavaScript / oLB imprime frequement un “1”, par erreur #71480bebarthMaître des clésbonjour,
dans la méthode “insertItemAt” le deuxième paramètre indique la valeur d’exportation. Je ne comprends pas “Bref, pourquoi le chiffre 1 imprime dans ma selection…” mais il y a bien un 1 en valeur d’exportation.D’après ce que je comprends, il serait préférable d’écrire les valeurs dans une table plutôt que de les insérer une après l’autre :
var lesDates=[[],[this.getField(" Appelrecu_date ").value,1],[this.getField(" 1.SurvenuEntre_Date ").value,2],[this.getField(" SurvenuEntre_Date2 ").value,3]];
this.getField(" redaction_date ").setItems(lesDates);
…et une petite remarque : ne pas mettre d’espaces dans le nom des champs.
@+
😎bebarthMaître des clésbonjour,
Je ne peux pas regarder ton fichier immédiatement mais regarde l’ordre de calcul des champs.
@+
😎bebarthMaître des clésbonjour,
Voici comment écrire d’après ton exemple :var T = "";
for (var i=1; i<=9; i++) {
if (this.getField("Case."+i).value != "Off") {
T= T + this.getField("Case."+i).value;
if (i!=9)
T = T + ", ";
}
}
if (T=="") event.value= "Rien";
else event.value= "Synthèse : " + T;
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésAs-tu vu ma dernière réponse ?
En ce qui me concerne il faudra attendre le 30 août pour une réponse plus approfondie… mais je ne sais pas s’il est très judicieux d’avoir un menu déroulant avec 80 éléments !
@+
😎bebarthMaître des clésbonjour,
C’est une bonne chose de mettre le code en script de validation, mais il faut dans ce cas le mettre pour “Champ2” et non pour “champ3″…
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Ne serait-il pas judicieux d’envisager de placer toutes ces données dans une feuille de tableur (Excel par exemple) au format csv et de joindre le fichier au formulaire ?
@+
😎bebarthMaître des clésbonjour,
Voici une possibilité, en script de calcul du champ3 :
if (this.getField("Champ2").value!="") {
this.getField("Metiers").value=this.getField("Champ2").value;
var liste=["- Choisissez -"];
for (var i=0; i<3; i++) liste.push(this.getField("Champ2").value+" - Élément "+(i+1));
} else {
var liste=[""];
this.getField("Metiers").value="Off";
}
event.target.setItems(liste);
Attention à ne pas mettre de caractères accentués dans le nom des champs !
Désolé pour les délais de réponse, mais je suis “ENCORE” (et toujours) en vacances jusqu’à fin août !
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clés…ce n’est pas ce qui était demandé !
Pour trouver ta valeur il faut écrire :
event.value=Math.sqrt(this.getField("A14").value)*5.65;
@+
😎bebarthMaître des clésLa racine carrée de 5.65 s’écrit : Math.sqrt(5.65)
Donc ton script doit être :
event.value=this.getField("A14").value*Math.sqrt(5.65);
J’ai fait pas mal de cours de “Résistance des matériaux” il y a très longtemps lorsque j’étais étudiant, et je ne reconnais pas cette formule… Certainement ai-je oublié !!! A quoi correspondent S0 et le coefficient 5,65 ???
@+
😎bebarthMaître des clésbonjour,
Vu que DJCK_014 et DJCK_015 sont identiques (DJCK_007/2), j’ai un peu modifié ta formule :
event.value=this.getField("DJCK_007").value/2*Math.sqrt(Math.PI)*5.65;
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbebarthMaître des clésDésolé, j’avais mal lu la question. Pour trouver la racine de 5.65 il faut utiliser Math.sqrt() :
https://www.w3schools.com/jsref/jsref_pow.asp
Donc : Math.sqrt(5.65)@+
😎bebarthMaître des clésOK, il faut donc un script de format personnalisé où tu inverses les lignes car si tu rajoutes l’unité, event.value n’est plus un nombre !
if (event.value!="") {
event.target.textColor = event.value > 1400 ? color.red : color.black;
event.value=Number(event.value).toFixed(0)+" N";
}
@+
😎bebarthMaître des clésbonjour,
Qu’est-ce que “N” ??? Il faut que ce soit un chiffre ou un nombre…
Ça fonctionne si tu écris en script de validation :
event.value=Number(Number(event.value).toFixed(0))+2;
event.target.textColor = event.value > 1400 ? color.red : color.black;
Si tu écris ce script en script de calcul le nombre sera incrémenté après chaque évènnement…@+
😎bebarthMaître des clésbonjour,
Il faut utiliser Math.pow() :
https://www.w3schools.com/jsref/jsref_pow.asp
Donc : Math.pow(xxxx,5.65)@+
😎- Cette réponse a été modifiée le il y a 2 années et 4 mois par bebarth.
bebarthMaître des clésbonjour,
Il faut régler les valeurs d’exportation de chaque groupe de boutons radios 1 pour vrai et 0 pour faux. Ensuite un script de calcul pour chaque champ Note (ici pour le numéro 1) :
if (this.getField("Group1").value!="Off") event.value=this.getField("Group1").value;
else event.value="";
@+
😎Attachments:
You must be logged in to view attached files.28 juillet 2022 à 20:53 en réponse à : Enregistrer un fichier en le nommant de la valeur d’un champ #71388bebarthMaître des clésbonjour,
Voici un script que tu ne pourras utiliser que depuis la console ou avec une action (en pièce jointe).
var f=this.getField("nomChamp");
if (f.value) {
this.saveAs({
cPath: this.path.replace(/.pdf$/i," ("+f.value+").pdf"),
bCopy: true,
bPromptToOverwrite: true,
});
this.resetForm();
this.dirty=false;
} else app.alert("Veuillez remplir le champ \""+f.name+"\".",3);
Il n’est pas possible d’enregistrer un fichier à partir d’un bouton, à moins d’utiliser un script d’application (à installer sur chaque ordinateur désirant l’exécuter). Dis-moi si ça t’intéresse !
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Regarde la partie “Template” de l’API Reference :
https://opensource.adobe.com/dc-acrobat-sdk-docs/acrobatsdk/html2015/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FTemplate.htm
Les propriétés et méthodes :
https://opensource.adobe.com/dc-acrobat-sdk-docs/acrobatsdk/html2015/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FTemplate_properties.htm
https://opensource.adobe.com/dc-acrobat-sdk-docs/acrobatsdk/html2015/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FTemplate_methods.htmIl y a plusieurs possibilités pour dupliquer et renommer les champs, mais je suppose que si tu veux dupliquer une page modèle, c’est que la nouvelle ne sera pas exactement comme l’originale, sinon je ne vois pas à quoi ça sert…
@+
😎bebarthMaître des clésbonjour,
Voici ! Je te laisse étudier…@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésDésolé ! En vacances sans wifi…
@+
😎bebarthMaître des clésbonjour,
Voici le script réécrit car il est conseillé de ne plus utiliser la méthode “spawnPageFromTemplate”.
Du coup, j’ai mis les scripts en fonctions dans un script de document !Techniquement est-il possible de dupliqué via script les pages modèles
Pour cela il suffit de dupliquer une page modèle et de lui appliquer la méthode “createTemplate”.
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
…mais comment je fais pour voir ce qui est inscrit dedans…
Tu peux le lire avec un éditeur JavaScript si tu en as un, sinon tu changes l’extension .js par .txt et tu l’ouvres avec un éditeur de texte ! Ça Fonctionne peut-être même directement…
Sinon, voici le script :
if (app.formsVersion>=8) {
importIcon_boucledore95=app.trustedFunction(function(nomPhoto) {
app.beginPriv();
this.importIcon("laPhoto",nomPhoto);
app.endPriv();
})
}
@+
😎bebarthMaître des clésIl y a quelques a années j’avais traduit en français l’article de Thom Parker :
https://acrobatusers.com/tutorials/print/dynamic_stamp_secrets/
Je l’ai remis en page il n’y a pas très longtemps si ça intéresse quelqu’un, je partage !@+
😎bebarthMaître des clésbonjour,
Pas besoin de le créer puisque Acrobat l’a fait pour toi ! Mais le nom a déjà été modifié vu que Acrobat crée le modèle de page avec un symbole #…
Pour modifier l’intitulé, -> Outil “Organiser les pages” -> “Autre” -> “Modèles de page”. Puis tu rajoutes un # au début du nom et “Ajouter”. Acrobat va te demander si tu veux modifier le nom, tu réponds Oui.
Ensuite, il faut utiliser “#gFArg3CUa7QIU6ELF48e51” dans ton script.@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbebarthMaître des clésbonjour,
Il faut ajouter un symbole # avant la référence de ta page modèle, et c’est cette référence qu’il faut indiquer dans ton script.…
Attachments:
You must be logged in to view attached files.bebarthMaître des clésVoilà !
Tu places le fichier “importIcon_boucledore95.js” dans le répertoire JavaScript d’Acrobat. Tu peux évidemment renommer ce fichier si tu le souhaites.
Pour cet exemple, les photos (uniquement des fichiers .pdf) doivent être dans le même répertoire que le fichier “Identité & Photo_BB.pdf”, mais on peut en indiquer un autre du moment que tu as les droits d’accès.Tu me dis…
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Je n’ai pas le temps de répondre plus en détail pour l’instant, mais il faudrait utiliser la méthode “importIcon” puis utiliser l’icône pour dans un bouton ou champ image.Malheureusement, pour être utilisée autrement qu’avec la console ou une action, cette méthode nécessite des privilèges, il faut donc créer n script d’application…
@+
😎bebarthMaître des clésbonjour,
La fonction teste (comme la fonction Liste) se trouve en script de document.
Si dans ton document tu n’as pas recopié les scripts de document ça ne pourra pas fonctionner !@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Exact ! Il faut tester ton script avec ton fichier tampon (dans le répertoire Stamps). La propriété forReal est vraie (true) lorsqu’un tampon (du fichier qui contient le ou les tampons) est placé sur le document et faux (false) à tout autre moment. event.source.stampName est la référence (générée par Acrobat) incluse dans le nom de la page modèle dans le fichier qui contient le ou les tampons. Cette référence (symbole # inclus) peut être modifiée du moment qu’elle l’est également dans le script.
En cas de souci, peux-tu partager ton tampon ?@+
😎- Cette réponse a été modifiée le il y a 2 années et 5 mois par bebarth.
bebarthMaître des clésbonjour,
…sauf que ton répertoire est protégé !
Il faut un nom d’utilisateur et un mot de passe.@++
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Du moment que les pages à dupliquer sont des pages modèles, on peut le faire avec autant de modèles que l’on veut !
Voici un exemple que j’avais fait il y a quelques années… (pour dire que le script peut certainement être amélioré).@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Les factures : si, mais la facturation, je crois que c’est carrément interdit !@+
😎bebarthMaître des clésVoici un exemple où j’ai indiqué l’ordre de tabulation souhaité en info-bulle de chaque champ.
Après avoir lancé le script, les info-bulles sont effacées et j’ai indiqué pour les champs texte uniquement le numéro de tabulation, mais ça c’est juste pour montrer que ça a fonctionné !Le script à lancer de la console ou à mettre en action :
var nomIncr="BB";
var nomChamps=[];
for (var i=0; i<this.numFields; i++) nomChamps.push([getNthFieldName(i),this.getField(getNthFieldName(i)).userName]);
nomChamps.sort(function(a, b){return a[1]-b[1]});
for (var i=0; i<nomChamps.length; i++) {
var leNom=nomChamps[0];
var nouveauNom=nomIncr+"_";
if (i<10) nouveauNom+="00"+i;
else if (i<100) nouveauNom+="0"+i;
else nouveauNom+=i;
g=this.getField(leNom);
var leType=g.type;
var laPage=String(g.page);
var lesPages=laPage.split(",");
for (var p=0; p<lesPages.length; p++) {
var cettePage=Number(lesPages[p]);
if (lesPages.length>1) {
var nomChamp=leNom+"."+p;
} else {
var nomChamp=leNom;
}
g=this.getField(nomChamp);
var lesCoord=g.rect;
var f=this.addField(nouveauNom, leType, cettePage, lesCoord);
f=this.getField(nouveauNom);
for (var j in g) {
try {
if (typeof g[j]!="function" && j!="name" && j!="type" && j!="page" && j!="rect") {
f[j]=g[j];
}
} catch(e) {}
}
f.userName="";
if (f.type="text") f.value="Tabulation n° "+nomChamps[1];
}
this.removeField(leNom);
}
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Comment fait-on pour les forcer à utiliser un logiciel spécifique ?
Et pour former ton numéro, voici un exemple, et le script de touches personnalisé du menu déroulant :
if (!event.willCommit) {
if (event.changeEx!=0) this.getField("noFacture").value=util.printd("ddmmyy",new Date())+event.changeEx;
else this.getField("noFacture").value="";
}
…et je laisse Merlin commenter au sujet des factures réalisées avec Acrobat !
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Il faut définir une boucle de 1 à 16 pour ta variable n, mais ici aussi tu aurais dû avoir une boucle de 1 à 22….if (event.target.value == 1) {
for (var n=1; n<=16; n++) {
this.resetForm(['Normal'+n,'M'+n]);
this.getField("Normal"+n).display = display.visible;
this.getField("Normal"+n).value = "0" ;
this.getField("Normal"+n).required = false;
this.getField("Uneval"+n).value = "!" ;
this.getField("V"+n).value = "!" ;
this.getField("Stent"+n).value = "!" ;
this.getField("NotPresent"+n).display = display.hidden;
this.getField("P"+n).display = display.hidden;
this.getField("S"+n).display = display.hidden;
this.getField("M"+n).display = display.hidden;
this.getField("Uneval"+n).display = display.visible;
this.getField("V"+n).display = display.visible;
this.getField("Stent"+n).display = display.visible;
}
} else {
for (var n=1; n<=16; n++) {
this.getField("Normal"+n).value = "!" ;
this.getField("P"+n).value = "!" ;
this.getField("S"+n).value = "!" ;
this.getField("NotPresent"+n).value = "!" ;
this.getField("Normal"+n).required = true;
this.getField("NotPresent"+n).required = true;
this.getField("P"+n).required = true;
this.getField("S"+n).required = true;
this.getField("NotPresent"+n).display = display.visible;
this.getField("P"+n).display = display.visible;
this.getField("S"+n).display = display.visible;
this.getField("M"+n).display = display.visible;
}
}
@+
😎bebarthMaître des clésbonjour,
A, B, C… sont les noms des champs ?
Pour chaque ligne, Total est la somme Source+Argent+Services ? et à quoi correspond Pourcentage ?…Sinon merci de préciser ta demande !
@+
😎bebarthMaître des clésbonjour,
Ou en une ligne :
for (var i=0; i<this.numFields; i++) this.getField(this.getNthFieldName(i)).userName="";
Je regarde pour la suite plus tard !Pour mon adresse e-mail, je ne sais pas si on peut la trouver sur le nouveau forum ! J’ai cherché mais je n’ai pas trouvé…
C’est bebarth arrobase sfr point fr. Tu écris ça correctement et ça devrait m’arriver…@+
bebarthMaître des clésbonjour,
Hello, Alors oui on peut l’amélioré et d’une façon simple j’espère ;O) Quand je renomme les champs.. si il y a une info bulle… il remet partout la même… ;O( si on peut déjà virer ça c’est top..)
Sans vouloir jouer sur les mots, ce n’est pas une amélioration, mais une adaptation pour résoudre ton problème !
Lorsque tu dis “il remet la partout même” je suppose que tu veux dire “il remet partout l’existante”, car c’est ce qui est prévu par le script.
Pour supprimer les info-bulles, il faut écrire :
...
}
f.userName="";
if (leType=="text") {
...
En ce qui concerne l’ordre de tabulation, est-ce que les champs texte sont remplis ?
Est-il envisageable d’indiquer l’ordre de tabulation souhaité dans ces champs ? La numérotation serait évidemment retirée automatiquement !…et t’est-il possible de me faire parvenir un fichier via mon adresse e-mail ?
@+
😎bebarthMaître des clésbonjour,
D’abord je souhaiterai créer un menu déroulant dans lequel je sélectionnerai l’horaire de ma consultation pour qu’une valeur s’affiche sous le format : yyyymmdd »une valeur de 01 à 14″
Pourrais-tu expliquer un peu ! Je ne suis pas certain d’avoir compris… et je suis même certain de n’avoir pas compris. 😉
Pour la question suivante, te serait-il possible de partager un fichier (bidon) car il y a certainement plusieurs raison possibles !
La première étant de regarder si tous les champs ont bien la propriété “Visible à l’écran”.@+
😎16 juin 2022 à 23:56 en réponse à : Ajout d’une page (verso.pdf) à une série de pages (rect.pdf) #71199bebarthMaître des clésbonsoir,
J’ai loupé la question…
Donc voici le sujet original :
…et en pièce jointe (compressée) le fichier action ainsi qu’un exemple pour illustrer le sujet.@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Voici un fichier que j’avais partagé en réponse à ce sujet :
Peut-être pourra-t-il t’être utile !!!@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
En fait, ça dépend du type et du nombre de couleurs.
Si ce sont des aplats de couleurs bien définies, tu peux les indiquer comme dans le fichiers joint.Si ce sont des couleurs Pantone ou des dégradés par exemple il te faudra incorporer des images directement dans des champs que tu peux afficher/masquer en fonction de la sélection, soit créer des icônes et les faire apparaitre dans un champ unique toujours en fonction de la sélection.
Pour ces 2 derniers cas, le poids du fichier dépendra donc du poids des images qui auront été importées dans le pdf.@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clés…mais il faut l’amélioré…
Il faudrait l’améliorer… si c’était possible !
Dans un monde parfait où on a pensé à tout, l’ordre de tabulation est identique à l’ordre de création des champs.
Sauf que, pauvres mortels que nous sommes, nous ne pensons pas tout juste du premier coup l’ordre de tabulation est modifié alors que l’ordre de création ne l’est pas… Et par dessus ça, il n’est pas possible de modifier l’ordre de tabulation via JavaScript. Du coup, il n’est pas possible de redéfinir un ordre de création de nouveau champ par rapport à un ordre de tabulation.
Le seul ordre qu’il est possible de modifier est l’ordre de calcul… à la limite il faudrait avant de lancer un script, placer un calcul bidon dans l’ordre de tabulation, mais ça fait du travail manuel sur tous les champs et ce n’est pas ce qui est recherché… Autant renommer manuellement tous les champs !@+
😎11 juin 2022 à 20:52 en réponse à : Actions à réaliser suivant réponses des groupes de boutons radio #71160bebarthMaître des clésbonsoir,
Tu peux essayer wetransfer ou autre…@+
😎bebarthMaître des clésbonjour,
Il faut placer un champ image. Lorsque l’utilisateur clique dessus, l’interface utilisateur demande de sélectionner un fichier.@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésLa propriété “required” ne s’applique pas aux boutons, il faut donc les retirer de la condition.
Voici le script a appliquer :
var nCompt=0;
for (var i=0; i<this.numFields; i++) {
var oChamp=this.getField(this.getNthFieldName(i));
if (oChamp.type!="button" && oChamp!=null && oChamp.required==true && oChamp.value==oChamp.defaultValue) nCompt++;
}
if (nCompt>0) app.alert("Merci de cocher tous les champs obligatoires.");
Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Le sujet a déjà été traité plusieurs fois, dont une des dernières :On ne peut pas empêcher l’utilisateur d’enregistrer un document. Ce qu’on peut faire, c’est de lancer un script d’« Action du document » lorsque « Le document sera enregistré » qui vérifiera et affichera éventuellement un message d’alerte.
Le post indiqué ci-dessus devrait pouvoir résoudre ton problème.
N’hésite pas à partager un fichier si cela t’est possible pour une aide plus spécifique.@+
😎bebarthMaître des clésbonjour,
Voici l’adaptation du script d’un post auquel j’ai répondu récemment :
https://community.adobe.com/t5/acrobat-discussions/i-have-read-all-sorts-of-how-to-on-populating-a-drop-down-list/td-p/12862536
J’ai juste modifié une ligne pour ajouter une valeur d’exportation :
for (var i=1; i<cells.length; i++) theNames.push([cells[1],cells[0]]);
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbebarthMaître des clésCe script remet exactement les mêmes propriétés !
Mais si il faut en modifier (fond, police…), tu me dis et je peux l’adapter.@+
😎bebarthMaître des clésC’est exactement ce que fait le script inclus dans le fichier… “Script” !
Il faut sélectionner tout ce script, le coller dans la console vide, modifier la ligne n° 2 en indiquant le nouveau nom des champs (sans index), puis sélectionner tout le script de la console et ENTER du pavé numérique.Sinon, voici une action où il faudra également modifier la ligne n° 2.
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Voici un script à exécuter depuis la console :
// Nouveau nom à incrémenter
var nomIncr="DJCK";
// Pour "DJCK_000", "DJCK_001", "DJCK_002", etc.
var nomChamps=[];
...
}
…et en pièce jointe une action pour renommer un champ.
Je joins un fichier avec le script car il n’était pas afficher correctement même au format “Code”.
@+
😎- Cette réponse a été modifiée le il y a 2 années et 6 mois par bebarth.
Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
2 choses :- Il est impossible de renommer un champ via JavaScript. Par contre (et c’est ce que fait ton exemple) il est possible de créer un champ avec un nouveau nom, qui a les mêmes propriétés puis de supprimer le champ initial.
Par contre, il est impossible de lire (donc de “coller” dans le nouveau champ les formats et les différents scripts appliqués à ce champ).
On ne peut pas les copier, mais si on les connait on peut les réécrire… - Le script que tu indiques permet de “renommer” les champs dont le nom contient un point et de le changer par un dièse. Je ne crois pas comprendre que c’est ce que tu veux exactement faire !
Veux-tu renommer avec un nom incrémental tous les champs ou seulement certains ???
@+
😎bebarthMaître des clésCe n’était pas ce que tu voulais faire ?
Qu’entends-tu par “rien afficher” ?
Si c’est un élément vide, il faut qu’il existe (ou le créer) et exécuter :
this.getField("nomChampListe").value=""
s’il n’y a pas de valeur d’exportation outhis.getField("nomChampListe").value="valeurDexportation
” s’il y en a une !@+
😎bebarthMaître des clésbonjour,
Il faut exécuter :
this.getField("nomChampListe").clearItems();
@+
😎bebarthMaître des clés…du coup, avec les calques le fichier est un peu plus lourd.
Voici un lien pour le récupérer :
https://we.tl/t-omF635mC5L@+
😎bebarthMaître des clésVoici ce que je t’ai fait en créant des calques à partir d’un fichier Illustrator enregistré en “Couleurs.pdf”.
Tu me dis !@+
Attachments:
You must be logged in to view attached files.bebarthMaître des clésLe tick de la case à cocher et la flèche ne font-ils pas double emploi ?
Je regarde ça dans la soirée !@+
😎bebarthMaître des clésPeux-tu partager le fichier de cette étiquette ?
@+
😎bebarthMaître des clésQu’as-tu comme type de fichier pour travailler ?
Peux-tu générer des calques ?
Peux-tu avoir un fichier des les flèches en toutes les couleurs ?
Le fichier pdf est-il juste cette étiquette ?
@+
😎bebarthMaître des clésbonjour,
Je n’ai pas compris ce que tu voulais changer de couleur !@+
😎bebarthMaître des clésbonjour,
Bonjour ou plutôt bonsoir bref autodidacte c’est pas facile !!!
…et ce n’est pas fini… mais tu y arriveras si tu le veux !
Il faudra y passer des heures et des nuits où certaines fois tu penseras ne jamais y arriver, mais à force de travail tu y arriveras.Il va falloir que tu lises et relises l’API reference (en espérant que tu comprennes un peu l’anglais)
https://opensource.adobe.com/dc-acrobat-sdk-docs/acrobatsdk/html2015/index.html#t=Acro12_MasterBook%2FIntroduction_Help_TitlePage%2FAbout_This_Help.htmles tutos abracadabraPDF
https://www.abracadabrapdf.net/category/ressources-et-tutos/js-et-formulaires-ressources/les références JavaScript
https://www.w3schools.com/jsref/default.aspet que tu fasses pas mal de recherches internet.
Il va falloir également apprendre les syntaxes JavaScript d’Acrobat.
Tu aurais dû écrire ton script comme ceci :var sommeC = this.getField("Total_C06").value+this.getField("Total_C09").value;
var A = (Math.floor(sommeC*10));
var B = sommeC*10;
var D = 0;
if ((B - A) >= 0.5) D += 1;
if ((B - A) < 0.5) D = 0;
event.value=((A+D)/10);
et dans quelques temps tu l’écriras comme ça :
event.value=(this.getField("Total_C06").value+this.getField("Total_C09").value).toFixed(1);
Courage !
@+
😎 -
AuteurRéponses