Toutes mes réponses sur les forums
-
AuteurRéponses
-
jctremblay
ParticipantOui, j’ai vu. Je dois tester. Merci!
J’aime bien la lisibilité qu’offre le résultat de https://jsstringconverter.bbody.io/jctremblay
ParticipantMerci Merlin!
Exactement ce qu’il me fallait. Je me voyais mal faire ça manuellement sur plus de 600 lignes.jctremblay
ParticipantJ’ai ce javascript qui ajoute un script de document.
var scriptName = “ScriptPersonnalise”;
var scriptContent = “app.alert(‘Bonjour, ceci est un script de document personnalisé !’);”;
this.addScript(scriptName, scriptContent);C’est quand le scriptContent est plusieurs dizaine de ligne que ça se complique.
Le but étant de pouvoir écrire du script à l’aide d’un javascript.
jctremblay
ParticipantMerci Merlin,
Le truc du champs blanc est un «hack» interessant.
Ça fait aussi une très bonne blague pour les collègues lors du poison d’avril. 🙂jctremblay
ParticipantMerci pour votre retour. De très bons commentaires. Il y a des pour et des contres.
Je commence à prendre l’habitude de séparer le script long par type de contenu (format, alert, config).jctremblay
ParticipantMerci @bebarth,
Cet exemple m’aide vraiment. J’ai que quelques petites questions que je t’ai envoyées par mail.jctremblay
ParticipantLa commande Modèles de page se trouve à l’intérieur de l’outil Organiser les pages dans le menu Autres.
jctremblay
ParticipantLe code dans un PDF pour faciliter la lecture/copier.
Attachments:
You must be logged in to view attached files.jctremblay
ParticipantEn lisant, les infos sur PDFScripting et l’aide de Nesa Nurani (Adobe Community), voici ce que la structure d’un bouton d’outil personnalisé peut ressembler. Bien sur cela peut être plus complexe que ça.
function myToolAction() {
var mainMenu = {
cName: "Main Menu",
oSubMenu: [
{cName:"Option1", oSubMenu:[{cName:"SubOption1"},{cName:"SubOption2"}]},
{cName:"Option2", oSubMenu:[{cName:"SubOption3"},{cName:"SubOption4"}]},
{cName:"SingleOption"}
]
};
var selectedOption = app.popUpMenuEx(mainMenu);
if (selectedOption === "SubOption1") {
app.alert("Sub-Option 1 selected");
} else if (selectedOption === "SubOption2") {
app.alert("Sub-Option 2 selected");
} else if (selectedOption === "SubOption3") {
app.alert("Sub-Option 3 selected");
} else if (selectedOption === "SubOption4") {
app.alert("Sub-Option 4 selected");
} else if (selectedOption === "SingleOption") {
singleOptionAlert();
}
}
function singleOptionAlert() { app.alert("Direct Action selected");}
myToolAction();
app.addToolButton({
cName: "UniqueToolButtonName",
cLabel: "Tool Button Label",
cTooltext: "Open Multi-Level Menu",
cExec: "myToolAction()",
cEnable: "event.rc = (event.target != null);"
});
jctremblay
Participant@Merlin – Tu peux m’envoyer que aT-CompteurMots.js ou aT-NouveauDoc.js.
@bebarth – Merci pour le document. Je n’ai pas de souci à créer des menu avec multiple sous-menu. C’est pour les Outils personnalisés que je n’y arrive pas.
jctremblay
ParticipantMP envoyé!
jctremblay
ParticipantLe manque de support pour le JavaScript sur les mobiles c’est profondément dommage.
Si tu veux produire du «WOW» un document interactif Publish Online est une possibilité avec un lien vers ton CV plus linéaire en PDF.
jctremblay
ParticipantJ’ai fait un document avec 3 calques…
Les 3 boutons demeurent visibles, et il n’y a qu’un bouton pour fermer. Je te laisse fouiller les codes. 🙂-
Cette réponse a été modifiée le il y a 2 mois et 1 semaine par
jctremblay.
Attachments:
You must be logged in to view attached files.jctremblay
Participant@paulivisual
La possibilité de «spawned» une page par-dessus une autre page est possible. Par contre je n’ai pas réussi à trouver un code pour l’enlever une fois que la page a été superposée sur un autre.L’option des calques me sembles plus pratique quand il y a plusieurs éléments dans cette parties de la page que d’utilise des boutons. Par contre, la création et modification des calques n’est pas toujours simple.
jctremblay
ParticipantPour ton bouton «Imprimer», tu pourrais utiliser ce code pour rendre ton modèle visible, imprimes sans interaction et remets le modèle invisible:
this.getTemplate("printcv").hidden = false;
this.print({
bUI: false, // Masquer la boîte de dialogue d'impression
bSilent: true, // Imprimer sans interaction utilisateur
nStart: 1, // Start printing from page 2
nEnd: 1 // End printing at page 2 (print only page 2) });
this.getTemplate("printcv").hidden = true;
jctremblay
ParticipantParole de sage de Merlin ici…
jctremblay
ParticipantIl y a certainement plusieurs façons de faire cela.
Une méthode simple est de faire des boutons avec tes différentes sections et de les mettre invisible au départ. Par la suite, tu peux les faire apparaitre à l’aide de boutons avec quelque chose comme ceci:
["Close", "Page1", "Page2"].forEach(f => this.getField(f).hidden = true);
["Close", "Page3"].forEach(f => this.getField(f).hidden = false);
Tu trouvera un exemple dans le PDF.
Attachments:
You must be logged in to view attached files.jctremblay
ParticipantMerci!
J’oublie toujours d’aller voir cette documentation officielle.jctremblay
ParticipantBoujour David,
Regarde le document ici:
J’ai modifié ton script de document en enlevant function JSON()
J’ai mis le script en tant que script de calcul au lieu d’un script de validation.var userInput = this.getField("codeInput").value;
var dropdown = this.getField("filteredOptions");
// Sécuriser la conversion en chaîne et en minuscules
userInput = userInput ? String(userInput).toLowerCase() : "";
// Gérer les différents cas de saisie
if (userInput.length < 2) {
dropdown.setItems(["Entrez au moins 2 caractères"]);
} else {
// Filtrer les options
var filtered = data.filter(function(item) {
return item.code.toLowerCase().startsWith(userInput);
});
if (filtered.length > 1) {
// Construire un tableau des valeurs pour le dropdown
var options = filtered.map(function(item) {
return item.value;
});
dropdown.setItems(options);
} else {
dropdown.setItems(["Aucune correspondance"]);
}
}
Attachments:
You must be logged in to view attached files.jctremblay
ParticipantCela ne semble pas être le cas. Regarde le document joint.
Attachments:
You must be logged in to view attached files.jctremblay
ParticipantDommage!
jctremblay
ParticipantJ’obtiens un NaN quand j’utilise ton code:
event. value = (event.target.page[1] + 1) + " / " + this.numPages ;
Mais celui-ci fonctionne:
event.value = (event.target.page + 1) + " / " + this.numPages ;
9 novembre 2024 à 16:42 en réponse à : Identifier la couleur des champs en exportant les données #75142jctremblay
Participant@Rockabilly
Dans le fichier joint…
Le script de calcul ajoute la couleur dans les infobulles des champs en plus de changer la couleur de fond de ceux-ci.Il y a deux boutons:
Un va exporter le nom des champs ainsi que la valeur de leurs infobulles dans un fichier .txt. Pour pouvoir le faire, tu devras inclure, dans la section Protection (renforcée) des préférences d’Acrobat, le PDF ou le répertoire dans lequel il se trouve.L’autre bouton va simplement envoyer le résultat dans un champ «MAT».
~ Jean-Claude
Attachments:
You must be logged in to view attached files.8 novembre 2024 à 16:56 en réponse à : Identifier la couleur des champs en exportant les données #75141jctremblay
ParticipantEn effet, si on veut rapidement obtenir que les valeurs de certains champs, un script d’exportation donnerait un résultat plus concis. Tout dépend de ce que l’utilisateur veut faire avec ces données une fois exportées.
7 novembre 2024 à 19:17 en réponse à : Identifier la couleur des champs en exportant les données #75138jctremblay
ParticipantTu trouveras cette approche dans le document ci-joint.
Reste à mettre le script de format pour «cacher» la couleur.Attachments:
You must be logged in to view attached files.7 novembre 2024 à 18:58 en réponse à : Identifier la couleur des champs en exportant les données #75137jctremblay
ParticipantUne piste de solution…
Si en plus de changer la couleur des champs, ton script de calcule ajouter à la fin des valeurs de tes champs le texte «- Orange», et que, dans ces champs tu ajoutes un script de format qui cache le texte à partir de «- ». Ceux-ci seront allons présent lors de l’exportation des données en .txt, mais pas visibles dans les champs du PDF.
Ex:
if ((this.getField("AS").value == "1") && color.equal(this.getField("EST").fillColor, color.green)) { this.getField("EST").fillColor = color.orange;
var estField = this.getField("EST");
if (!estField.valueAsString.endsWith(" - Orange")) {
estField.value = estField.valueAsString + " - Orange"; }
}
et ceci comme script de format.
event.value = String(event.value).split("-")[0].trim();
Le reste du code est possiblement à optimiser.6 novembre 2024 à 20:03 en réponse à : Identifier la couleur des champs en exportant les données #75129jctremblay
ParticipantUne maquette serait très utile en effet. Cela permettrait de voir les types de champs en question.
Je comprends que ce dont tu as besoin est que ces «marqueurs» de couleurs soit présents danston exportation des données.
jctremblay
Participant… et on aime ça le «frotter» un peu. Il en sort toujours quelque chose d’épatant! 😀
jctremblay
Participant@bebarth
J’ai réussi à faire que les choix multiples d’une zone de liste se copient en temps réel dans un champ de texte. Il y a donc un script lors du changement de choix, et un script de calcul dans le champ pour mettre en forme les valeurs reçues.
(voir le PDF pour les codes).Par contre je n’y suis pas arrivé encore pour une zone de liste vers une liste déroulante.
Attachments:
You must be logged in to view attached files.jctremblay
ParticipantJe suis complètement débordé avec tout le TAF urgent à terminé! C’est un document d’expérimentation, donc pas d’urgence. Merci!
jctremblay
ParticipantÇa devrait fonctionner sur Mac et PC, sous unix je ne connais pas la syntaxe des chemins !
J’essai cela quand j’ai quelques minutes. Merci!
jctremblay
ParticipantJe l’ai placé en action champ désactivé car comme la sélection multiple est autorisée ça ne fonctionne pas correctement en action “changement de sélection”.
Merci! C’est ce que j’avais remarqué. Donc, “selection multiple” et “changement de sélection” ne fonctionne pas ensemble.
jctremblay
ParticipantÇa plus de sens… 🙂 Merci!
jctremblay
ParticipantSi le pdf original est sur le même disque on peut en déduire le chemin du bureau, mais attention ils sont différents selon l’OS !
Donc, ce sera impossible si le PDF source se trouve sur un serveur SharePoint j’imagine.
Il me manque les détails de cela pour l’instant.
@Merlin Merci pour le lien vers le «safe path». Je n’y comprends rien. Mais bon, je n’ai pas pris mon café encore. 🙂jctremblay
ParticipantMais on pourrait (dans le script d’application) en inclure un vers le dossier bureau de l’utilisateur, au lieu du chemin du PDF original?
jctremblay
ParticipantDonc, on ne peut qu’écrire manuellement le chemin désiré?
Impossible de capturer le chemin, et de l’écrire comme variable pour pouvoir le récupérer pour le reste de l’exécution?
jctremblay
ParticipantJe n’arrive pas à faire tourner ce script en script de document…
Tu dois mettre tout le script dans une fonction et celle elle que tu appera dans ton bouton.
Attachments:
You must be logged in to view attached files.jctremblay
ParticipantAh! Maintenant je saisis… 🙂
jctremblay
ParticipantJuste pour info, ce n’est pas la peine d’indiquer event.rc = true; car c’est l’état par défaut de la validation si on indique pas event.rc = false;. Ça fait une ligne de moins…
Donc le
event.rc = false;
n’est pas nécessaire également?jctremblay
ParticipantC’est amusant comment il y a plusieurs chemin pour obtenir le même résultat avec le JavaScript.
J’ai réussi à obtenir 3, 4 méthode qui donnes le même résultat. Voici la plus courte.if (event.value) {
var enteredDate = util.scand("dd/mm/yyyy", event.value);
if (enteredDate >= new Date()) {
this.getField("DateLimite").value = util.printd("dd/mm/yyyy", new Date(enteredDate.getTime() + ([5,4,6,5,5,5,5][enteredDate.getDay()] * 86400000))
);
event.rc = true;
} else {
app.alert("La date doit être aujourd'hui ou une date ultérieure.");
event.rc = false; }
}
Attachments:
You must be logged in to view attached files.jctremblay
ParticipantJ’ai modifié ton script de document comme suit:
function VarAleas() {
for (var i = 1; i <= 4; i++) {
var aMin = parseFloat(this.getField("Var." + i + ".1").value);
var aMax = parseFloat(this.getField("Var." + i + ".2").value);
var aDec = parseInt(this.getField("Dec." + i).value, 10);
var a1 = aMin + Math.random() * (aMax - aMin); a1 = a1.toFixed(aDec);
a1 = parseFloat(a1);
this.getField("Var." + i + ".3").value = a1; }
}
-
Cette réponse a été modifiée le il y a 5 mois par
jctremblay.
-
Cette réponse a été modifiée le il y a 5 mois par
jctremblay.
Attachments:
You must be logged in to view attached files.jctremblay
ParticipantUne date future à aujourd’hui et non pas antérieur. Donc, < et non pas > ici:
if (laDate<aujourdhui) {
app.alert("Veuillez indiquer une date future à aujourd'hui.",3);
jctremblay
ParticipantTu as modifié passablement le code de la fonction mots. L’erreur se trouve là…
Je te laisse revérifier le tout ou recommencer selon mon document.jctremblay
ParticipantBonjour JC, Merci beaucoup ! En effet, le script de transcription a plus sa place en script de document. Le seul hic, c’est que tant que l’utilisateur n’a pas cliqué dans le champ “SaisieSomme”, le champ “TexteSomme” transcrit le contenu du champ “Nombre” et non celui de “SaisieSomme”. Si on rentre la valeur 5 dans le champ “Nombre”, le champ “TexteSomme” affiche “cinq euros”, tandis que le champ “SaisieSomme” affiche “5000 €”.
Remplace cette ligne:
var chaine=this.event.target.valueAsString;
Par ceci et tout devrait fonctionner.
var chaine=this.getField("SaisieSomme").valueAsString;
jctremblay
ParticipantOk…
Comme j’avais mentionné, déplace ton code pour les nombres en mots dans un script de document.
Puis consolide tout dans un script de calcule du champ «nombre» comme ceci:var saisieSomme = this.getField("SaisieSomme");
if (event.value != "" && event.value < 5)
{
app.alert("Rentrer une valeur supérieure ou égale à 5");
event.value = "";
} else {
saisieSomme.value = event.value * 1000;
mots();
}
Le script du document ici à le nom de fonction «mots».
Tu trouvera la correction dans le PDF.
L’ordre de calcul a aussi été modifié… et les champ «SaisieSomme» et «texteSomme» en lecture seulement.Attachments:
You must be logged in to view attached files.jctremblay
ParticipantPour ton champ de validation «nombre» tu peut utiliser ceci:
if (event.value != "" && event.value < 5)
{
app.alert("Rentrer une valeur supérieure ou égale à 5");
event.value = "";
}Pour le reste, ton code pour les chiffres en mots devrait être en Javascript de document, le calcul de «SaisieSomme» et de celui-ci devrait idéalement être dans ton champ «nombre».
jctremblay
ParticipantMerci encore une fois!
6 septembre 2024 à 19:19 en réponse à : Remplir les champs d’une 2e liste déroulante dynamiquement #74821jctremblay
ParticipantMerci bebarth! Je me souvient maintenant du terme «mère-fille». Je vais aller lire…
Pour ce type de champs j’arrive à ces méthodes:
1. Script de validation witch > case > set > break dans le script ou le document
2. Information dans un script de document
3. Information dans un fichier .csv en pièces jointes.jctremblay
ParticipantMerci Merlin!
Je n’ai besoin que de faire ça pour un client, donc, je vais lui demander de modifier ses préférences et tout fonctionnera.J’étais curieux de voir si c’était possible. Sécurité oblige, je comprend très bien pourquoi cela ne l’est pas.
jctremblay
ParticipantBonjour Bonne question à laquelle je ne peux pas répondre pour le moment car je suis dans les Alpes loin de chez moi et mon ordi. …
C’est une très bonne excuse…
jctremblay
ParticipantJ’avais le même erreur avec l’original de bebarth. Version corrigé.
var aTemplates = this.templates;
for (var i = 0; i < aTemplates.length; i++) {
aTemplates.hidden = false;
var leNom = aTemplates.name;
var ind = leNom.substr(leNom.length - 1);
this.setPageLabels(this.numPages - 1, ["D", leNom, ind - 1]);
}
jctremblay
ParticipantLe script qui démasque les modèles en conservant leurs noms, à placer dans une Action :
Merci!
Je l’ai modifié car le dernier caractère du nom du modèle n’étais pas conservé.
var aTemplates = this.templates;
for (var i = 0; i < aTemplates.length; i++) {
aTemplates.hidden = false; // true ou false
var leNom = aTemplates.name;
var ind = leNom.substr(leNom.length - 1);
this.setPageLabels(this.numPages - 1, ["D", leNom, ind - 1]);
}
jctremblay
ParticipantWaouh, beau boulot ! Si ça t’intéresse, bebarth m’avait écrit un script qui “démasque” les modèles masqués en conservant leurs noms de modèle dans le panneau des pages, au lieu d’avoir page 1, page 2, etc. C’est très pratique quand il y en a beaucoup. Avec son autorisation (dont je doute pas) je pourrais te l’envoyer, ou le poster céans.
Ce serait utile en effet. Est-ce qu’un script pourrait aussi créer un modèle en utilisant le nom du panneau page? J’imagine que oui.
jctremblay
ParticipantMerci pour ces précision.
Dans mon cas, l’avantage des modèles masqués est d’offrir ce panneau à l’utilisateur lui offrant un choix de modèle à dupliquer.
Attachments:
You must be logged in to view attached files.jctremblay
ParticipantOn peut dupliquer une page template qu’elle soit masquée ou apparente, ça ne change rien. Il faut seulement que ladite page soit enregistrée comme template.
@Merlin Est-ce qu’il y a un scénario ou cela pourrait être avantageux ou problèmatique d’avoir les page modèles visible ou l’inverse.Ce que je comprend…
Pages modèles cachées = Augmentation du Poids du PDF
Pages modèles visible = Si l’utilisateur supprime cette page, le modèle disparaît également.jctremblay
ParticipantDésolé je suis dans le cap corse sans pratiquement aucun réseau…
Profite…
jctremblay
ParticipantIl y a donc une sérieuse limite en lien avec la sécurité. C’est compréhensible… mais chiant à la fois.
Je vais, comme tu le suggères, devoir faire mes modèles avant et modifier mon script pour avoir un choix des modèles existant à dupliquer. Je garde quand même celui-ci à sauvegarder en action.
@bebarth,
De quel Quick bar parles-tu?-
Cette réponse a été modifiée le il y a 6 mois et 1 semaine par
jctremblay.
jctremblay
ParticipantMerci Merlin pour le contexte de la chose… On vas mettre des caractères sans accents! 🙁
jctremblay
ParticipantJe l’ai testé avec Acrobat 11, et j’ai le même résultat. J’ai donc rêvé. 🙂
jctremblay
ParticipantEst-ce que cela signifie que ça a déjà fonctionné un jour ???
Bonne question, il se peut que non. Mais il me semble que j’ai un vague souvenir que oui. Ma mémoire me joue peut-être des tours. J’ai demandé à Adobe, on verra ce qu’ils me donneront comme réponse.
jctremblay
ParticipantC’est bien ce que je pensais. On peut par contre relier un fichier .csv en pièce jointe. Je vais voir si c’est une option faisable. Merci!
jctremblay
ParticipantMerci mon cher bebarth!
J’était bien conscience que mon code n’était pas optimale. 😀Je vais comparer.
Merci 1000xjctremblay
ParticipantThom Parker (l’auteur du fameux «All About PDF Stamps») as répondu dans le forum de la communauté.
L’erreur était que:—
The “item_id” in a dialog object must be 4 and only 4 characters long.
Otherwise that item cannot be referenced and returns undefined as a value.jctremblay
ParticipantC’est rassurant… Je ne suis donc pas fou.
J’ai publié sur la «Community Adobe». On verra ce que nos amis nous diront.jctremblay
ParticipantEn effet! 😕
Pas de rapport, mais j’ai ajouté un this.resetForm(prefix); avant de remplir les champs de numérotation, car dans mon doc actuel cela m’assurer de réinitialiser le contenue des modèles dupliquer (je n’utilise pas ici de modèle caché).
jctremblay
ParticipantPour moi ça fonctionne… dans le PDF la page 2 [pageindex 1] (le modèle) lorsque copier, devient la page 3 [pageindex 2] et les champs dupliquer sont avec un P2. au début.
Si j’utilise var pageIndex = this.pageNum +1;
La console me donne ceci et les champs à modifier ne sont pas reconnue
prefix: P3
TypeError: this.getField(…) is nulljctremblay
ParticipantC’est fait (le prototype en pièce jointe). J’ai placé mes variables de compteurs sur la page 1 (ils seront invisibles au final). Puis, chaque page (2,3,7 et 8) avec un compteur est un modèle avec un bouton. Pour la page 2, comme ceci:
var expTplt = getTemplate("p2");
expTplt.spawn(this.pageNum+1,true,false);
var newCount = parseInt(this.getField("counterP2").value + 3);
this.getField("counterP2").value = newCount;
var pageIndex = this.pageNum;
var prefix = "P" + pageIndex;
this.getField(prefix +".p2.p2_1").value = newCount;
this.getField(prefix +".p2.p2_2").value = newCount + 1;
this.getField(prefix +".p2.p2_3").value = newCount + 2;
Dommage, le client à changer d’idée! 😐
Attachments:
You must be logged in to view attached files.jctremblay
ParticipantUn compteur par couleur (donc quatre au total dans ce document).
Pour ce qui est de supprimer les pages. En fait, non, ils ne pourrons pas. (Reader ne le permet pas, à moins de leurs offrir un bouton/script).jctremblay
ParticipantLes pages à dupliquer sont elles toutes identiques ou bien ont elles un contenu différent ? Contenu différent
L’utilisateur a-t-il moyen de supprimer les pages dupliquées et si oui comment ? Non, sinon qu’avec le navigateur de page
Dans l’image, un utilisateur pour dupliquer la section jaune, par exemple, dix fois. Donc, il y aurait plus que douze pages.
Une solution encore plus simple serait de laisser l’utilisateur entrer même les numéros. Cela risque d’être ma solution considérant le temps que j’ai a y mettre. 😀
jctremblay
ParticipantJe me suis réjouis trop vite…
En réalité, je vais avoir «4 liste» numérotés à configurer. Utiliser le pageIndex ne fonctionneras plus car les pages ne seront pas dupliquer toujours le même nombres ni le même ordre (voir l’image). Il me faudrais une façon de calculer le nombre de pages d’un templates spécifique, et d’utiliser ce nombre pour les calcules.Une idée de comment faire ça?
Attachments:
You must be logged in to view attached files.jctremblay
ParticipantMes maths n’étaient pas correct… 😃 ceci fonctionne. (PDF joint pour les curieux)
var pageIndex = this.pageNum;
var prefix = “P” + pageIndex;
var nbField = 3;
this.getField(prefix +”.page.A”).value = pageIndex * nbField + 1;
this.getField(prefix +”.page.B”).value = pageIndex * nbField + 2;
this.getField(prefix +”.page.C”).value = pageIndex * nbField + 3;Attachments:
You must be logged in to view attached files.jctremblay
ParticipantThis seems to be working… the nbField variable is the number of fields on that page affected. Is there a better way of doing it?
var expTplt = getTemplate("page");
expTplt.spawn(numPages,true,false);
var pageIndex = this.pageNum;
var prefix = "P" + pageIndex;
var nbField = pageIndex + 3;
this.getField(prefix +".page.A").value = nbField + 1;
this.getField(prefix +".page.B").value = nbField + 2;
this.getField(prefix +".page.C").value = nbField + 3;
-
Cette réponse a été modifiée le il y a 1 année et 5 mois par
jctremblay.
-
Cette réponse a été modifiée le il y a 1 année et 5 mois par
jctremblay.
jctremblay
ParticipantMerci!
jctremblay
ParticipantWow! Merci!
Il ne resterais qu’a enlever l’extension dans le nom de la pièce jointe dans le popup.Que ferions nous sans toi mon cher @bebarth ? 😍
jctremblay
ParticipantBon… J’ai réussi à faire un menu sur un bouton comme ceci, mais chaque nom des pièces jointes doit être écrit manuellement.
var menuItemNames = ["Le PDF 1", "Le PDF 2", "Le PDF 3", "Le HTML 1", "Le HTML 2"];
var actions = [
'this.exportDataObject({ cName: "PDF1.pdf", nLaunch: 2 });', 'this.exportDataObject({ cName: "PDF2.pdf", nLaunch: 2 });', 'this.exportDataObject({ cName: "PDF3.pdf", nLaunch: 2 });', 'this.exportDataObject({ cName: "html1.html", nLaunch: 2 });', 'this.exportDataObject({ cName: "html2.html", nLaunch: 2 });'
];
var cChoice = app.popUpMenu.apply(app, menuItemNames);
if (cChoice != null) { var selectedIndex = menuItemNames.indexOf(cChoice);
if (selectedIndex >= 0 && selectedIndex < actions.length) {
try {
eval(actions[selectedIndex]);
} catch (e) {
app.alert("An error occurred while executing the selected action: " + e);
} } }Ce qui serait mieux c’est que le menu capture le nombre de pièces et leurs noms de façon dynamique. Ce qui permettrait de l’utiliser rapidement sans avoir à l’éditer pour chaque usage. À suivre… à moins que @bebarth ait une idée pour modifier ce code. Je joint le PDF
Attachments:
You must be logged in to view attached files.jctremblay
ParticipantOui. J’ai déjà vu ça… je cherche aussi par curiosité.
Je publie ici si je trouve.jctremblay
ParticipantOui. l’ouverture des pièces jointes est possible avec ceci (et ça marche pour les html aussi).
this.exportDataObject({ cName: “PDF2.pdf”, nLaunch: 2 });
Par contre quand j’essai de faire apparaitre un popup avec la liste de pièces jointes cela ne fonctionne pas. Ex:
Voir le code dans le troisième bouton du fichier
Attachments:
You must be logged in to view attached files.jctremblay
ParticipantMerci Merlin! C’est bien ce que je pensais.
J’imagine que ce serait la même blocage de sécurité en essayant d’ouvrir un .html qui se trouve en pièce jointe ou l’écriture temporaire d’un fichier ainsi que son ouverture. Je me trompe?
-
Cette réponse a été modifiée le il y a 1 année et 5 mois par
jctremblay.
jctremblay
ParticipantCela a du sens… même si en réinitialisant les champs de listes, je n’attendais à ce qu’ils exécutent à nouveau la fonction de script personnalisé incluse dans ceux-ci. Ce qui n’est pas le cas.
jctremblay
ParticipantJ’ai utilisé ceci au lieu d’un bouton Réinitialiser standard et cela marche.
this.resetForm();
var gReset = this.getField("gomette");
gReset.fillColor = color.transparent;
jctremblay
ParticipantC’est bon aussi… 😀
Tu sais pourquoi, un bouton réinitialiser le formulaire ne remets la couleur de défaut des «gommettes»?
jctremblay
ParticipantPutain… mon dernier script modifié marche bien. J’avais oublié un «m» dans gommette… 😮
jctremblay
ParticipantJ’ai pensé à quelques choses comme ça, mais cela ne fonctionne pas.
function light()
{
var cName = event.target.name;
var nSuffix = cName.substring(cName.lastIndexOf('.')+1);
if (!event.willCommit) {
switch (event.changeEx) {
case "Oui":
var couleur=["RGB",0,1,0];
break;
case "Partiellement":
var couleur=["RGB",1,1,0];
break;
case "Non":
var couleur=["RGB",1,0,0];
break;
default:
var couleur=["T"];
}
this.getField("gomette." + nSuffix).fillColor=couleur;
}
}
jctremblay
ParticipantLe voici…
Attachments:
You must be logged in to view attached files.jctremblay
ParticipantOui, il y aura plusieurs séries de champs liste «couleurs» et «gommette».
Si j’appelle la fonction
light(event.target.name.substr(event.target.name.indexOf(".")+1));
Il ne se passe rien, probablement car à la fin dans le this.getField(gommette).fillColor=couleur;
le suffix n’est pas ajouter. L’extraction du suffix devrait être récupérer dans le script de document et non pas dans l’appelle de la fonction.je continue mes essai.
jctremblay
ParticipantActuellement j’ai ceci comme script de document. Et je ne met que light(“gommette.2”); dans la zone de script de touche personnalisé
function light(gommette)
{
var field = this.getField(gommette);
if (!event.willCommit) {
switch (event.changeEx) {
case "Oui":
var couleur=["RGB",0,1,0];
break;
case "Partiellement":
var couleur=["RGB",1,1,0];
break;
case "Non":
var couleur=["RGB",1,0,0];
break;
default:
var couleur=["T"];
}
this.getField(gommette).fillColor=couleur;
}
}
J’aimerai éliminer la nécessité d’entrée le nom du champs de la gomette.
jctremblay
ParticipantQuel beau hasard, je suis justement en train de faire ce genre de manipulation pour changer la couleur. C’est parfait. Par contre j’aimerai mettre ce script dans un fonction de script de document. Et configurer les variables (les champs «gommette» et la liste «couleurs») pour qu’ils soient automatiser selon le nom des champs ex: «couleurs.0» affecteras automatiquement «gommette.0», «couleurs.1» affecteras «gommette.1», etc.. Cela serait plus facile à modifier, et surtout lorsqu’une série de champs «couleurs/gommette» se retrouve dans une page.
Je sais que ça se fait… mais je suis perdu! 😀
jctremblay
ParticipantCe sont malheureusement des champs avec des noms différents et de document différents.
L’idée c’est que je recherchais une méthode rapide de remplir les champs lors de la fabrication des formulaires afin d’en valide l’aspect, l’alignement, les polices, etc. Je suis paresseux… 😂
De cliquer OK quelques fois pour les champs problématiques ne sera pas un grand souci.
jctremblay
ParticipantBon, les gars vous me rassurer. J’ai tellement essayé de trucs… Ce n’est pas tous les formulaires qui possèdent des champs au format spécifique. Je vis donc vivre avec cette limitation.
Merci!
jctremblay
ParticipantMerci! 😉
jctremblay
ParticipantOh 😯! C’est la classe comme d’habitude… merci!
Je remarque que je peux le faire pour les liste d’option en remplaçant
combobox
parlistbox
en début de script. Serait-il possible d’avoir les deux types de liste dans un seul script?jctremblay
ParticipantAucun souci… 😀.
Au final je l’ai modifié avec un
app.response();
pour pouvoir l’executer sur une liste de mon choix.
J’obtiens dans ma console la liste des: Éléments – Valeur d’exportationvar fL = app.response();
var f = this.getField(fL);
var numItems = f.numItems;
console.clear();
console.show();
for (var i=0; i < f.numItems; i++) {
console.println(f.getItemAt(i,false) + " - " + f.getItemAt(i,true));
}
jctremblay
ParticipantJ’y suis arrivé…
console.show();
console.clear();
var field = this.getField("list");
var numItems = field.numItems;
for (var i = 0; i < numItems; i++) {
var displayValue = field.getItemAt(i, false);
console.println(displayValue);
}
jctremblay
ParticipantPour être plus précis… le code que j’ai mis va fonctionner SEULEMENT si les valeurs d’exportation sont vides. À ce moment je vais obtenir les éléments. Probablement, car les valeurs d’exportations utilisent le nom des éléments s’ils sont vides.
jctremblay
ParticipantEn passant avec ceci j’obtiens les valeurs des items de la liste. J’ai besoin d’obtenir les éléments (items)…
var listBoxField = this.getField("list");
var numItems = listBoxField.numItems;
for (var i = 0; i < numItems; i++) {
var item = listBoxField.getItemAt(i);
var displayText = item.toString();
console.println(displayText);
}
jctremblay
ParticipantBonjour Merlin,
J’obtiens seulement un undefined dans la console. Comment spécifier un champ de liste en particulier?
jctremblay
ParticipantMerci Bebarth!
Ça me sembles bon. Je valide…jctremblay
ParticipantMerci bebarth!
Les deux options fonctionnent. L’option de case à cocher est la plus pertinente pour mes besoins. Par contre, j’ai besoin que chacune des lignes de champs (start.x, end.x, Duree.x) possède leur propre case à cocher et non pas une qui affecte tout les champs. Serait-e possible de spécifier la caseAcocher dans le champ de calcul, tout en gardant l’ajout dans le script de document? Le caseAcocher enleveras 1h quand cocher, remettras une heure quand décocher.
Merci!
Qui a besoin de ChatGPT quand on a un Bebarth!Attachments:
You must be logged in to view attached files.jctremblay
ParticipantMerci JR! Bonne année à nous tous…
-
Cette réponse a été modifiée le il y a 2 mois et 1 semaine par
-
AuteurRéponses