Toutes mes réponses sur les forums
-
AuteurRéponses
-
jctremblay
Maître des clésC’est parfait, et c’est d’un sacré niveau par rapport à ma « nocivisitude ». Merci beaucoup+++ Ma7hieu
Ne t’en fais pas… «Tout expert fut au départ un amateur!»
La majorité de ce que j’ai appris fut ici dans ce forum inestimable. Et il m’en reste encore énormément à apprendre. C’est sans fin.jctremblay
Maître des clésBonjour,
Voilà une version modifiée.
Si j’ai bien compris ce que tu voulais c’est-à-dire de rétinialiser les choix, et les rendre invisibles selon les cases à cocher de l’exemple 2.
Premièrement, j’ai nommé les trois cases «Exemple 2», mais avec des valeurs différentes. De cette façon, ils se comportent comme des boutons radio, mais avec l’avantage de tout les désactiver.
Le code pour l’exemple 2 est maintenant dans un script de document, et seulement la fonction est inscrite dans les trois cases.
Maintenant, il faut savoir si tu as l’intention d’avoir plus d’options, et d’exemple. Si oui, il pourrait être possible d’avoir un script encore plus générique, qui permettrait d’ajouter des exemples et des choix sans avoir à modifier à nouveau les codes. Cela demandera d’avoir une règle plus stricte et prévisible pour les noms des champs.
-
Cette réponse a été modifiée le il y a 3 jours et 11 heures par
jctremblay.
Attachments:
You must be logged in to view attached files.jctremblay
Maître des clésEn me basant sur la même logique que Michel, j’ai réduit la longueur des codes et ajouté une réinitialisation des cases Choix si la case à cocher principale est décochée.
Attachments:
You must be logged in to view attached files.jctremblay
Maître des clésPour un style GREP avec des nombres sans fin ex: 123 456 789 123 456 789 le GREP à utiliser sera être ceci:
\d{1,3}(\s\d{3})+
Pour le faire dans un rechercher/remplacer ceci:
Rechercher:\d\K\h(?=(\d\d\d)+)
Remplacer:~S
jctremblay
Maître des clésC’est pour exécuter dans InDesign ou Acrobat? Et qu’est-ce que tu veux faire avec l’espace trouver? La supprimer ou la remplacer par autre chose.
jctremblay
Maître des clésPour l’instant, j’utilise aussi ce même truc!! 🙂
jctremblay
Maître des clésParlant de convention des noms des champs.
Comment est-il possible de faire des copies d’un champ sur une page ex: «T1.1», «T1.2», «T1.3», «T1.4» et continuer la série «T1.5», «T1.6», «T1.7» etc. sur une seconde page? J’imagine que cela peut se faire seulement à l’aide d’un script.jctremblay
Maître des clésMerci Merlin, ce PDF n’est pas le mien. Il y a plusieurs dizaine de pages et des centaines de cases à cochés. Je n’avais pas le «goût» de tout les refaire.
jctremblay
Maître des clésMerci Merlin….
Si simple! Des fois je me complique trop la vie.
–
J’ai adapter car les case à contrôle, ne commence pas par ISHT- mais toujours après ce qui suit.
Le nombre des champs à contrôler peut aussi varier en quantité.
Est-ce que tu y vois quelque chose qui pourrait être mieux ?Ce qui donnes ceci:
function folCoche() {
var prefixe = event.target.name.split("-")[1];
var i = 1;
while (this.getField(prefixe + "-" + i)) {
var oFlds = this.getField(prefixe + "-" + i);
if (event.target.value != "Off") {
oFlds.display = display.visible;
} else {
oFlds.display = display.hidden;
oFlds.value = "Off";
}
i++;
}
}
Attachments:
You must be logged in to view attached files.jctremblay
Maître des clésMerlin à raison, cela ne se fait que dans un contexte d’autorisation (script d’application, console ou protection renforcée)
Voici une modification qui fonctionnera dans ce contexte.
function Save() {
var userName = app.response("Veuillez entrer votre nom :");
if (!userName || userName.trim() === "") {
app.alert("Le nom ne peut pas être vide.");
return;
}
var now = new Date();
var date = util.printd("yyyy.mm.dd-HH", now) + "h" + util.printd("MM", now);
var newFileName = date + "_organisation-" + userName + ".pdf";
var filePath = this.path.replace(this.documentFileName, "");
var newFullFilePath = filePath + newFileName;
try {
this.saveAs(newFullFilePath);
} catch (e) {
app.alert("Erreur, l'enregistrement suivant est impossible : " + newFullFilePath);
}
}
jctremblay
Maître des clésAbsolument…
for (var i = 0; i < this.numFields; i++) {
var fName = this.getNthFieldName(i);
var f = this.getField(fName);
f.textSize = "10";
}
jctremblay
Maître des clésbonjour,
…. car il faut placer ce script en local dans le répertoire JavaScript d’Acrobat (ou Reader) de chaque ordinateur.Oui, et c’est là le problème. Alternativement (à un script d’application), l’utilisateur peut ajouter un dossier/fichier dans ses préférences > section Protection (renforcée).
jctremblay
Maître des clésle script doit être inséré dans chaque champ modifiable, je pensais que c’était le PDF entier avec les champs modifiables.
Non. Tu l’execute dans la Console JavaScript
jctremblay
Maître des clésDe plus, le bout de code que tu as trouvé ne préserve pas le nom du document original. Et s’il y a déjà une date, elle est conservée et une deuxième ajouter. Celui-ci conserve le nom, et remplace la date si déjà présente.
var date = util.printd("yyyy.mm.dd", new Date());
var fileName = this.documentFileName;
fileName = fileName.replace(/^\d{4}\.\d{2}\.\d{2}-/, "");
var newFileName = date + "-" + fileName;
var filePath = this.path.replace(this.documentFileName, "");
var newFullFilePath = filePath + newFileName;
try {
this.saveAs(newFullFilePath);
} catch (e) {
app.alert("Erreur, l'enregistrement suivant est impossible : " + newFullFilePath); }jctremblay
Maître des clésIl est important de noter que l’exécution d’un tel script n’est pas permise sur un bouton.
jctremblay
Maître des clésC’est très pénible modifier des formulaires avec la nouvelle interface!
jctremblay
Maître des clésBebarth, j’avais oublié celui-ci.
En fait, j’ai remarquer que le fichier aT-ProprietesChamp.js n’est pas dans l’installateur d’AbracadabraTools2020 mais seulement dans la version 2019.
Pour ceux qui lisent, AbracadabraTools est un bijoux.
jctremblay
Maître des clésNon. Il n’y a pas de différence. Pour les polices standard on peut utiliser font. + l’abbréviation:
f.textFont = font.Helv;
ou le nom complet.
f.textFont = "Helvetica";
Je me sert de cette ligne pour savoir comment écrire le nom des polices non standard. Et il me retourne le nom complet.
this.getField("txt").textFont
Helveticajctremblay
Maître des clésOui, c’est brutal en effet. Ce que je n’aime pas, c’est que ce script va mettre des scripts «vide» partout. C’est inoffensif, mais ça m’énerve (comme les espaces en fin de paragraphes). 🙂
jctremblay
Maître des clésBonjour Oui et non. Acrobat a un comportement curieux, si on remplace un script par rien ça ne fonctionne pas toujours. Alors quand je veux “nettoyer” un document je remplace les scripts par un double-slash, ce n’est pas rien mais c’est comme rien :
C’est ce que je fais en ce moment aussi. C’est bête quand même un peu…
jctremblay
Maître des clésSi c’est pour l’aspect des champs (de tout les champs!), tu peut utiliser ceci:
for (var i = 0; i < this.numFields; i++) {
var fName = this.getNthFieldName(i);
var f = this.getField(fName);
f.textFont = "Courier";
}
-
Cette réponse a été modifiée le il y a 1 mois et 1 semaine par
jctremblay.
jctremblay
Maître des clésbonjour, Non, je ne crois pas qu’il soit possible d’exporter directement en .xlsx, mais par contre on peut exporter au format .csv ! On doit pouvoir ensuite convertir le format avec une macro VBA.
Merci pour la confirmation. Il y a plusieurs outils de conversion en ligne de CSV > EXCEL ou JSON > EXCEL. Puis les CSV peuvent se convertir à l’ouverture dans EXCEL. Donc ça va!
PS: Non, mais quelle famille de «Geek»… 🙂
jctremblay
Maître des clésMerci Bebarth, un détail important.
jctremblay
Maître des clésMichel, si c’est pour mettre en action dans tout les listes déroulantes, tu peux executer ça dans la Console.
for (var i = 0; i < this.numFields; i++) {
var f = this.getField(this.getNthFieldName(i));
if (f.type === "combobox") f.setAction("MouseUp", "fillDropdown();");
}jctremblay
Maître des clésOui, j’ai vu. Je dois tester. Merci!
J’aime bien la lisibilité qu’offre le résultat de https://jsstringconverter.bbody.io/jctremblay
Maître des clésMerci Merlin!
Exactement ce qu’il me fallait. Je me voyais mal faire ça manuellement sur plus de 600 lignes.jctremblay
Maître des clésJ’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
Maître des clésMerci 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
Maître des clésMerci 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
Maître des clésMerci @bebarth,
Cet exemple m’aide vraiment. J’ai que quelques petites questions que je t’ai envoyées par mail.jctremblay
Maître des clésLa commande Modèles de page se trouve à l’intérieur de l’outil Organiser les pages dans le menu Autres.
jctremblay
Maître des clésLe code dans un PDF pour faciliter la lecture/copier.
Attachments:
You must be logged in to view attached files.jctremblay
Maître des clésEn 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
Maître des clés@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
Maître des clésMP envoyé!
jctremblay
Maître des clésLe 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
Maître des clésJ’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 4 mois et 1 semaine par
jctremblay.
Attachments:
You must be logged in to view attached files.jctremblay
Maître des clés@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
Maître des clésPour 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
Maître des clésParole de sage de Merlin ici…
jctremblay
Maître des clésIl 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
Maître des clésMerci!
J’oublie toujours d’aller voir cette documentation officielle.jctremblay
Maître des clésBoujour 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
Maître des clésCela ne semble pas être le cas. Regarde le document joint.
Attachments:
You must be logged in to view attached files.jctremblay
Maître des clésDommage!
jctremblay
Maître des clésJ’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
Maître des clés@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
Maître des clésEn 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
Maître des clésTu 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
Maître des clésUne 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
Maître des clésUne 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
Maître des clés… et on aime ça le «frotter» un peu. Il en sort toujours quelque chose d’épatant! 😀
jctremblay
Maître des clés@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
Maître des clésJe suis complètement débordé avec tout le TAF urgent à terminé! C’est un document d’expérimentation, donc pas d’urgence. Merci!
jctremblay
Maître des clésÇ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
Maître des clésJe 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
Maître des clésÇa plus de sens… 🙂 Merci!
jctremblay
Maître des clésSi 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
Maître des clésMais 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
Maître des clésDonc, 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
Maître des clésJe 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
Maître des clésAh! Maintenant je saisis… 🙂
jctremblay
Maître des clésJuste 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
Maître des clésC’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
Maître des clésJ’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 7 mois par
jctremblay.
-
Cette réponse a été modifiée le il y a 7 mois par
jctremblay.
Attachments:
You must be logged in to view attached files.jctremblay
Maître des clésUne 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
Maître des clésTu 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
Maître des clésBonjour 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
Maître des clésOk…
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
Maître des clésPour 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
Maître des clésMerci encore une fois!
6 septembre 2024 à 19:19 en réponse à : Remplir les champs d’une 2e liste déroulante dynamiquement #74821jctremblay
Maître des clésMerci 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
Maître des clésMerci 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
Maître des clésBonjour 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
Maître des clésJ’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
Maître des clésLe 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
Maître des clésWaouh, 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
Maître des clésMerci 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
Maître des clésOn 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
Maître des clésDésolé je suis dans le cap corse sans pratiquement aucun réseau…
Profite…
jctremblay
Maître des clésIl 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 8 mois et 1 semaine par
jctremblay.
jctremblay
Maître des clésMerci Merlin pour le contexte de la chose… On vas mettre des caractères sans accents! 🙁
jctremblay
Maître des clésJe l’ai testé avec Acrobat 11, et j’ai le même résultat. J’ai donc rêvé. 🙂
jctremblay
Maître des clésEst-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
Maître des clésC’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
Maître des clésMerci mon cher bebarth!
J’était bien conscience que mon code n’était pas optimale. 😀Je vais comparer.
Merci 1000xjctremblay
Maître des clésThom 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
Maître des clésC’est rassurant… Je ne suis donc pas fou.
J’ai publié sur la «Community Adobe». On verra ce que nos amis nous diront.jctremblay
Maître des clésEn 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
Maître des clésPour 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
Maître des clésC’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
Maître des clésUn 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
Maître des clésLes 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
Maître des clésJe 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
Maître des clésMes 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
Maître des clésThis 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 7 mois par
jctremblay.
-
Cette réponse a été modifiée le il y a 1 année et 7 mois par
jctremblay.
jctremblay
Maître des clésMerci!
jctremblay
Maître des clésWow! 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
Maître des clésBon… 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. -
Cette réponse a été modifiée le il y a 3 jours et 11 heures par
-
AuteurRéponses