Toutes mes réponses sur les forums
-
AuteurRéponses
-
Merlin
Maître des clésSi tu veux une aide efficace il faudrait dire lesquelles.
Merlin
Maître des clés“Je veux juste que le fichier xlsm s’ouvre dans excel en appuyant sur un bouton incorporer dans mon formulaire PDF”
Il va falloir choisir entre incorporer le fichier XLSX dans le PDF ou bien l’ouverture du fichier avec Excel (qui n’est pas possible depuis Acrobat).
Merlin
Maître des clésC’est typiquement un cas d’utilisation de la signature numérique, une fois le document signé (avec Reader) il n’est plus modifiable.
Tous les champs sont aplatis, et tout est verrouillé.
Merlin
Maître des clésBonjour
Ce sont les seuls restrictions possibles (capture), sachant qu’il est très facile de les outrepasser.
Sinon on peut toujours bricoler des restrictions en JavaScript mais il encore plus facile de les outrepasser (il suffit de désactiver JavaScript).
Tout dépend à quels utilisateurs tu t’adresses.
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésBonjour
Oui mais :
- le fichier Excel doit être toujours au même endroit,
- il faut utiliser Acrobat Pro ou Standard (pas Reader),
- ça ne peut fonctionner que depuis un “script d’application. Voir :
https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/les-differents-niveaux-dutilisation-des-scripts-javascript/
Merlin
Maître des clésLe hasard fait bien les choses, un nouveau remerciement à fait remonter ce sujet qui pose la même question et à laquelle j’avais répondu de façon complètement différente.
Il y a donc au moins deux façons de faire : https://community.adobe.com/t5/acrobat-discussions/how-to-delete-image-in-the-background-from-all-pages-at-once/td-p/11984847
(Il y a un bouton Traduire sous chaque message)
Merlin
Maître des clés👍
Merlin
Maître des clésLes informations sélectionnées sont définitivement supprimées du document, c’est pour ça que par défaut Acrobat force ensuite l’enregistrement d’une copie.
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésBonjour
Pas besoin de script ni de solution compliquée, il faut utiliser la fonction Biffer > Assainir le document. Voir capture.
Bien entendu il faudra enregistrer une copie du document sans image.
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésOui, no problemo.
Merlin
Maître des clésBonjour
Un champ de formulaire PDF de type texte est forcément mono-colonne.
Avec JavaScript on peut faire passer d’un champ à l’autre au cours de la saisie, mais à chaque fois on perd le dernier caractère saisi.
Ce qui est plutôt déconcertant pour l’utilisateur final.
Merlin
Maître des clésBonjour
Techniquement la mise en œuvre est simple, c’est le contexte qui l’est moins. Et ça ne peut fonctionner que sur un seul ordinateur et pour un seul utilisateur.
Quel évènement devrait déclencher le nouveau numéro ?
Pour répondre il serait plus simple que tu partages (tout ou partie de) ce document.
Merlin
Maître des clésC’est très curieux, j’ai encore refait des tests et j’en perd mon latin.
😖
Merlin
Maître des clésJe pensais un bug dans le document PDF.
Il faudrait en refaire un autre en partant de zéro pour savoir.
Merlin
Maître des clésBonjour
Joker ! 🙃
C’est le genre de question que je poserais plutôt sur ce forum, même si ça ne concerne pas vraiment le SDK, car il est fréquenté par des experts qui pourront certainement te répondre :
Merlin
Maître des clésTu peux soit utiliser la version d’essai d’Acrobat Pro (7 jours) soit me faire passer ton document et me dire combien tu veux de duplicata.
31 janvier 2023 à 22:13 en réponse à : Est-il possible de transferer des données d’un PDF à un autre ? #72452Merlin
Maître des clésJe ne comprend pas.
Merlin
Maître des clésBonjour
Avec Acrobat Pro c’est très simple, tu copie-colles tes champs dans un autre document vierge, dans le panneau des champs tu cliques sur le menu “AZ” pour les classer par ordre alphabétique, tu renommes la racine “.1” en “.2” (capture), et tu copie-colles en retour dans ton document d’origine.
Pourquoi faut il le faire dans un autre document ?
Parce-que sinon ça renomme tous les champs enfants de Q.1 dans le document, et je suppose que ce n’est pas ce que tu veux faire.
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésBonjour
C’est effectivement la bonne réponse.
La question qui vient immédiatement après c’est, par exemple : comment avoir du texte en corps 12 au départ et qui se réduit ensuite ?
Un jour j’ai passé du temps à faire des équivalences entre la hauteur du champ et le corps du texte tant qu’il ne déborde pas et j’ai obtenu ça (capture d’écran ci-dessous).
Ce sont des équivalences faites en utilisant la police de caractère Helvetica, donc qui peuvent varier selon la police utilisée.
Si ça peut aider.
Attachments:
You must be logged in to view attached files.26 janvier 2023 à 09:58 en réponse à : Est-il possible de transferer des données d’un PDF à un autre ? #72438Merlin
Maître des clésSi la boite de dialogue le dit c’est que c’est vrai.
Dans le menu “AZ” du panneau d’outils “Préparer le formulaire” on peut afficher les champs par ordre alphabétique, c’est plus pratique pour en retrouver un.
Attachments:
You must be logged in to view attached files.25 janvier 2023 à 15:02 en réponse à : Est-il possible de transferer des données d’un PDF à un autre ? #72435Merlin
Maître des clésBonjour
Il faut afficher le PDF rempli et “Exporter les donnés”, ce qui génère un fichier .FDF qu’il faut enregistrer. Ça se passe dans le panneau d’outil “Préparer le formulaire” : menu Autres.
Ensuite depuis les PDF non remplis il faut “Importer les données” de ce fichier .FDF
Pour que ça fonctionne il faut que les champs aient exactement le même nom dans tous les formulaires.
Les données des champs dont les noms ne sont pas commun entre deux PDF sont ignorées.
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésBonjour
Un PDF envoyé par email avec la fonction intégrée n’a pas besoin d’être enregistré, c’est automatique (sinon beaucoup ne recevraient que des formulaires vides !).
Voir captures.
Aplatir recouvre plusieurs choses :
- aplatir les calques (n’en conserver qu’un seul),
- aplatir les commentaires (les fusionner dans le fond de page),
- aplatir les champs de formulaire (les fusionner dans le fond de page) et je crois que c’est à ça que tu penses.
Dans les trois cas ce n’est pas possible avec Acrobat Reader, il faut avoir la version Pro ou la version Standard.
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésBonjour
Je ne sais pas, je t’invite à chercher sur ce site qui est un des grands fournisseurs de plugins pour Acrobat, l’offre est très riche :
De mémoire, j’ai entendu parler d’un plugin qui permet à Acrobat Pro de gérer les calques et les objets qui y sont attachés comme dans un logiciel normal (Photoshop, InDesign, Illustrator…), c’est souvent plus pratique que le groupage.
Merlin
Maître des clésfor (var i = 1 ; i<50 ; i++) {
for (var f = 0 ; f<50 ; f++) {
if
(this.getField("Q."+i +"."+f) != null && this.getField("Q."+i
+"."+f).type != "combobox") {this.getField("Q."+i +"."+f).value = "";}
if
(this.getField("Q."+i +"."+f) != null && this.getField("Q."+i
+"."+f).type == "combobox") {this.resetForm([("Q."+i +"."+f)]);}
Je ne comprend pas ce script inutilement compliqué qui pourrait être remplacé plus simplement par :
this.resetForm(["Q"]);
Merlin
Maître des clésAutre question, est il possible de faire « remonter » plus d’une variable lors d’un clic sur un bouton pour appeler une fonction qui utilisera ces variables.
Oui.
Merlin
Maître des clésPour les autres, j’ai essayé mais il y avait des erreurs et comme j’ai de fortes lacunes dans ce que tu proposes, je n’ai pas pu corriger.
1000 excuses, une parenthèse a disparu entre le test et la copie dans le sujet. C’est corrigé (ci-dessus, c’est la parenthèse en bleu).
Mais là c’est plus une question d’outil que de niveau, la console JS d’Acrobat m’a tout de suite signalé la parenthèse manquante. 😉
Merlin
Maître des clésÇa sent le bon gros bug, peut être que ça ira mieux dans la version prochaine…
🙏
Merlin
Maître des clésCependant pour le reset je me baserais seulement sur les noms de champs, ce script devrait aller encore plus vite car il ne cherche pas de champs inexistants :
function Raz() {
for (var i = 0; i < this.numFields; i++) {
var oFld = this.getField(this.getNthFieldName(i));
if (/\bQ.+/.test(oFld.name)) {
oFld.display = display.hidden;
oFld.fillColor = color.white;
oFld.value = oFld.defaultValue;
}
else if (/\bQ\.1.+/.test(oFld.name)) {
oFld.display = display.visible;
oFld.readonly = false;
}
else if (/\bTQ.+/.test(oFld.name) || /\bQuestion.+/.test(oFld.name) || /\bVerifier.+/.test(oFld.name) || /\bRecommencer.+/.test(oFld.name) || /\bAide.+/.test(oFld.name)) {
oFld.display = display.hidden;
oFld.readonly = false;
}
}
this.getField("Verifier.1.0").display = display.visible
this.getField("Verifier.1.0").display = display.noPrint;
this.getField("Recommencer.1.0").display = display.visible;
this.getField("Recommencer.1.0").display = display.noPrint;
this.getField("TQ.1.0").display = display.visible;
this.getField("Aide.1.0").display = display.visible;
this.getField("Erreurs").value = 0;
this.getField("Menu.5").value = 0; // !!!
}
Merlin
Maître des clésAutre chose, j’ai lu ton code de reset qui mouline beaucoup et inutilement :
- il faut oublier le “f” !
- “100” c’était un exemple, dans un premier temps tu pourrais utiliser un chiffre plus modeste.
S’agissant d’une propriété partagée (display, color, etc) quand on s’adresse à un champ parent on s’adresse à tous ses enfants.
Par exemple :
this.getField("Q.1).display = display.hidden;
suffit à masquer tous les champs dont le nom commence par “Q.1.”
Donc la première partie de la fonction Raz() :
function Raz() {
this.getField("Erreurs").value = 0;
this.getField("Menu.5").value = 0;
for (var i = 1 ; i<101 ; i++) {
for (var f = 0 ; f<101 ; f++) {
if (this.getField("Q."+i +"."+f) != null) {this.getField("Q."+i +"."+f).display = display.hidden;
this.getField("Q."+i +"."+f).fillColor=color.white;
}
if (this.getField("TQ."+i +"."+f) != null) {this.getField("TQ."+i +"."+f).display = display.hidden;}
if (this.getField("Question."+i +"."+f) != null) {this.getField("Question."+i +"."+f).display = display.hidden;}
if (this.getField("Verifier."+i +"."+f) != null) {this.getField("Verifier."+i +"."+f).display = display.hidden;}
if (this.getField("Recommencer."+i +"."+f) != null) {this.getField("Recommencer."+i +"."+f).display = display.hidden;}
if (this.getField("Aide."+i +"."+f) != null) {this.getField("Aide."+i +"."+f).display = display.hidden;}
}
}
...
Pourrait être simplifiée ainsi (sans les 100 x 100 boucles “f”) :
function Raz() {
this.getField("Erreurs").value = 0;
this.getField("Menu.5").value = 0;
for (var i = 1 ; i<101 ; i++) {
if (this.getField("Q."+i) != null) {
this.getField("Q."+i).display = display.hidden;
this.getField("Q."+i).fillColor=color.white;
}
if (this.getField("TQ."+i) != null) {this.getField("TQ."+i).display = display.hidden;}
if (this.getField("Question."+i) != null) {this.getField("Question."+i).display = display.hidden;}
if (this.getField("Verifier."+i) != null) {this.getField("Verifier."+i).display = display.hidden;}
if (this.getField("Recommencer."+i) != null) {this.getField("Recommencer."+i).display = display.hidden;}
if (this.getField("Aide."+i) != null) {this.getField("Aide."+i).display = display.hidden;}
}
…
Merlin
Maître des clésJe crois que ça vient de la fonction “EditReps()” qui est utilisée en script de calcul par le champ “Aide.1.1” parce-que la valeur du champ “Menu5” (qui est une case à cocher…) n’est pas égale à “1”, voir capture.
Quand on fait un reset (resetForms ou defaulValue) ça déclenche les actions de calcul de tous les champs, actions qui s’effectuent donc après le reset.
En clair le champ “Aide.1.1” s’auto-réaffiche après chaque reset.
Note que dans cette fonction tu pourrais avantageusement remplacer la ligne (encadrée) :
if (this.getField("Menu.5").value != 1) {
par
else {
😉
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésJe viens de m’apercevoir qu’en fait ça fonctionne aussi avec Acrobat… mais seulement si le champ “email” est vide.
==> Je donne ma langue au chat !
Merlin
Maître des clésBonjour
J’ai l’impression qu’il s’agit d’un bug dans la dernière version car chez moi ça ne fonctionne pas avec Acrobat mais par-contre ça fonctionne très bien avec Foxit Reader et PDF Studio.
Le script me parait correct, je ne vois aucune raison pour que ça ne fonctionne pas.
La console JS affiche cette erreur à chaque fois :
GeneralError: Operation failed.
Doc.mailDoc:9:Field Botão-Email:FocusCependant :
- le script serait mieux placé s’il était en action “souris relevée” (mouse up) plutôt qu’en action “champ activé” (on focus).
- Le première ligne (qui verrouille tous les champs) et la dernière ligne (qui déverrouille tous les champs) ne servent à rien.
Merlin
Maître des clés” (2) Je ne vois pas trop comment faire pour qu’en cliquant sur Raz seule la question 1 soit visible”
Ça c’est le plus facile, il faut masquer tous les champs Question, par exemple en se basant sur leurs noms, et ensuite ré-afficher la question 1.
Exemple :
for (var i = 1 ; i<101 ; i++) {
if (this.getField("Q" +i) != null) {this.getField("Q" +i).display = display.hidden;}
}
this.getField("Q1").display = display.visible;
Pour le reste je répondrai plus tard.
La dernière version de ton document est inutilisable avec Acrobat, au début on voit des éléments s’afficher séquentiellement et ensuite il n’en fini plus de mouliner jusqu’à ce que je le force à quitter/Fin de tâche.
J’ai un faible pour les usines à gaz et les problématiques inhabituelles, et j’ai aussi un faible pour les gens qui se décarcassent pour créer un outil à leur main plutôt que d’attendre en pleurnichant que ça tombe du ciel.
Merlin
Maître des clésLa position officielle d’Adobe, pour qui sait lire entre les lignes ça veut dire que Acrobat Pro X, XI et 2017 ne seront pas mis à jour :
Adobe Acrobat uses a certificate issued by ‘Adobe Root CA’ to sign Reader Extended PDFs. This certificate can no longer be used to create new Reader Extended PDFs post its expiry on January 7, 2023. The November 2022 update of Adobe Acrobat (Continuous and Classic track) creates Reader Extended PDFs using a new certificate issued by ‘Adobe Root CA 2’. Adobe recommends users update to the latest version of Acrobat (November 2022 update or later) to continue using this functionality post-January 7, 2023.
Please update the application to the latest version, 22.3.20281 (Mac) or 22.3.202082 (Win) and reboot the computer once. Go to Help > Check for updates.
You may also download the patch manually from the link https://www.adobe.com/devnet-docs/acrobatetk/tools/ReleaseNotesDC/index.html
Merlin
Maître des clésJe viens de constater que depuis quelques jours le forum d’Adobe est envahi par la même question que la tienne.
Il en ressort que c’est la date d’expiration du certificat d’Acrobat DC qui pose problème, une mise à jour est disponible :
https://helpx.adobe.com/acrobat/kb/reader-extended-pdfs-and-adobe-root-ca-expiry.html
Merlin
Maître des clés“« Remettre à 0 les liste déroulantes avec le bouton Raz…
Pour celui-ci ça marche mais la console me renvoie une erreur :”
Je suppose que c’est le même problème que ci-dessus, j’ai testé ça fonctionne correctement avec “resetForm” :
for (var i = 0; i < this.numFields; i++) {
var oFld = this.getField(this.getNthFieldName(i));
if (oFld.type == "combobox") {this.resetForm(oFld.name);}
}
Merlin
Maître des clés“J’ai essayé de m’en inspirer pour définir par defaut les Checkbox cochées avec ceci Dans le script Default :
for (var i = 1 ; i<101 ; i++) {this.getField(“R” +i).defaultValue = this.getField(“R” +i).value;}Mais j’ai une erreur : Doc:Open:7: TypeError: this.getField(…) is nullLorsque je coche ou décoche une checkbox R…”
Oui pardon, pour le coup comme on s’adresse à un champ parent on ne peut pas utiliser “value = defaultValue”, il faut utiliser “resetForm”. J’ai testé ça fonctionne :
for (var i = 1 ; i<100 ; i++) {
if (this.getField("R" +i) != null) {this.resetForm("R" +i);}
}
Merlin
Maître des clés👍
Merlin
Maître des clés“Remettre à 0 les liste déroulantes avec le bouton Raz”
for (var i = 0; i < this.numFields; i++) {
var oFld = this.getField(this.getNthFieldName(i));
if (oFld.type == "combobox") {oFld.value = oFld.defaultValue;}
}
Merlin
Maître des clés« Cacher ou masquer les checkBox (R7.1 à R7.5) avec le script EditReps »
“Oui, mai je cherche un script qui fonctionne quelque soit le numéro de champ R…”Dans ce cas, si on suppose par exemple que le nombre maximal est de 100 :
for (var i = 1 ; i<101 ; i++) {
if (this.getField("R" +i) != null) {this.getField("R" +i).display = display.hidden;}
}
Merlin
Maître des clés“Définir la valeur par defaut des mêmes checkboxes avec le script Default”
for (var i = 1 ; i<6 ; i++) {this.getField("R7." +i).defaultValue = this.getField("R7." +i).value;}
Merlin
Maître des clés“Cacher ou masquer les checkBox (R7.1 à R7.5) avec le script EditReps”
this.getField("R7").display = display.hidden;
Merlin
Maître des clésAttention quand même : cette requête GREP détecte le “R” en début de mot, mais pas forcément en début de nom.
Donc si un nom de champ contient des espaces et un mot commençant par “R” il sera détecté même le mot n’est pas en début de nom.
Par exemple le champ “Loulou Fifi Riri” sera détecté comme positif.
Merlin
Maître des clés“Je voudrais que celui-ci cache tous les champs qui commencent par « R. »”
for (var i = 0; i < this.numFields; i++) {
var oFld = this.getField(this.getNthFieldName(i));
if (/\bR.+/.test(oFld.name)) {
oFld.display = display.hidden;
}
}
Merlin
Maître des clés“Pour le script de validation à placer, je me demandais comment utiliser la console pour propulser le même script dans tous les champs qui commencent par « R. »”
Ce serait une mauvaise idée car si jamais tu voulais un jour pouvoir modifier ou supprimer ce script ce serait un enfer.
Place le script en fonction (dans les scripts de document) et appelle la fonction depuis les champs.
Ce script détecte tous les champs texte dont le nom commence par un R en capitale et leur ajoute “MaFonction” en script de validation :
for (var i = 0; i < this.numFields; i++) {
var oFld = this.getField(this.getNthFieldName(i));
if ((oFld.type == "text") && (/\bR.+/.test(oFld.name))) {
oFld.setAction("Validate", "MaFonction();");
}
}
Merlin
Maître des clésComment envoyer/partager/poster une pièce jointe volumineuse :
😎
Merlin
Maître des clésPour la suite il faudrait voir la pièce jointe…
😉
(Upload Errors: 03-ex.4_eleve-test.pdf: File exceeds allowed file size.)
Merlin
Maître des clésPour que la valeur par défaut soit celle saisie, j’ai pensé à mettre en script de calcul ce code :
var a = event.target.name;
this.getField(a).defaultValue = this.getField(a).value;Qu’en pensez vous ?
event.target.defaultValue = event.target.value;
Typiquement à placer en script de validation.
Merlin
Maître des clés“Ce que je trouves bizarre, c’est qu’il y le mode de compatibilité qui est positionné sur « Adobe 8 et + ».”
Ça n’a rien à voir avec les “Reader Extended Rights”, en fait ça c’est la version du format PDF.
Merlin
Maître des clésCi-joint.
Activé avec Acrobat 9 et avec Acrobat 11.
Attachments:
You must be logged in to view attached files.Merlin
Maître des clés👍
Merlin
Maître des clésBonjour et bonne année
Tu n’as pas besoin de compter ces champs, il suffit de les prendre en compte seulement s’ils existent.
if (this.getField("Q"+n+"."+1) != null && //etc
Merlin
Maître des clésBonjour et bonne année
A priori les scripts ne sont pas en cause.
Le problème viendrait plutôt de la version d’Acrobat Pro utilisée pour activer les fonctions étendues dans ce document.
Activer les fonctions étendues c’est en fait comme apposer une sorte de signature numérique qui déverrouille certaines fonctions habituellement masquées dans Acrobat Reader, mais Acrobat Reader X est une version ancienne qui n’est plus mis à jour depuis longtemps et qui ne reconnait pas forcément les signatures des versions plus récentes d’Acrobat Pro.
Donc il faudrait tester l’activation avec une version plus ancienne d’Acrobat Pro, si tu n’en a pas à disposition je peux le faire avec Acrobat Pro XI et/ou 9.
Merlin
Maître des clésBonjour et bonne année
Je ne sais pas quel est ton but mais tu te lances dans un truc compliqué, même si je sais que ça ne te fait pas peur.
Parce-que pour connaitre la largeur du plein écran et la surface affichée il faut commencer par connaitre les dimensions de l’écran utilisé.
C’est faisable mais ça implique beaucoup de calculs et de conditions.
Merlin
Maître des clésCeci dit, légalement l’ajout d’une signature scannée dans un champ image ça ne vaut rien.
Pourquoi ne pas utiliser la vraie fonction de “Signature” ?
Merlin
Maître des clésJe ne sais plus avec quelle version d’Acrobat est arrivée l’option qui permet d’effacer l’image mais elle est assez ancienne, ici elle est en anglais mais elle se trouve toujours au même endroit :
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésBonjour
Il faut utiliser un champ-image (en fait un bouton).
Merlin
Maître des clésOui, effectivement du coup ce sont des “annotations” et non pas des pièces jointes.
Je viens de chercher dans la doc et je n’ai rien trouvé qui permette d’exporter les annotations de type “attachment”.
Ce qu’on peut faire avec JavaScript c’est exporter les annotations dans un fichier FDF ou XFDF, éventuellement après les avoir triées, mais apparemment rien de permet d’accéder à leur contenu.
Attachments:
You must be logged in to view attached files.Merlin
Maître des clés👍
Je ne m’en serai jamais rappelé.
Merlin
Maître des clésBonjour
Ce bug me rappelle vaguement quelque chose, mais c’est un “bug PC” et à l’époque j’utilisais un Mac. Donc je n’ai pas mémorisé le truc.
Par contre il est toujours possible d’utiliser la Notation Simplifiée, sachant que si il y a un point ou une espace dans le nom d’un champ il faut “l’échapper”.
C’est à dire qu’il faut placer un slash devant, par exemple pour multiplier les champs “030 €Carburant” et “champ.1” :
030\ €Carburant * champ\.1
Merlin
Maître des clésJe crois que la méthode exportdataobject a été faite pour toi :
https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/doc.html#exportdataobject
Ce qui devrait donner quelque chose comme ça :
for (var i=0; i<this.dataObjects.length; i++) {this.exportdataobject(this.dataObjects.name);}
Merlin
Maître des clésIl faut toujours avoir un vieil ordi avec Acrobat 9, car les messages de la Console ont changé avec Acrobat X.
Depuis Acrobat X la Console dit à quelle ligne ça ne fonctionne pas sans donner le nom du champ qui pose problème.
Avant c’était l’inverse.
Donc c’est un script de calcul qui ne trouve pas le champ “Ligne1” :
TypeError: this.getField("Ligne1") is null
1:Field:Calculate
J’ai ajouté un champ “Ligne1” pour voir : il n’y a plus d’erreur et ce champ affiche un numéro qui s’incrémente +1 à chaque fois.
Le script de calcul fautif se trouve dans le champ “liste.22”.
Merlin
Maître des clésSinon dans ton code tu peux préciser (à chaque fois) :
if (this.getField("NOM") != null) // si le champ NOM existe
{this.getField("NOM").value = "blablabla";}
Ainsi si le champ n’existe pas il ne se passe rien et il n’y a pas d’erreur.
9 décembre 2022 à 18:40 en réponse à : sauvegarder et recupérer données dans un fichier texte #72186Merlin
Maître des clésCes fichiers textes sont ils incorporés en pièce jointe dans le PDF ou sont ils externes ?
9 décembre 2022 à 14:45 en réponse à : sauvegarder et recupérer données dans un fichier texte #72183Merlin
Maître des clésBonjour
Il faudrait enregistrer ce fichier texte en tant que pièce jointe dans le document PDF ou bien en fichier séparé ?
Dans quel(s) logiciel(s) et conditions faudrait il que ça fonctionne ?
Merlin
Maître des clésBonjour
Avec mon Acrobat Pro ce document fonctionne très bien et la Console reste silencieuse.
Merlin
Maître des clés“Mais je pense que pour changer a volonté, il ne faut pas que cela change a fonction de la langue du logiciel de l’utilisateur.”
Rien n’empêche de faire les deux.
On peut ajuster la langue en fonction du réglage du logiciel utilisé et proposer à l’utilisateur une option pour changer de langue.
Merlin
Maître des clés👍
Merlin
Maître des clésPourquoi lister tous les champs les uns après les autres alors qu’ils ont un élément commun et connu dans leurs noms ?
JavaScript peut s’en débrouiller tout seul si on lui indique le tronc commun du “nom” :
😉
for (var i = 0; i < this.numFields; i++) {
var oFld = this.getField(this.getNthFieldName(i));
if ((oFld.type != "button") && (/nom/.test(oFld.name))) {
oFld.value = oFld.defaultValue;
// ou
// this.resetForm(oFld.name);
}
}
Voir : https://www.w3schools.com/jsref/jsref_regexp_test.asp
Merlin
Maître des clésAprès utilisation du bouton “email” la console dit qu’un champ n’existe pas :
TypeError: this.getField(...) is null
Le script dit, à la dernière ligne :
this.getField("Nom_Fichier_1").setFocus();
Alors qu’aucun champ ne porte ce nom dans le document.
Donc je suggère de remplacer la dernière ligne du script par :
this.getField("Nom_Fichier").setFocus();
28 novembre 2022 à 11:44 en réponse à : Configurer le format de plusieurs champs en même temps #72072Merlin
Maître des clés“Je voudrais configurer le format des champs => nombre avec deux décimales et avec un point comme séparateur.
(…)
Je suis obligé de configurer les champs un par un.
(…)
(Je précise que je renomme automatiquement mes champs de 0 à x par un autre script).”
Il n’y a pas besoin de script, ça peut se faire en quelques clics.
Il faut créer un premier champ et le paramétrer comme il faut (format, aspect, etc.).
Ensuite clic-droit sur le champ : Créer plusieurs copies.
Ce qui numérote automatiquement tous les nouveaux champs.
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésCe script ne peux pas fonctionner, la syntaxe n’est pas correcte :
this.getField("Nom_Fichier_1").setFocus();
Par ailleurs, si la page modèle est dupliquée (spawn) il faut indiquer le numéro de widget du champ puisqu’il existe plusieurs fois dans le document.
Merlin
Maître des clés“le but serait de pouvoir basculer d’une langue a l’autre à volonté.”
Oui mais comment ? Tout le reste dépend de cette réponse.
Il faut t’arracher les informations une par une et tu ne réponds pas vraiment aux questions posées.
Met toi à la place de quelqu’un qui ne sait rien de ce document ni de la façon dont il devrait être utilisé.
Merlin
Maître des clésOK, mais qu’est-ce qui devrait déclencher la traduction ?
Faut il deux documents en deux langues ?
Faut il que les champs du document s’adaptent automatiquement à la langue utilisée par le logiciel de l’utilisateur ?
Est-ce l’utilisateur qui devrait commander le changement de langue ?
…
Merlin
Maître des clésAvant de la supprimer on s’assure que la page supplémentaire a bien été générée, sinon ça supprimerait une page statique du document (dans Pro et Standard) ou ça ne fonctionnerait pas (dans Reader, qui ne peut supprimer que des pages “spawnées”, pas les pages statiques) :
if (this.numPages > 4) { // s'il y a plus que 4 pages
this.deletePages({nStart: 3, nEnd: 3}); // suppresion de la page 4
}
Merlin
Maître des clésBonjour
Je ne connais VBA que de nom, j’espère que quelqu’un d’autre saura t’aider.
Merlin
Maître des clés“spawnPageFromTemplate” est obsolète et n’est pas supporté par la plupart des logiciels non Adobe (Foxit, PDF Studio, etc.).
Il faut lui préférer “getTemplate” + “spawn” :
https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/doc.html#gettemplate
Le template doit se placer en page 4, dans ce cas précis c’est aussi l’avant-dernière page donc il suffit d’ajouter “-1”.
this.getField("page_3").value = this.numPages + 1;
this.getTemplate("JALONS").spawn(this.numPages-1, true, false);
this.pageNum = 3;
event.target.display = display.hidden;
Merlin
Maître des clés“Effectivement, c’est mieux car j’avais un bouton qui permettait d’effacer tous les champs de mon document mais je voulais que l’utilisateur puisse rétablir ce champ avec la valeur qu’il avait lui même défini par défaut. Du coup, ma solution précédente ne fonctionnait pas car le champ masqué s’effaçait aussi.”
Protéger un champ contre le reset est très simple quand on sait qu’en fait le reset ne supprime pas le contenu des champs : le reset (comme son nom l’indique en anglais) fait revenir les champs à leur valeur par défaut.
En général la valeur par défaut c’est “rien”, mais c’est une coïncidence.
Donc au lieu d’attribuer au champ les données à sauvegarder en tant que valeur (value) il faut faire la même chose mais en lui attribuant les données comme valeur par défaut (defaultValue).
Ainsi les données sont conservées lors d’un éventuel reset.
this.getField("CHAMP").defaultValue = "Blablabla";
Merlin
Maître des clésPas de souci.
Mais je ne vois pas de menu en cascade ni aucune indication dans le document.
Qu’est-ce qui devrait être traduit ?
Merlin
Maître des clésMerlin
Maître des clésC’est parce-que tu as oublié que comparer l’égalité c’est avec == (et non pas avec =)
😉
Si en plus on utilise une boucle ça nous donne :
var pp = this.getPrintParams();
var printRange = [];
for (var i = 1; i < 33; i++) {
if (this.getField("CB." + i).value == 1) {printRange.push([i,i]);}
}
// console.println("printRange: " + printRange);
this.print(pp);
Merlin
Maître des clésBonjour
Ce ne serait pas plus simple d’utiliser les options de format proposées par Acrobat ?
(ci-joint)
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésBonjour
Je ne suis pas certain de bien comprendre, si tu penses à de la traduction automatique c’est non.
Si tu penses à changer la langue des libellés et des items c’est oui, en utilisant un peu de script et en les ayant préalablement stocké.
“Champ à choix multiple” : c’est une zone de liste ?
Merlin
Maître des clésEt === signifie égal en valeur et en propriété.
Par exemple :
01 === 1
est faux (false), car à gauche on a une chaine de caractère (string) et à droite on a un chiffre (number).
Alors que
01 == 1
est vrai.
Merlin
Maître des clés« Entre temps j’ai fait ceci en superposant 2 images. On peut faire comme cela ou c’est plutôt à éviter ? »
La vraie réponse :
🙂
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésmais normalement lorsqu’on n’indique pas nEnd, seule la page nStart est imprimée !
Il faut se méfier de ces raccourcis (propres à Adobe ?) qui ne fonctionnent pas dans tous les logiciels, j’en ai aussi fait l’amère expérience avec Foxit.
17 novembre 2022 à 16:28 en réponse à : Valeur d’exportation des cases à cocher dans les infos-bulles #71941Merlin
Maître des clésBonjour
La réponse est non, et Adobe ne reviendra certainement pas en arrière car c’est une fonctionnalité requise pour l’accessibilité.
Merlin
Maître des clés“Entre temps j’ai fait ceci en superposant 2 images. On peut faire comme cela ou c’est plutôt à éviter ?”
Tant que ça fonctionne c’est bon, mais s’il y a beaucoup de champs ou de pages je t’invite à utiliser la mise en pratique du principe simple ci-joint car il simplifie le nombre de champs et le script.
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésLe principe est simple : deux boutons masqués contenant chacun une icône (activé et désactivé), et le troisième bouton visible va chercher l’icône dont il a besoin dans le bouton masqué correspondant.
Il faut utiliser buttonImportIcon :
Merlin
Maître des clésChez moi ça affiche un point quand le champ a été cliqué, le symbole ne s’affiche qu’au survol du curseur.
Je suppose que c’est un problème de police de caractère manquante…
Mais souvent la bonne réponse vient de l’abandon de la “mauvaise” question : tu essaies de réinventer la roue en faisant se comporter des champs de texte comme des boutons.
Alors pourquoi ne pas utiliser des champ de formulaire de type “boutons” ?
L’énorme avantage c’est que dans un bouton on peut utiliser une image comme label, on n’est pas limité à du texte.
Et ça t’éviterait d’avoir à gérer deux champs de texte l’un par-dessus l’autre.
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésS’agissant du label d’un bouton on ne peut pas le faire au clavier (pas avec Acrobat Pro, je ne sais avec PDF Expert).
Il faut remplir le label avec JavaScript (depuis la Console) :
this.getField("bouton1").buttonSetCaption("\uD83D\uDC41");
Merlin
Maître des clésMerlin
Maître des clés“Une idée sur ma question(liste déroulante et image) ?”
Je crois que ce sera possible dans le PDF 2.0, autant dire que ce n’est pas pour demain vu la vitesse à laquelle Adobe et les autres intègrent cette norme (ISO 32000-2).
Merlin
Maître des clésOui, l’icône s’adapte à l’échelle mais pas fidèlement, quand on dézoome elle ne diminue pas autant que le reste, et inversement.
Merlin
Maître des clésAcrobat Pro et Acrobat Standard permettent à l’utilisateur d’afficher/masquer une page modèle, mais ce n’est pas possible avec Acrobat Reader.
Ce dernier ne supporte que le spawn (génération d’un duplicata).
On retrouve la même logique chez les concurrents (Foxit, Qoppa…).
Merlin
Maître des clésCe qu’il faut bien comprendre avec les pages modèles/templates masquées c’est que le “spawn” génère un duplicata de la page masquée.
Donc quand on supprime la page qui a été “spawnée” on supprime tout ce qu’il y dessus, mais la page modèle reste toujours telle quelle, intacte.
La seule chose qui peut “rester” ce sont les données saisies dans les champs de formulaire puisque les noms de champs sont exactement les mêmes sur la page modèle et sur le duplicata.
Donc si on supprime une page duplicata après avoir saisi des données on peut retrouver ces données en re-“spawnant” la page modèle.
Avec une réserve : ça ne peut fonctionner que si le paramètre bRename est sur false, c’est à dire sans renommage des champs lors du spawn.
Merlin
Maître des clésJe vais encore te répondre avec le mot “impossible”.
En attendant que bebarth me démente peut-être.
😉
Merlin
Maître des clés“Les accolades sont facultatives ?”
Oui quand il y a une seule ligne d’instruction après la condition, comme dans ton exemple.
Non s’il y a plusieurs lignes d’instructions après la condition. On peut le faire quand même dans les versions récentes d’ECMAScript mais c’est prendre un risque inutile.
Merlin
Maître des clés😍
-
AuteurRéponses