Toutes mes réponses sur les forums
-
AuteurRéponses
-
bebarth
Maître des clésbonjour,
Je vais y réfléchir… mais pas aujourd’hui, certainement demain !@+
😎bebarth
Maî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.bebarth
Maître des clés👏💪👍
@+
😎bebarth
Maî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 #71638bebarth
Maî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.bebarth
Maî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.bebarth
Maî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.bebarth
Maî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 !
@+
😎bebarth
Maî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 ?
@+
😎bebarth
Maî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.bebarth
Maî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.@+
😎bebarth
Maî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 8 mois par
bebarth.
bebarth
Maî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…
@+
😎bebarth
Maî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…@+
😎bebarth
Maître des clésCompris, merci !
@+
😎bebarth
Maî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…@+
😎bebarth
Maî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.
@+
😎bebarth
Maî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 9 mois par
bebarth.
bebarth
Maî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.bebarth
Maî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 !@+
😎bebarth
Maî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.bebarth
Maî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 #71519bebarth
Maî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 #71511bebarth
Maî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 #71510bebarth
Maître des clésJe regarde demain…
@+
😎21 septembre 2022 à 14:47 en réponse à : JavaScript / oLB imprime frequement un « 1 », par erreur #71508bebarth
Maî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 #71504bebarth
Maî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 !
@+
😎bebarth
Maî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 #71489bebarth
Maî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 #71483bebarth
Maî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 #71480bebarth
Maî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.
@+
😎bebarth
Maître des clésbonjour,
Je ne peux pas regarder ton fichier immédiatement mais regarde l’ordre de calcul des champs.
@+
😎bebarth
Maî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.bebarth
Maî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 !
@+
😎bebarth
Maî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.bebarth
Maî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 ?
@+
😎bebarth
Maî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.bebarth
Maî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;
@+
😎bebarth
Maî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 ???
@+
😎bebarth
Maî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.bebarth
Maître des clésbebarth
Maî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)@+
😎bebarth
Maî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";
}
@+
😎bebarth
Maî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…@+
😎bebarth
Maî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 11 mois par
bebarth.
bebarth
Maî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 #71388bebarth
Maî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.bebarth
Maî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…
@+
😎bebarth
Maître des clésbonjour,
Voici ! Je te laisse étudier…@+
😎Attachments:
You must be logged in to view attached files.bebarth
Maître des clésDésolé ! En vacances sans wifi…
@+
😎bebarth
Maî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.bebarth
Maî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();
})
}
@+
😎bebarth
Maî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 !@+
😎bebarth
Maî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.bebarth
Maître des clésbebarth
Maî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.bebarth
Maî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.bebarth
Maî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…
@+
😎bebarth
Maî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.bebarth
Maî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 3 années par
bebarth.
bebarth
Maî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.bebarth
Maî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.bebarth
Maître des clésbonjour,
Les factures : si, mais la facturation, je crois que c’est carrément interdit !@+
😎bebarth
Maî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.bebarth
Maî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.bebarth
Maî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;
}
}
@+
😎bebarth
Maî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 !
@+
😎bebarth
Maî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…@+
bebarth
Maî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 ?
@+
😎bebarth
Maî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) #71199bebarth
Maî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.bebarth
Maî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.bebarth
Maî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.bebarth
Maî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 #71160bebarth
Maître des clésbonsoir,
Tu peux essayer wetransfer ou autre…@+
😎bebarth
Maî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.bebarth
Maî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.bebarth
Maî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.@+
😎bebarth
Maî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.bebarth
Maître des clésbebarth
Maî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.@+
😎bebarth
Maî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.bebarth
Maî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 3 années et 1 mois par
bebarth.
Attachments:
You must be logged in to view attached files.bebarth
Maî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 ???
@+
😎bebarth
Maî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 !@+
😎bebarth
Maître des clésbonjour,
Il faut exécuter :
this.getField("nomChampListe").clearItems();
@+
😎bebarth
Maî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@+
😎bebarth
Maî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.bebarth
Maî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 !@+
😎bebarth
Maître des clésPeux-tu partager le fichier de cette étiquette ?
@+
😎bebarth
Maî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 ?
@+
😎bebarth
Maître des clésbonjour,
Je n’ai pas compris ce que tu voulais changer de couleur !@+
😎bebarth
Maî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 !
@+
😎bebarth
Maître des clésbonjour,
Si tu utilises le point en séparateur décimal, tu peux juste utiliser ce script en format personnalisé :
if (event.value<10) event.value="0"+event.value;
Si tu utilises la virgule, il faudra utiliser celui-ci (qui fonctionne également avec le point mais qui est un peu plus compliqué).
if (Number(event.value.replace(/,/,"."))<10) event.value="0"+event.value;
@+
😎Attachments:
You must be logged in to view attached files.bebarth
Maître des clésbonjour,
this.getField(« CHAMP2 »).value = event.value;
Cela vient des guillemets à la française. Il faut écrire :
this.getField("CHAMP2").value = event.value;
@+
😎bebarth
Maître des clésbonjour,
Voici un exemple comme l’a expliqué Merlin, avec un script de validation.@+
😎Attachments:
You must be logged in to view attached files.bebarth
Maître des clésbonjour,
Tu utilises la commande « print » :Il y a plusieurs paramètres, mais tu peux juste utiliser ceux-ci pour imprimer la page courante en pleine page et sans interface utilisateur :
this.print({bUI: false, nStart: this.pageNum, bShrinkToFit: true});
@+
😎bebarth
Maître des clésbonjour,
Je n’ai pas bien compris…
Peux-tu donner un exemple de ce que tu récupères et ce que tu souhaiterais avoir !@+
😎bebarth
Maître des clésbonjour,
Voici quelques réponses :nbPlaces=17; // Nombre de places
posEleve=new Array(nbPlaces+1); // Définition d'une table à 18 éléments (de 0 à 17)
function noPlace() {
// S'il n'y a qu'une seule ligne pour une boucle "for" ou une condition "if else"
// il n'y a pas besoin d'accolades qui définissent l'ensemble des lignes à exécuter
for (var i=1; i<=nbPlaces; i++) posEleve=[this.getField("El."+i).value,this.getField("place."+i).value];
// posEleve=[this.getField("El."+i).value,this.getField("place."+i).value];
// L'élément i de la table posEleve est une table [] de 2 éléments et la virgule indique la séparation des éléments
}
noPlace();
// Fonction "placement" selon 2 paramètres "ind" -> indice et "pos" -> position
function placement(ind,pos) {
// Boucle pour vérifier toutes les positions
for (var i=1; i<=nbPlaces; i++) {
// So la position indiquée est identique à la position dans la table posEleve
// mais que l'indice du champs est différent de l'indice de la table posEleve
if (pos==posEleve[1] && ind!=i) {
// Message d'alerte
app.alert(posEleve[ind][0]+" et "+posEleve[0]+" ont le même numéro de place : "+posEleve[1],3);
break;
} else if (ind==i) {
posEleve[ind][1]=pos;
}
}
}
Les tables et les boucles permettent de réduire beaucoup les lignes de scripts.
Les expressions régulières sont assez compliquées à comprendre, mais sont très efficaces !@+
😎 -
AuteurRéponses