Toutes mes réponses sur les forums
-
AuteurRéponses
-
Merlin
Maître des clésbebarth tu as fait un vrai bon boulot qui devrait faire pâlir d’envie ce qu’on trouve sur le forum d’Adobe et d’autres. Je ne suis pas certain non plus que Chat GPT et consorts puisse générer un tel code.
Mais je crois que la propagation sur une autre page est un luxe car ce n’est pas utilisable avec Reader (qui ne peut pas ajouter de page).
À mon avis si ça ne rentre pas dans une seule page il faudrait soit activer le défilement dans le champ, soit prévenir l’utilisateur via une alerte, soit faire les deux.
Bravo en tout cas.
Merlin
Maître des clésJ’avais essayé de le placer en script de Validation, de Format, etc. dans le champ concerné mais ça fonctionne effectivement bien mieux depuis la Console !
Par-contre même depuis la Console il n’ajoute pas de page, mais sans retourner de message d’erreur, et le message de résultat précise bien que tout le texte n’est pas affiché.
Je vais tester plus avant.
Merlin
Maître des clésC’est étrange car avec mes Mac je peux ouvrir les fichiers .js attachés !
Je suppose que tu as débloqué les paramètres de Sécurite et de Sécurité avancée ?
Merlin
Maître des clésJ’ai essayé avec les deux et ça ne fonctionne pas, le champ ne se redimensionne pas.
J’ai placé le script en Format perso et en Validation.
Et avec ton texte d’origine qui déborde largement ça retourne ce message d’erreur :
NotAllowedError: Security settings prevent access to this property or method.
Doc.newPage:35:Field champTexte:FormatVoudrais tu donner raison à ma première réponse ?
😉
Merlin
Maître des clésbebarth : on ne peut ni lire ni extraire la pièce jointe, c’est un fichier .js !
Merlin
Maître des clésSalut bebarth
Ça ne fonctionne pas :
TypeError: lesMots.replace is not a function
21:Field:ValidatePar ailleurs je n’ai jamais compris pourquoi Acrobat autorise l’ajout des pièces jointes .zip ou .js tout en interdisant leur extraction. À croire que ses développeurs viennent tous de l’Absurdistan.
😉
Merlin
Maître des clésBonjour,
la réponse courte est non, mais on peut facilement faire l’inverse en utilisant le corps de texte automatique : c’est le texte qui s’ajuste au champ.
La réponse longue est oui, il faut compter le nombre de caractères saisis en temps réel et aussi ceux qui sont supprimés. Ça requiert donc une usine à gaz en JavaScript assez longue à développer et ça impose d’utiliser une police à chasse fixe (Courier), et dont le corps ne doit pas varier.
Mais comme le script ne peut servir qu’à étendre/réduire les dimensions du champ ça n’a qu’un intérêt très limité dans un document PDF, dont la dimension des pages est forcément fixe, puisqu’il faut de toute façon prévoir de la place libre pour agrandir le champ et prévoir comment ce sera le moins moche possible en cas de réduction.
Par opposition aux pages à redimensionnement dynamique, comme en HTML.Merlin
Maître des clésAcrobat m’a juste prévenu du fait que les champs ayant le même nom verraient leur contenu fusionner, ce qui est normal et attendu, mais sans dire s’il y en a ni combien, bien entendu.
Sinon pour pouvoir te répondre il faudrait savoir ce que disaient ces messages.
Merlin
Maître des clésBonjour
Aucun problème pour moi, ça a marché comme sur des roulettes.
Le fichier complet est là : https://shared-assets.adobe.com/link/417b86a3-e9c8-4d8a-6b11-54e3832f4113
Merlin
Maître des clésBonjour
Il faut utiliser la méthode test() , le(s) caractère(s) à chercher se place entre deux slash :
// MISE EN VARIABLE
str = this.getField("num").value;
// SI LA VARIABLE CONTIENT "-"
if (/-/.test(str) {
// code à exécuter
}
Merlin
Maître des clésMerci, moi ça va très bien tant qu’on ne me parle pas de trigonométrie et autres math.machin().
😉
Bonne année.
Merlin
Maître des clésIl y a deux façon de réduire le nombre de champs qui effectuent des calculs et donc le temps de latence :
- Placer le script en script de Validation, ainsi seul le champ actif est calculé. Mais ce n’est pas toujours possible.
- Placer tous les scripts de calcul dans un seul champ, éventuellement masqué, car un seul long script de calcul déclenché par un seul champ s’exécute beaucoup plus vite que plusieurs petits calculs déclenchés par plusieurs champs.
10 janvier 2024 à 15:56 en réponse à : Faire apparaitre une zone texte lorsque plusieurs cases sont cochées #73783Merlin
Maître des clésBonjour et bonne année
Ça ne fonctionne pas parce-que JavaScript est sensible à la casse : text4 et Text4 sont deux noms différents.
Voici une version simplifiée :
function updateTextFieldVisibility() {
if (this.getField(“Check Box1”).value != "Off" && this.getField(“Check Box2”).value != "Off" && this.getField(“Check Box3”).value != "Off") {
this.getField(“Text4”).display = display.visible;}
else {this.getField(“Text4”).display = display.hidden;}
}
Merlin
Maître des clésC’est effectivement un bug qui a affecté une version d’Acrobat Pro cette année ==> mise à jour !
La version actuelle est celle-ci (voir capture).
Attachments:
You must be logged in to view attached files.Merlin
Maître des clés“Mais quand j’enregistre le fichier, celle ci n’est pas incorporée dans le pdf…”
Comment enregistres tu le fichier, et avec quel logiciel ?
Merlin
Maître des clésPS : bonne année à tous, ce sera mon dernier message pour 2023.
Merlin
Maître des clésC’est parce-que JavaScript est sensible à la casse, tes noms de champs ont une lettre capitale mais pas dans le script de calcul.
Poids et poids sont deux mots différents.
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésBonjour et bienvenue
Je viens de vérifier dans le forum, il y a bien une question concernant l’IMC mais il n’y a pas de réponse.
Donc le mieux serait que tu partages (tout ou partie de) ton document pour qu’on voie ce qui lui manque.
Merlin
Maître des clésLa latence c’est parce-qu’il faut attendre que la champ actif soit désactivé pour que le calcul s’effectue.
Pour éviter ça il faudrait placer un script (de validation) différent dans chacun des 2 x 18 champs concernés…
Merlin
Maître des clésIl faut ajouter un champ, ou utiliser un champ existant, et lui placer ce script en Script de calcul. Je ne peux pas tester car ces champs sont eux-mêmes calculés mais ça devrait être OK :
for (var i=1; i < 19; i++) {
this.getField("DéperditionsRow" +i).textColor = color.black;
this.getField("PDTMRow" +i).textColor = color.black;
if (Number(this.getField("PDTMRow" +i).value) < Number(this.getField("DéperditionsRow" +i).value)) {
this.getField("PDTMRow" +i).textColor = color.red;
this.getField("DéperditionsRow" +i).textColor = color.red;
}
}
Fait attention qu’il manque l’accent dans le nom des deux premiers champs “DéperditionsRow“, c’est à corriger avant d’exécuter le script.
Merlin
Maître des clésBonjour et bonnes fêtes
Il faut ajouter ce script en script de format personnalisé dans le menu Exemple de coefficient :
for (var i=1; i < 19; i++) {
this.getField("G" + i).value = event.value;
}
Tu devrais surveiller la Console JS, elle affiche à répétition que “f is null”, ce qui veut dire en clair qu’il y a un problème de calcul quelque part, a priori un champ manquant.
Ce n’est pas grave en soi mais s’il y a d’autres calculs dépendants qui s’enchainent à partir d’une erreur ça pourrait l’être.
Attachments:
You must be logged in to view attached files.19 décembre 2023 à 15:22 en réponse à : Remplissage automatique de champ de texte avec un fichier csv #73714Merlin
Maître des clésBonjour
C’est un sujet qui a déjà été traité, commences par là et n’hésite pas à revenir poser des questions si ça coince :
Exemple :
https://www.abracadabrapdf.net/wp-content/uploads/2022/01/Ejemplo_BB1-archivo-csv.pdf
Sujets :
Liste et champs multiple provenant d’un fichier CSV en pièce jointe
Merlin
Maître des clésMoi je suis largué depuis longtemps !
Merlin
Maître des clésAstucieux.
J’étais parti sur un truc plus complexe mais du coup je ne le finirai pas.
😉
Merlin
Maître des clés“Lien PDF à améliorer”
Désolé, j’ai raté le coche.
Merlin
Maître des clésDavid : j’ai modifié ton “nom apparent” qui était ton adresse email, ça t’évitera certainement beaucoup de spams.
😉
Merlin
Maître des clésBonjour
La seule vraie protection sans mot de passe c’est la signature numérique : plus rien ne peut être modifié.
Et si on arrivait quand même à modifier quelque chose ça invaliderait la signature.
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésBravo !
Je me doutais de quelque chose comme ça mais je n’ai pas trouvé où.
Merlin
Maître des clés“Dommage que que le site ne possède pas un espace ou l’on peut mettre nos création quel qu’en soit la taille”
C’est bien la première fois que cette demande est faite ! Merci.
Dans le forum la taille des pièces jointes est limitée mais il existe d’autres solutions, voir :
Merlin
Maître des clésBonjour
Oui, le code existe mais il ne fonctionne plus depuis Acrobat 6 et il ne fonctionnait pas dans les autres logiciels car il faisait appel à l’article de menu du menu Fichier : Copier.
app.execMenuItem("Copy");
Et de toute façon, avant Acrobat 6 on pouvait copier mais il était quasiment impossible de coller, sécurité oblige. Il fallait utiliser un script d’application et connaître la cible d’avance.
Merlin
Maître des clésBonjour
Ça fait 3 messages dans 2 sujets où tu poses la même question : https://www.abracadabrapdf.net/forums/topic/formule-trigonometrie/
C’est inutile, je ferme ce sujet.
Merlin
Maître des clés“je ne sais pas pourquoi (mais je vais essayer de me renseigner) Math.acosh() ne fonctionne pas en Acrobat JavaScript…”
Certainement parce-que le PDF ne supporte qu’une ancienne version de ECMAScript, c’est aussi pour ça qu’on ne peut pas utiliser let.
Merlin
Maître des clésBonjour
L’extrait en question est trop lourd pour le forum.
Essaie ça : https://www.abracadabrapdf.net/forums/topic/envoyer-partager-poster-une-piece-jointe-volumineuse/
Merlin
Maître des clésBonjour
Ce n’est pas les calculs qui sont complexes, c’est la quantité de tarifs possibles à prendre en compte.
Je pourrais te donner une réponse avec une méthode mais ce ne serait pas vraiment une “bonne” réponse.
Je vais donc d’abord attendre que quelqu’un qui s’y connaisse en array te propose quelque chose de mieux.
En attendant j’attire ton attention sur une bonne idée que tu as eu mais que tu n’exploites pas à fond :
Le champ “total.parutions” calcule le total des champs nommés “mois.quelquechose“.
Comme tu as eu la bonne idée de mettre un point dans leur nom et donc de créer une relation parent-enfants il est inutile de sélectionner tous les champs dont tu veux additionner la valeur, il suffit de sélectionner le nom du champ parent (voir capture).
Quand il n’y a que 4 champs à additionner ça passe inaperçu mais quand il y en a 40 ou 400 ce n’est pas le même plaisir.
Voir l’article qui explique tout (2e partie) : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/duplication-rapide-de-champs-de-formulaire/
Attachments:
You must be logged in to view attached files.Merlin
Maître des clés“Dans ce cas, ces 2 signes sont redondants, mais ce n’est pas grave de les mettre ensemble.”
Pas exactement.
Le + sert à détecter une ou plusieurs espaces consécutives.
Le g sert à détecter plusieurs séquences de une ou plusieurs espaces consécutives. Par exemple s’il y a plusieurs mots dans la chaîne de caractères testée ça permet de détecter toutes les espaces entre tous les mots.
Merlin
Maître des clés“replace(/\s+/g,””) On supprime tous les espaces. → quelle est le rôle de /, celui de \s celui de +/g…”
C’est du GREP.
\s signifie : n’importe quelle espace (en typographie l’espace est féminin).
+ signifie : présent une ou plusieurs fois.
Les deux slashes servent à délimiter le début et la fin de la requête (regex).
g signifie qu’on veut une recherche globale, c’est à dire une recherche qui ne s’arrête pas à la première occurrence trouvée.
Merlin
Maître des clésBonjour
A priori ce script fait le job.
Quelle est ta question ?
Merlin
Maître des clésBonjour
C’est l’utilisateur qui est censé remplir ces champs.
Sinon on peut les rendre invisible et leur attribuer une valeur par défaut s’ils doivent toujours contenir la même valeur.
16 novembre 2023 à 10:15 en réponse à : Champs adresses remplis après sélection nom dans liste #73531Merlin
Maître des clés“j’ai un message d’erreur car le format du champ 43 est nombre monétaire”
Bonjour
Par principe un champ qui est en lecture seule et qui est rempli programmatiquement ne devrait pas avoir de “Format”.
En général c’est contre-productif, comme dans ce cas.
Merlin
Maître des clésBonjour
Le seul moyen de forcer l’ouverture dans un nouvel onglet/fenêtre c’est d’utiliser JavaScript mais les logiciels utilisés par ton client ne supportent pas JavaScript dans les PDF.
Donc la réponse est non.
Merlin
Maître des clésEt puis surtout tu supprimes ça, c’est un processus du 20e siècle.
🙂
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésUn dessin vaut mieux qu’un long discours 😉
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésChapeau bas !
Merlin
Maître des clésBonjour
Puisqu’il est question d’IMAP et de POP je suppose que tu veux envoyer le formulaire par email.
Il n’y a pas besoin de script, tout ce qu’il faut savoir c’est qu’il faut ajouter : “mailto:” devant l’adresse email.
mailto:exemple@exemple.fr
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésBonjour
Désolé mais les maths et moi…
Merlin
Maître des clésBonjour
Ceci fonctionne de zéro à 20, mais je sais pas intégrer les chiffres négatifs :
var nNombreAleatoire = Math.ceil(20 * Math.random());
Merlin
Maître des clésBonjour
Tu devrais t’intéresser à la “Convention de dénomination des champs de formulaire”, c’est typiquement le cas dans lequel ça simplifie les choses.
Merlin
Maître des clésBonjour
Je l’écrirais plutôt comme ça :
var vC2 = this.getField("NB.2").valueAsString;
var vC3 = this.getField("NB.3").valueAsString;
if (RepUser2 == (vC2 + ("×" || "*" || " × " || " * ") + vC3) || (vC3 + ("×" || "*" || " × " || " * ") + vC2) || (Number(vC2) * Number(vC3))) {}
24 octobre 2023 à 14:31 en réponse à : La fonction “joindre un fichier” avec Reader ne fonctionne pas #73390Merlin
Maître des clésPartant du principe que ce sont des annotations il faut utiliser la fonction “destroy”, dont j’aime le nom très punk.
Ci-joint.
// Remove all "FileAttachment" annotations on page 1.
var annots = this.getAnnots({ nPage:0 });
for (var j = 0; j < annots.length; j++)
if (annots[j].type == "FileAttachment") annots[j].destroy();
PS : J’ai changé l’indice i en j toujours pour le même problème d’affichage des i entre crochets !
@+-
Cette réponse a été modifiée le il y a 1 année et 6 mois par
bebarth.
Attachments:
You must be logged in to view attached files.Merlin
Maître des clés“je pense que lorsqu’on programme régulièrement c’est pas mal de télécharger une version pdf.”
Avant j’avais en permanence le document acrobatsdk_jsapiref.pdf ouvert dans Acrobat Reader pendant que je travaillais avec Acrobat Pro.
Maintenant acrobatsdk_jsapiref.pdf est ouvert en permanence dans Foxit Reader.
Merlin
Maître des clésAttention, j’ai modifié le script que j’ai posté !
Merlin
Maître des clésA priori l’utilisateur lambda ne voit pas les messages de la console mais pour bien faire les choses il faut protéger le script pour qu’il ne s’exécute que s’il y a des annotations :
this.syncAnnotScan();
var annots = this.getAnnots({ nPage:0 });
for (var j = 0; j < annots.length; j++)
if (annots != null && annots[j].type == "FreeText") {annots[j].destroy();}
Pourquoi ai-je ajouté syncAnnotScan ?
Parce-que c’est le moyen de s’assurer de ne rater aucune annotation, voir :
https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/doc.html#syncannotscan
Merlin
Maître des clésBonjour
Oui c’est possible mais ça requiert de bonnes connaissances en JavaScript.
Fais une recherche dans le forum sur “liste mère fille”, tu trouveras plusieurs exemples et explications.
8 octobre 2023 à 15:14 en réponse à : Position du champ et sa couleur de texte suivant liste déroulante #73357Merlin
Maître des clésBonjour
Au plus simple : dans InDesign sur chacun des calques tu ajoutes un champ nommé “montant” auquel tu attribues la position et la couleur voulue (Acrobat ne sait pas lier un champ à un calque).
Comme dans ton document il ne peut y avoir qu’un seul calque affiché il n’y aura donc qu’un seul champ affiché à l’instant T.
Il faut juste qu’ils aient tous exactement le même nom, pour partager leur valeur et leur calcul.
Sinon c’est faisable avec JavaScript, avec un ou six champs, mais c’est plus laborieux.
3 octobre 2023 à 09:09 en réponse à : Enregistrer la visibilité des Calques OGC apres le remplissage du formulaire #73342Merlin
Maître des clés👍
Merlin
Maître des clés👍
Merlin
Maître des clésLe lien vers le sujet sur Adobe Community :
Merlin
Maître des clés“The « item_id » in a dialog object must be 4 and only 4 characters long.”
Qui a décidé ça ? Laissez le moi !
Merlin
Maître des clésBonjour
Les variables “text1” 2 et 3 sont toujours “undefined”.
J’ai placé dans le script plusieurs console.println comme celui-ci :
console.println("text1= " + text1);
et la réponse est toujours la même :
text1= undefined
Mais je ne comprend pas pourquoi.
Merlin
Maître des clésOn peut simplifier le script ainsi :
var aRay1 = [];
var aRay2 = [];
var aRay3 = [];
var aRay4 = [];
var aRay5 = [];
for (var i=0; i<27; i++){
if (this.getField("C.1."+i).value != "Off") {aRay1.push(this.getField("C.1."+i).valueAsString);}
if (this.getField("C.2."+i).value != "Off") {aRay2.push(this.getField("C.2."+i).valueAsString);}
if (this.getField("C.3."+i).value != "Off") {aRay3.push(this.getField("C.3."+i).valueAsString);}
if (this.getField("C.4."+i).value != "Off") {aRay4.push(this.getField("C.4."+i).valueAsString);}
if (this.getField("C.5."+i).value != "Off") {aRay5.push(this.getField("C.5."+i).valueAsString);}
}
this.getField("Se1").value = "SE1 = {" + aRay1.join(", ") + "}";
this.getField("Se2").value = "SE2 = {" + aRay2.join(", ") + "}";
this.getField("Se3").value = "SE3 = {" + aRay3.join(", ") + "}";
this.getField("Se4").value = "SE4 = {" + aRay4.join(", ") + "}";
this.getField("Se5").value = "SE5 = {" + aRay5.join(", ") + "}";
Merlin
Maître des clésBonjour
En fait il faut que les coches aient leur numéro d’ordre comme valeur d’exportation, ensuite tout est plus simple.
J’ai ajouté un champ “calcul”, tout est dedans (ci-joint).
var aRay1 = [];
var aRay2 = [];
var aRay3 = [];
var aRay4 = [];
var aRay5 = [];
for (var i=0; i<27; i++){
if (this.getField("C.1."+i).value != "Off") {aRay1.push(this.getField("C.1."+i).valueAsString);}
if (this.getField("C.2."+i).value != "Off") {aRay2.push(this.getField("C.2."+i).valueAsString);}
if (this.getField("C.3."+i).value != "Off") {aRay3.push(this.getField("C.3."+i).valueAsString);}
if (this.getField("C.4."+i).value != "Off") {aRay4.push(this.getField("C.4."+i).valueAsString);}
if (this.getField("C.5."+i).value != "Off") {aRay5.push(this.getField("C.5."+i).valueAsString);}
}
if (aRay1.length != 0){
this.getField("Se1").value = "SE1 = {" + aRay1.join(", ") + "}";
}
else {this.getField("Se1").value = "SE1 =";}
if (aRay2.length != 0){
this.getField("Se2").value = "SE2 = {" + aRay2.join(", ") + "}";
}
else {this.getField("Se2").value = "SE2 =";}
if (aRay3.length != 0){
this.getField("Se3").value = "SE3 = {" + aRay3.join(", ") + "}";
}
else {this.getField("Se3").value = "SE3 =";}
if (aRay4.length != 0){
this.getField("Se4").value = "SE4 = {" + aRay4.join(", ") + "}";
}
else {this.getField("Se4").value = "SE4 =";}
if (aRay5.length != 0){
this.getField("Se5").value = "SE5 = {" + aRay5.join(", ") + "}";
}
else {this.getField("Se5").value = "SE5 =";}
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésC’est très étrange…
Merlin
Maître des clésChez moi ça ne fonctionne pas car par exemple avec le bouton page 2: prefix vaut “P1”, car
var pageIndex = this.pageNum;
Et parce-que le compte de pageNum commence à zéro il faut ajouter +1
Ce qui donne pour le bouton de la page 2 :
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 +1;
var prefix = "P" + pageIndex;
console.println("prefix: " + prefix); // retour console
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;
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésJe ne comprend pas si la numérotation de ces trois champs doit être continue dans tout le document ou bien est-ce qu’elle doit repartir à 1 dans chaque section/couleur ?
L’utilisateur a-t-il moyen de supprimer les pages dupliquées et si oui comment ? Non, sinon qu’avec le navigateur de page
Est-ce que ça fonctionne dans Acrobat Reader ?
(Je ne peux pas tester)Merlin
Maître des clésBonjour JC
En fait il me manque des éléments pour pouvoir te répondre.
Les pages à dupliquer sont elles toutes identiques ou bien ont elles un contenu différent ?
L’utilisateur a-t-il moyen de supprimer les pages dupliquées et si oui comment ?
Une autre piste serait d’avoir les 12 pages en templates, chacune ayant déjà ses numéros, ses champs et son contenu figé. Ensuite il ne resterait plus qu’à les dupliquer une par une sans renommage des champs.
Merlin
Maître des clésC’est effectivement curieux, mais je ne suis pas l’auteur de ce script et je ne comprend pas comment il fonctionne, donc avant de l’exécuter j’y ajouterai une commande pour préalablement masquer tous les calques.
if (event.willCommit) {
var ocgArray1 = this.getOCGs();
for (var i=0; i < ocgArray1.length; i++) {ocgArray1.state = false;}
this.getOCGs().some(function(a){return a.state = (a.name==event.value);});
}
Et pour bien faire il faudrait soit supprimer l’intitulé “Choisir”, soit réafficher le calque 6 par défaut pour éviter d’avoir une page blanche.
6 septembre 2023 à 16:50 en réponse à : La fonction “joindre un fichier” avec Reader ne fonctionne pas #73215Merlin
Maître des clésEst-possible avec le bouton RAZ de supprimer aussi le document joint ?
La réponse est non mais tu trouveras comment faire et toutes les réponses à tes questions dans ce (long) sujet :
5 septembre 2023 à 15:30 en réponse à : La fonction “joindre un fichier” avec Reader ne fonctionne pas #73209Merlin
Maître des clésAcrobat Reader ne gère que les pièces jointes de type annotation qui sont nécessairement attachées à une page et à une icône (on peut placer l’icône en dehors de la page).
Contrairement aux pièces jointes gérées au niveau du document.
On accède à ces deux types de pièces jointes indistinctement dans le panneau Pièces Jointes.
5 septembre 2023 à 15:24 en réponse à : La fonction “joindre un fichier” avec Reader ne fonctionne pas #73208Merlin
Maître des clésExemple :
this.addAnnot({
page: 0, // numéro de page -1
type: "FileAttachment", // type de l'annotation
author: "abracadabraPDF.net", // auteur
contents: "Double-clic pour ouvrir la pi\u00E8ce jointe", // infobulle
attachIcon: "PushPin", // type d'icône
point: [350,590], // position sur la page
strokeColor: color.red, // couleur
});
5 septembre 2023 à 13:51 en réponse à : La fonction “joindre un fichier” avec Reader ne fonctionne pas #73204Merlin
Maître des clésBonjour
Ton script utilise
this.importDataObject
qui ne fonctionne qu’avec Acrobat Pro (ou Standard).Pour que ça fonctionne dans Acrobat Reader il faut utiliser
this.addAnnot
Voir : https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/doc.html#addannot
Merlin
Maître des clés👍
Merlin
Maître des clésBonjour
- Le document “Verso” contient 9 pages identiques, plus une page (la première) qui est légèrement différente des 9 suivantes.
Quelle(s) page(s) faut il importer ?
- Est-ce que ces conditions sont bien respectées ?
Nommer la page à ajouter : verso
Ranger les fiches + verso dans le même répertoire
Ouvrir verso
- Par ailleurs s’agissant d’une opération aussi simple que l’ajout d’une page dans un document l’utilisation de l’Assistant Action me parait contre-productive car au final c’est plus long et ça demande plus de clics que d’importer simplement une page depuis le panneau des pages. (Voir capture ci-joint)
Sauf, bien entendu, si vous utilisez cette action sur un lot de plusieurs documents. Est-ce le cas ?
Attachments:
You must be logged in to view attached files.1 septembre 2023 à 14:25 en réponse à : Script de visibilité de calques et champs de formulaires #73186Merlin
Maître des clés👍
Merlin
Maître des clésÇa c’est une question pour bebarth, il me semble bien qu’il a déjà fait quelque de ce genre par le passé.
Merlin
Maître des clésQuand on clique sur le bouton Export la console renvoie une erreur dans la dernière (et 2e) boucle “for” du script contenu dans ce bouton :
TypeError: f is null
22:Field:Mouse Up
C’est ce qui doit empêcher la fonction GestionCalques(), qui vient ensuite, de s’exécuter. Parce-qu’une erreur bloque le script, ce qui suit ne s’exécute pas.
Dans ce script tu devrais remplacer :
for (var i = 0; i < 25; i++) {
var fname = this.getNthFieldName(i);
var f = this.getField(fname);
f.readonly = true;
};Par :
for (var i=0; i<this.numFields; i++) {
var oFld = this.getField(this.getNthFieldName(i));
oFld.readonly = true;
}
Merlin
Maître des clésPas forcément, les pièces jointes ont des droits que n’ont pas les documents en ligne.
À tester !
Merlin
Maître des clésBonjour JC
La réponse est non, j’ai tout essayé, même en débloquant toutes les protections (https://helpx.adobe.com/fr/acrobat/using/allow-or-block-links-internet.html) ça ne fonctionne pas. Acrobat renvoie toujours les mêmes messages.
NotAllowedError: Les paramètres de protection interdisent l’accès à cette propriété ou à cette méthode.
et l’alerte ci-joint.
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésTout est bien, sauf le calque de boutons.
Quand on masque tous les calques du document on voit tous les champs de formulaires qui ne sont pas attachés à un calque, dont les boutons (voir ci-joint).
Donc il faut soit refaire le document dans InDesign en plaçant soigneusement les champs boutons sur le calque approprié (Acrobat ne sait pas gérer ça), soit gérer la visibilité des champs boutons en plus de celle du calque.
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésAussi, est ce que vous avez un tips pour tester des documents avec Reader ? Car comme j’ai Creative Cloud et Acrobat Pro, Adobe ne me laisse pas installer Reader…
Oui, comme je suis dans le même cas Adobe m’a forcé à installer Foxit Reader qui est son principal concurrent et j’ai découvert un excellent logiciel.
Et comme un bonheur ne vient jamais seul, Foxit Reader force à être plus soigneux dans l’utilisation des scripts car il ne supporte pas les fonctions JavaScript obsolètes. Les documents y gagnent donc beaucoup en pérennité.
😎
Merlin
Maître des clésPour impression numérique classique dans une imprimerie, généralement ils recommandent d’utiliser un profil CMJN pour éviter des couleurs trop flash quand on doit convertir le profil RVB en CMJN.
C’est surtout pour éviter les réclamations des clients déçus qui ont envoyé des documents avec des couleurs RVB bien flashy, mais je suppose que ce n’est pas le cas de ce document. 😉
Tout est bien, sauf le calque de boutons.
Là il faudrait que tu partages (tout ou partie de) ce document pour qu’on puisse juger sur pièce.
Merlin
Maître des clésPour quel type d’impression, Offset ou imprimante ?
En tout cas ça fait longtemps que les documents à imprimer sont conçus et exportés en RVB, ça permet d’exploiter au mieux le rendu colorimétrique de chaque procédé d’impression.
Merlin
Maître des clésAstuce :
Si les champs de formulaire sont créés dans InDesign sur les calques correspondants il s’affichent et se masquent en même temps que le calque auquel ils sont attachés, sauf…
Sauf si on a eu le malheur de les déplacer ou de les couper/copier/coller dans Acrobat Pro, ce qui les “détache” de leur calque. Mais on peut modifier leurs propriétés sans problème avec Acrobat Pro, ils restent attachés à leur calque tant qu’on ne les déplace pas.
Merlin
Maître des clésBonjour
Depuis InDesign il faut exporter en PDF interactif, pas en PDF impression.
Le “dossier” de calques n’a aucune importance, ça ne change pas leur comportement ni les scripts à utiliser. On peut cependant le supprimer en utilisant cet utilitaire gratuit : https://www.uvsar.com/projects/acrobat/indesignfixups/
Pour masquer le calque Grilles et repères (en Français) il faut éditer le script de cet utilitaire et y remplacer “Guides and Grids” par “Grilles et repères“. Mais ça n’a pas d’importance non plus, ce calque n’est pas gênant.
Ton script ne fonctionne pas sur Reader car cette ligne :
docOCGs.initState = true;
provoque une erreur et donc l’arrêt de l’exécution du script, parce-que Acrobat Reader ne peut pas modifier l’état initial des calques (initState). Il ne permet que de les afficher/masquer (state) temporairement.Ce qui signifie qu’ils reviennent systématiquement à leur état initial à chaque réouverture du document. Pour remédier à cet inconvénient il faut utiliser le script proposé dans ce sujet : https://www.abracadabrapdf.net/forums/topic/enregistrer-la-visibilite-des-calques-ogc-apres-le-remplissage-du-formulaire/
Merlin
Maître des clés👍
Merlin
Maître des clésQuand il y a plusieurs champs ayant le même nom il faut s’adresser au “widget” et non pas au champ, qui dans ce cas représente plusieurs widgets.
Dans la liste des champs du panneau des outils de formulaire les widgets apparaissent avec leur nom de champ, suivi d’un dièse et suivi d’un numéro d’ordre. Ce numéro d’ordre est attribué lors de la création du widget et n’est pas modifiable.
Dans la capture ci-joint on ne voit pas le widget numéro zéro car il est masqué puisque la page modèle sur laquelle il se trouve est masquée. Si on affiche la page modèle les deux widgets sont visibles dans la liste.
La particularité des widgets c’est qu’on ne peut pas s’adresser à eux directement, il faut impérativement passer par une variable. Sachant aussi que dans les scripts il faut remplacer le dièse par un point.
Ce qui pour tes boutons nous donne les scripts suivants :
var f = this.getField("CH1.1");
f.setFocus();
et
var f = this.getField("CH2.1");
f.setFocus();
Attachments:
You must be logged in to view attached files.Merlin
Maître des clés“J’en conclu que les destinations sont perdues dès que l’on masque ou affiche une page modèle”
Oui, c’est bien ça.
“mais y a t-il donc un moyen de contourner ou de trouver une autre solution à ce problème ?”
Il faut utiliser les numéros de page, ou sinon pour un pointage plus précis on peut envoyer le focus vers un champ, éventuellement masqué.
this.getField("NOMDUCHAMPCIBLE").setFocus();
Merlin
Maître des clésBonjour
Mac ou Windows ?
24 août 2023 à 13:01 en réponse à : Enregistrer la visibilité des Calques OGC apres le remplissage du formulaire #73148Merlin
Maître des clésPS : le script ci-dessus utilise un champ texte (masqué) nommé “CalqCode“, à placer n’importe où dans le document.
24 août 2023 à 12:59 en réponse à : Enregistrer la visibilité des Calques OGC apres le remplissage du formulaire #73147Merlin
Maître des clésBonjour
Avec Reader on ne peut pas aplatir ni modifier l’état de base (affiché/masqué) des calques.
Il n’y a que deux solutions :
- la signature numérique, qui fige le document.
- utiliser JavaScript pour enregistrer l’état des calques à la fermeture et le rétablir à la réouverture du document.
Exemple de script, la fonction GestionCalques() doit être utilisée lors de chaque modification de l’état des calques, ou bien en Action “Quand le document sera enregistré” (Document will save), et la fonction Ouverture() doit être exécutée à chaque ouverture du document :
function GestionCalques() {
ocg = this.getOCGs(this.pageNum);
indexCalque = 0;
code = "";
while (indexCalque < this.ocg.length)
{
if (ocg[indexCalque].state)
{
code=code + "1";
}
else
{
code=code + "0";
}
indexCalque = indexCalque + 1;
}
this.getField("CalqCode").value = code;
}
function Ouverture() {
ocg = this.getOCGs(this.pageNum);
code = this.getField("CalqCode").valueAsString;
indexCalque = 0;
while (indexCalque<this.ocg.length)
{
statut = code.substring(indexCalque,(indexCalque+1));
console.println("Rang " + indexCalque + " statut :" + statut)
if (statut==1)
{
ocg[indexCalque].state=true;
}
else
{
ocg[indexCalque].state=false;
}
indexCalque = indexCalque+1;
}
}
Merlin
Maître des clésBonjour
Il faut exporter les données du ficher Réponses au format CSV, reconnu par tous les tableurs, et faire le traitement des données dans un tableur.
“Autre question en rapport, dans le fichier réponses, je peux déplacer les colonnes qui m’intéresse, mais même en enregistrant, à la nouvelle ouverture du fichier réponses, l’ordre des colonnes n’a pas été concervée?”
Bienvenue chez Adobe !
Spécialiste des interfaces et de l’expérience utilisateur, sauf dans Acrobat.
😉
Merlin
Maître des clésBonjour
Le problème ne vient pas d’InDesign.
Le problème se sont les lecteurs de fichiers PDF, dont Acrobat, qui sont en dessous de tout.
Ce problème a été signalé de nombreuses fois à Adobe depuis l’arrêt de Flash Player mais rien n’y fait. Quand on utilise Acrobat Pro pour placer une vidéo on a les mêmes problèmes et la documentation est trop succincte.
Quand aux autres éditeurs…
Le plus sur c’est d’utiliser Acrobat Pro pour placer la vidéo en pièce jointe dans le PDF et pour créer un lien pour la lancer.
Ainsi elle s’affiche dans le lecteur vidéo par défaut, pas dans le lecteur de PDF.
Merlin
Maître des clés“Cela ne fonctionne pas”
Qu’est-ce qui ne fonctionne pas et pourquoi ?
Il n’y a que des magiciens sur ce forum, mais aucun devin.
Merlin
Maître des clésBonjour
Remplace la 2e ligne du script par :
var distance = Number(this.getField("distance").value) + Number(this.getField("total").value);
Par ailleurs c’est toujours une mauvaise idée de donner le même nom à un champ et à une variable, c’est source d’erreurs.
Merlin
Maître des clésBonjour
Est-ce qu’il faut que la liste reprenne les valeurs contenues dans les champs 1, 2, 3 et 4 (si elles sont variables) ou bien peut-on reproduire ces valeurs directement dans la liste ?
Pouvez vous partager (tout ou partie de) ce formulaire ?
Merlin
Maître des clésDu coup chat GT peut aller se rhabiller !
😁
Merlin
Maître des clésPeux tu poster ce script ?
Merlin
Maître des clés😎
Merlin
Maître des clésBonjour
Quand on ouvre ce document la Console affiche ceci :
TypeError: event.target.value.toFixed is not a function
3:Field:Format
Pour moi le menu fonctionne normalement, mais il fonctionnerait encore mieux si l’option “Valider la valeur sélectionnée immédiatement” était cochée (onglet Options).
Mais ce menu déroulant fait des calculs faux, pour un montant de 100 € on a : un 1er acompte de 60 €, un 2e acompte de 40 € et un 3e acompte de 10 €.
Soit un total de 110 €, au moins tu as le sens des affaires ! 😀
Concernant la virgule il faut utiliser un format “nombre” normal, la valeur de ce champ n’étant pas calculée le script de format ne sert à rien d’autre qu’à provoquer les erreurs qui s’affichent dans la console JS.
Et il faudrait faire la même chose pour tous les champ situés au-dessus qui utilisent le point comme séparateur.
Sinon “acompte” ne prend qu’un seul C.
“Quantité” ne prend pas de E final.
Et concernant les abréviations des adjectifs numéraux voir : https://www.academie-francaise.fr/abreviations-des-adjectifs-numeraux
😉
Attachments:
You must be logged in to view attached files.Merlin
Maître des clés😎
-
AuteurRéponses