Toutes mes réponses sur les forums
-
AuteurRéponses
-
Merlin
Maître des clés“Je n’ai pas pdf expert mais pdf Xchange “
Oups ! 😉
Merlin
Maître des clésbebarth, PDF Expert gère nativement les boites de dialogue (AcroDialog).
Michel va te mettre la misère.
😉
Merlin
Maître des clésEn ce moment je crée des regex pour identifier les NIF (Numéro d’Identification Fiscale) de plusieurs pays.
Dire que je trouvais ça compliqué, ce n’est rien a côté des filetages !
😉
Merlin
Maître des clésPour installer des apps mobiles il faut soit passer par les stores de Google et d’Apple avec toutes contraintes que ça suppose (financières mais pas seulement, il y a aussi des contraintes techniques, de contenu, et de présentation dans le store).
Soit il y a l’installation directe après déverrouillage du système de protection sur chaque appareil utilisateur, sans surprise c’est beaucoup plus simple à faire sur Android que sur iOS.
Merlin
Maître des clésBonjour
Avec PDF Expert je ne sais pas mais avec Acrobat ça ne peut fonctionner que depuis un script d’application (placé dans le sous-dossier “JavaScripts” d’Acrobat, donc sur chaque poste utilisateur).
Sécurité oblige.
Pour le “h” entre HH et MM je crois que que un (ou deux) anti-slash devant le “h” devrait suffire.
Merlin
Maître des clés“On trouve différentes expressions régulières sur internet qui correspondent à une url”
Une des plus simples se trouve ici :
En ce qui nous concerne ici, on peut même se passer des deux métacaractères finaux qui indiquent la fin d’un mot puisqu’on ne risque pas de trouver de ponctuation après.
😉
Merlin
Maître des clésBonjour
Il faut remplir la liste déroulante avec les intitulés (ou “Elément”, c’est ce qui est affiché à l’utilisateur) et les valeurs d’exportation (l’URL correspondante).
Ensuite le bouton utilise la valeur d’exportation pour ouvrir le lien (via un navigateur).
Code à utiliser dans le bouton (souris relâchée) :
app.launchURL(this.getField("LISTE").value);
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésBonjour
Je m’étais lancé dans la création d’applications mobiles en 2014, pour finallement tout arrêter en 2018.
J’en ai gardé un mauvais souvenir car ça m’a couté cher, surtout pour iOS (140€/an rien que pour le droit d’inscription* à l’Apple Store), et ça ne m’a pas rapporté grand-chose. Mais je n’utilisais pas un langage de programmation, j’étais abonné à une plate-forme de création (un peu comme WordPress ou Drupal pour les sites web).
Tout ça pour dire que je ne connais pas DART, mais je suppose que si ça a été fait par Google, a priori ça ne fonctionnera pas sur iOS (Apple).
Et pour dire que j’ai constaté qu’il est en fait beaucoup plus facile et moins cher de faire des “web-app”. C’est à dire un site web dédié qui se présente comme une application mobile. La limite étant que, contrairement à une vraie app, ça ne fonctionne pas vraiment bien quand l’utilisateur est hors ligne, malgré les “mises en cache”.
Donc sauf si on veut espionner tout ce que contient le smartphone de l’utilisateur ou faire une application de randonnées en montagne, de spéléologie ou de haute-mer, en général ça se passe bien.
*Chez Google (Android) c’était 50€ à vie (une seule fois).
Merlin
Maître des clésBonjour
Attention cependant car ça écrasera tout script de calcul pré-existant dans ces champs :
for (var i = 0; i < 126; i++) {
this.getField("Vol."+i).setAction("Calculate", "W(event.target.name.substr(4));");
}
Merlin
Maître des clésBonjour
La réponse est oui, ça existe depuis bientôt 30 ans dans Acrobat.
Il faut utiliser l’outil de commentaire “Enregistrer l’audio”, cependant attention au poids du fichier car, de mémoire, il me semble que les sons ainsi enregistrés sont peu ou pas compressés.
S’agissant d’un “commentaire” il bénéficie des mêmes options de suivi et de classement que tous les autres outils de commentaire.
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésPour le corps automatique :
f.textSize = "0";
Merlin
Maître des clésScusate, abbiamo approfittato della vostra assenza per deviare un po’ dall’argomento originale.
Ecco un articolo sull’uso della Console JavaScript:
Merlin
Maître des clésTu auras peut-être plus de chance avec ezPDF Reader, à ma connaissance c’est celui qui supporte le plus de fonctions JavaScript sur Android.
Merlin
Maître des clésBonjour
Quel logiciel utilises tu sur Android ?
Une chose est certaine c’est qu’avec Acrobat Mobile ça ne fonctionnera pas, son support de JavaScript est beaucoup trop pauvre.
Merlin
Maître des clés“je ne suis pas trop familier avec l’anglais”
Dans les forums d’Adobe il y a un bouton “Traduire” sous chaque message 😉
Merlin
Maître des clésAdobe a initié cette interface en 2021, elle est affichée par défaut depuis 2023, mais elle n’est toujours pas finalisée, certains outils ne fonctionnent toujours pas, et d’autres très mal (comme qui dirait, ils pédalent dans le yaourt).
Le mieux c’est de commencer par là : Acrobat’s new interface is a disaster
Et de continuer par :
https://community.adobe.com/t5/acrobat-discussions/why-change-everything/m-p/14770316/page/2#M472876
https://community.adobe.com/t5/acrobat-discussions/stop-it-with-the-nonsense-redesigns/td-p/14946257
Mais ce dont ils sont le plus fier c’est d’avoir inversé toute l’interface et d’avoir rendu nécessaires 2 ou 3 clics supplémentaires pour accéder à chaque fonction.
Merlin
Maître des clés“C’est quoi cette nouvelle expérience ?”
C’est la pire modification de l’interface d’Acrobat et de l’interface d’un logiciel professionnel qu’on ait jamais vu.
Je n’en dirai pas plus car je serai tenté de devenir grossier.
😉
Merlin
Maître des clés“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”
Oups !
Il va falloir que je vérifie ça, de toute façon j’ai prévu une mise à jour pour bientôt car pour l’heure ils ne sont pas compatibles avec la “nouvelle expérience” de l’interface d’Acrobat.
Merlin
Maître des clésPrécision : pour le(s) script(s) de document il faut connaitre son(leurs) nom(s) pour les écraser.
Ci-dessus c’est “init” parce-que je met tous mes scripts ensemble, sous ce nom que j’utilise toujours. Mais ça peut varier en fonction des habitudes de chacun.
Merlin
Maître des clésOui, c’est un peu bête mais les machines s’en moquent pas mal, elles n’ont aucun sens du correct ou de l’esthétisme.
Et comme disait Arnaud Amalric, abbé de Cîteaux, pendant la croisade contre les albigeois :
“Scriptez les tous, Dieu reconnaitra les siens”.
🙂
Merlin
Maître des clésPS : le script ci-dessus ne génère pas d’erreurs bien qu’il s’applique à tous les champs, quel que soit leur type.
Par exemple, ce n’est pas parce-que l’interface d’Acrobat ne propose pas de “Format” ou de “Validation” pour les boutons qu’ils ne peuvent pas avoir un script de Format ou de Validation. Rien n’empêche de le faire avec JavaScript.
Donc je ne me casse pas la tête à détecter le type de champ avant de nettoyer les scripts. J’utilise la méthode “brutale”.
Merlin
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, et ça fonctionne à tous les coups :
for (var i = 0; i < this.numFields; i++) {
var oFld = this.getField(this.getNthFieldName(i));
oFld.readonly = true; // verrouiler les champs
oFld.setAction("Format", "//");
oFld.setAction("Keystroke", "//");
oFld.setAction("Calculate", "//");
oFld.setAction("Validate", "//");
oFld.setAction("MouseExit", "//");
oFld.setAction("MouseEnter", "//");
oFld.setAction("MouseUp", "//");
oFld.setAction("MouseDown", "//");
oFld.setAction("OnBlur", "//");
oFld.setAction("OnFocus", "//");
}
this.setAction("WillSave", "//"); // actions de document
this.setAction("WillPrint", "//");
this.setAction("DidSave", "//");
this.setAction("DidPrint", "//");
this.setAction("WillClose", "//");
this.addScript("init", "//"); // script de document
Merlin
Maître des clésBonjour
Si c’est à faire dans des champs de formulaire la réponse est oui.
Sinon c’est non.
Merlin
Maître des clés“Pourtant avec ce fichier, ça fonctionne (il vient d’un ancien fil de discussion, d’ou mon event.commitKey = 13)”
En fait, si on va voir dans le sujet mentionné par Michel, on s’aperçoit que c’est lui qui a proposé ce bout de script.
Nous avons été deux à lui demander pourquoi “13”, mais il n’a pas répondu.
😉
Merlin
Maître des clés“Il faut utiliser “2”, pas “13”.”
Je mange mon chapeau, la réponse de ChatGPT (qui, comme Googol, ne considère le JavaScript que par rapport aux navigateurs web, d’où le point n°2 qui n’est pas vrai dans ce qui nous intéresse) :
En JavaScript, l’instruction :
event.commitKey = 13;
semble vouloir assigner la valeur 13 à une propriété commitKey de l’objet event.
Explication :
- event : Généralement, c’est un objet représentant un événement (ex : keydown, click, etc.).
- commitKey : Ce n’est pas une propriété standard des objets event. Cela signifie qu’elle a été ajoutée dynamiquement.
- Valeur 13 : Ce nombre correspond au code ASCII/Unicode de la touche Entrée (Enter).
Merlin
Maître des clésChez moi ce fichier fonctionne correctement.
Par contre tu devrais gérer le paramètre nIcon dans les alertes, car “OK” s’affiche à côté de l’icône d’erreur (icône par défaut), ce qui est un peu perturbant.
L’icône Status conviendrait mieux.
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésOui, il faut absolument que je prenne l’habitude de rafraichir ma page avant de répondre, surtout quand elle est affichée depuis la veille.
😉
Merlin
Maître des clésBonjour
Tu pourrais utiliser commitKey pour détecter l’usage de cette touche, mais :
- Il faut utiliser “2”, pas “13”.
- Çe ne détecte que la touche Entrée, pas la touche Retour.
- Il faudrait l’utiliser en fonction dans tous les champs de saisie car cet évènement est détecté lors de la perte du focus (onBlur) par un champ, et non pas seulement quand on utilise ladite touche.
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésBonjour
On ne peut pas exporter les données directement en XLSX, Adobe a préféré utilisé un format ouvert.
Cependant il suffit d’ouvrir le CSV exporté avec Excel ou LibreOffice et de l’enregistrer (sous) au format XLSX.
Merlin
Maître des clésBonjour
Nul besoin de se casser la tête avec des kilomètres de JavaScript, il suffit de créer un troisième champ (masqué) contenant la valeur maximum de G et de D, et de partir de la valeur qu’il contient.
(Image jointe)
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésApparement ton problème vient des guillemets, JavaScript ne supporte que les guillemets droits, tous les autres sont à bannir.
"blablabla"
Merlin
Maître des clésOui, en utilisant une fonction.
Par exemple :
function styl1(A) {
A.strokeColor = color.red;
A.textColor = color.red;
A.textSize = 12;
}
styl1(this.getField("Text1"));
On peut bien entendu aussi mettre le nom du champ en variable.
Merlin
Maître des clés“Je crois même qu’on apprend ça en fin de primaire…”
C’est te dire pendant combien de temps j’en ai cauchemardé…
🙂
Merlin
Maître des clésTu devrais mettre les accolades, on est d’accord que quand il n’y a qu’une seule ligne d’instruction elles ne servent à rien mais c’est une bonne pratique et une habitude à prendre.
Pour la couleur c’est simple, il faut choisir une couleur dans un logiciel quelconque et aller dans l’éditeur de couleur/couleur personnalisée pour noter ses trois valeurs RGB (red, green, blue = rouge, vert, bleu).
Ensuite il faut remplacer les trois nombres dans cette partie du script , exemple pour le rouge abracadabraPDF :
= [“RGB”, 163/255, 0/255, 0/255];
Si cette couleur est utilisée plusieurs fois on a tout intérêt à la mettre en variable :
var coulPerso = [“RGB”, 163/255, 0/255, 0/255];
else if(champimc >= 30) {event.target.textColor = coulPerso;}
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésPourquoi ?
Merlin
Maître des clésLe PGCD et le PPCM, mes cauchemars de collégien !
😉
Merlin
Maître des clésExemple ci-joint, le script est dans l’onglet Calcul, mais on peut aussi le mettre en Validation.
(C’est l’un ou l’autre, pas dans les deux)
if (event.value >= 4) {event.target.textColor = color.red;}
else {event.target.textColor = color.black;}
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésWaow !
Merlin
Maître des clésJe ne sais pas de quand date l’interdiction de “SS”.
(Joker)
Mais je me souviens que mon père a eu une voiture immatriculéee “QQ”, et qu’il s’est fait chambrer plus d’une fois.
😉
27 février 2025 à 22:04 en réponse à : Générer des nombres se trouvant dans une table commune #75524Merlin
Maître des clésBonjour
Je te propose encore la méthode “brutale” : si ça ne correspond pas on recommence !
var Nb1=(Math.floor(Math.random()*99))+1;
if (Nb1 < Nb1Min || Nb1 > Nb1Max) {var Nb1=(Math.floor(Math.random()*99))+1;}
var Nb2=(Math.floor(Math.random()*99))+1;
if (Nb2 < Nb2Min || Nb2 > Nb2Max) {var Nb2=(Math.floor(Math.random()*99))+1;}
Merlin
Maître des clés🙂
Merlin
Maître des clésBonjour
Le truc c’est d’attribuer aux cases à cocher (qui dans l’exemple sont en fait des boutons-radio) comme choix/valeur d’exportation des zéros et des uns pour pouvoir utiliser la fonction de calcul intégrée aux champ de texte.
J’ai utilisé la “Convention de dénomination des champs de formulaire” (voir : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/duplication-rapide-de-champs-de-formulaire/) pour additionner plus facilement le total des boutons-radio dans le champ Score.
Car ainsi il n’y a que le champ “parent” à cocher dans les champs à additionner, au lieu de devoir tout cocher un par un.
Exemple ci-joint.
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésSur les plaques d’immatriculation il y a une lettre interdite dans les paires O-Q et U-V pour raison de lisibilité, je ne sais plus lesquelles.
Par contre ce qui est interdit partout, y compris sur les plaques d’immatriculation c’est “SS”.
Mais s’agissant de trios de lettres, SS ne sera jamais seul, donc ça devrait passer.
(Et du coup je m’aperçois que ci-dessus j’ai oublié SUS 🙂 )
Merlin
Maître des clésJe croyais que la liste que tu as donné était juste un exemple, parce qu’il en manque :
LFI, SS, SA, NIK, CON, CUL, PUT, BIT, TEB, FDP, LOL… et on pourrait certainement en trouver encore plus.
Si tu veux vraiment faire de la censure il ne te restera plus beaucoup de lettres à disposition, auquel cas il vaudrait peut être mieux utiliser l’alphabet Grec.
Personellement je suis contre la censure, et puis ça égaiera certainement les cours.
😉
Merlin
Maître des clésJe ne me suis pas posé toutes ces questions, mon script est “brutal” : si une des conditions interdites est remplie il recommence au départ. Autant de fois que nécessaire.
Merlin
Maître des clésOui, mais comment sont nommées ces listes déroulantes ?
Merlin
Maître des clésDu coup j’ai testé avec Foxit Reader, la génération aléatoire des caractères y fonctionne bien.
Par contre comme on ne peut pas activer la console dans la version Reader je ne sais pas si le bouton démarrer y déclenche aussi une erreur.
Merlin
Maître des clésBonjour
C’est possible si l’utilisateur saisit “1.2.2025”, s’il ne saisit pas l’année en entier ça retourne une erreur (alerte de format).
Dans le ci-joint, clique dans le champ pour voir ce qui a été saisi.
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésBeau boulot !
Mais quand je teste, la console affiche une erreur chaque fois que je clique sur le bouton “Démarrer”.
Et comme les scripts de document sont fragmentés impossible de savoir d’où vient la “ligne 17” en question.
J’ai testé plusieurs fois et ce sont toujours les mêmes lettres “SKX” qui s’affichent dans le document, quelles que soient les valeurs de “pointsABC”.
(Capture jointe)
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésEssaye ça (chez moi ça fonctionne), l’idée c’est ce qu’il y a un doublon ou une association interdite on relance la fonction :
function generLettres() {
function generateRandomLetter() {
var randomValue = Math.random();
var randomCode = 65 + Math.floor(randomValue * 26);
return String.fromCharCode(randomCode);
}
var pointA = generateRandomLetter();
var pointB = generateRandomLetter();
var pointC = generateRandomLetter();
var str = pointA + pointB + pointC;
console.println("pointsABC: " + pointA + pointB + pointC);
if (pointA === pointB || pointA === pointC || pointB === pointC) {generLettres();} // dédoublonage
else if ((/PS|PC|FN|RN|FO|LR|PD|PQ|WC|GPT|PT/.test(str))) {generLettres();} // associations interdites
}
generLettres();
Merlin
Maître des clésBonjour
Je ne suis pas certain d’avoir tout compris mais a priori à partir du moment où on affecte une valeur (lettre) aléatoire à pointA, pointB et pointC on se fiche pas mal de la valeur de “points” puisqu’elle n’y change rien.
Ce qui nous donnerait :
function generateRandomLetter() {
var randomValue = Math.random();
var randomCode = 65 + Math.floor(randomValue * 26);
return String.fromCharCode(randomCode);
}
var pointA = generateRandomLetter();
var pointB = generateRandomLetter();
var pointC = generateRandomLetter();
console.println(pointA + pointB + pointC);
On pourrait ensuite détecter les paires interdites mais dis moi d’abord si ça convient.
Merlin
Maître des clésSalut
Programmatiquement il est impossible de savoir si un champ contient des scripts.
Merlin
Maître des clés“je ne comprend pas quel problème vous soulevez”
Le truc c’est que quand on utilise un script pour ajouter un script (de document ou d’objet) il faut que le script ajouté soit sous forme d’une chaîne de caractères (string), sans contenir de guillemets ni de caractères spéciaux qui pourrait la segmenter. Et donc rendre le script ajouté inutilisable.
Quand c’est un simple script d’une ou deux lignes, pas de souci. Mais quand c’est plus complexe il faut y faire attention.
Merlin
Maître des clésbabarth, dans ton document je crois que c’est “Texte converti avec caractères d’échappement pour les guillemets,” qui est le mieux.
Avec le même script de départ voilà ce que ça donne avec l’utilitaire de Thom Parker, qui ajoute aussi les tabulations et les sauts de lignes mais en fait ça ne sert à rien car les machines n’en tiennent pas compte de toute façon. Au mieux ça ne sert qu’aux humains qui veulent ensuite faire l’opération inverse.
"if (event.target.buttonGetCaption()==\"Montrer\") {\r\n\tthis.viewState={overViewMode:7};\r\n\tevent.target.buttonSetCaption(\"Cacher\");\r\n} else {\r\n\tthis.viewState={overViewMode:0};\r\n\tevent.target.buttonSetCaption(\"Montrer\");\r\n}"
Merlin
Maître des clésBonjour
Il faut que tu utilises un utilitaire pour convertir le script JavaScript en texte (une seule chaine de caractères), par exemple :
- https://jsstringconverter.bbody.io/
ou - https://algodaily.com/convert/javascript/text (inscription requise)
ou - https://www.pdfscripting.com/public/JavaScript-to-Text-Converter-Description.cfm (payant)
Merlin
Maître des clésJe te conseille de revenir à l’ancienne interface !
Suis le lien ci-dessous, c’est le message le plus posté, en anglais et en français, sur le forum d’Adobe ces trois dernières années : 😉
Essayez de revenir à l’interface utilisateur classique : https://community.adobe.com/t5/acrobat-discussions/acrobat-2023-how-to-revert-to-classic-gui-user-interface/td-p/14052807
Considérez le « nouvel Acrobat » comme une version bêta, de nombreuses fonctionnalités sont encore manquantes ou à moitié implémentées.
Merlin
Maître des clésBravo, beau boulot mais cette erreur s’affiche à l’ouverture du PDF :
TypeError: event.target.name is undefined
12:Document-Level:initEt je crois qu’il y a un problème dans la colonne “Groupe” (image jointe)
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésEn fait il n’y a qu’un seul Acrobat qu’on puisse installer.
Après s’être identifié dans le logiciel Creative Cloud avec son Adobe ID on obtient Acrobat Reader si on a un abonnement gratuit, ou bien on obtient Acrobat Pro si on a l’abonnement adéquat (ou Acrobat Standard).
C’est un seul et même logiciel qui déverrouile des fonctionnalités en fonction de l’abonnement correspondant à l’Adobe ID.
Merlin
Maître des clésTu vas dans l’onglet Applications, tu trouves Acrobat et tu cliques sur Installer.
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésbebarth = ce type est top !
Merlin
Maître des clésSalut
C’est typiquement une question pour bebarth, les array c’est mon cauchemar !
Merlin
Maître des clés🙂
Merlin
Maître des clésSi c’est pour le 1er avril n’hésites pas à mettre un champ image, avec un poisson.
🙂
Merlin
Maître des clésA priori c’est une ancienne version.
Vérifie son numéro dans le menu Aide : A propos d’Acrobat
Merlin
Maître des clésBonjour
Les spécifications des champs (Date y compris) dépendent des spécification du PDF (alias norme ISO-32000) pas des développeurs d’Acrobat.
Donc ils n’ont pas changés depuis Acrobat X, pour avoir un champ Date il faut aller dans Format : Date.
Leur particularité (par rapport aux listes par exemple) c’est qu’il faut cliquer dedans pour voir apparaitre le bouton et le calendrier.
PS : “Adobe X” et DC Pro” n’existent pas.
Il existe trois versions d’Adobe Acrobat pour Mac et PC (le suffixe DC a été supprimé il y a plus de deux ans) :
Adobe Acrobat Pro
Adobe Acrobat Standard
Adobe Acrobat Reader (gratuit, également disponible pour iOS et Android).Mal nommer les choses c’est ajouter au malheur du monde (Camus).
Merlin
Maître des clésBonjour
Je ne connais pas AEM, par-contre faute de pouvoir interdire l’impression, avec JavaScript on peut l’empêcher via les évènements “Document will print” (sera imprimé) et “Document did print” (a été imprimé).
Par exemple en affichant un calque blanc ou un champ blanc qui recouvre toutes les pages ou bien en faisant apparaitre un filigrane (watermark) avec l’évènement “Document will print” et en le faisant disparaitre en “Document did print”.
Bien entendu la politesse voudrait qu’une alerte soit ajoutée en “Document will print” pour avertir l’utilisateur qu’il n’obtiendra que des pages vierges. C’est toujours plus user-friendly.
Une fois le document validé il suffit de supprimer les scripts dans ces évènements.
Le calque ou les champs blanc c’est pour éviter le gaspillage de papier et d’encre si l’utilisateur persiste, mais si on veut être perfide on peut les remplir en noir ou avec plein de couleurs… 😉
Merlin
Maître des clés“personne ne possède la version Adobe, ils n’ont que Reader”
Il existe trois versions d’Adobe Acrobat pour Mac et PC :
- Adobe Acrobat Pro
- Adobe Acrobat Standard
- Adobe Acrobat Reader (gratuit, également disponible pour iOS et Android).
Mal nommer les choses c’est ajouter au malheur du monde (Camus).
Merlin
Maître des clésBonjour
Pour intégrer des photos, si j’en crois ton document d’exemple tu as bien compris comment faire.
Par-contre le problème c’est de les récupérer par la suite, c’est quasiment impossible car il faut passer par des solutions tortueuses, peu pratiques et donc pas du tout productives (et il faut Acrobat Pro).
Pour l’ajout de commentaires c’est plus simple, il faut utiliser des pages modèles masquées que l’utilisateur peut afficher via un bouton. Ça fonctionne très bien avec Acrobat Reader ou Foxit Reader.
Exemples et explications : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/dupliquer-dynamiquement-des-pages-dans-un-pdf/
Tu peux aussi chercher “pages modèles” ou “page template” sur ce forum.
Merlin
Maître des clésQuand une commande est suivie de deux parenthèses c’est une fonction :
resetForms()
afficheContour()
Certaines, comme la première ci-dessus, sont intégrées d’origine dans Acrobat (en script d’application dans le fichier “JSByteCode” qui est placé dans le dossier JavaScripts”), et les autres sont des fonctions personnalisées qui peuvent être placées soit en script d’application soit en script de document.
L’intérêt d’utiliser une fonction c’est de ne pas avoir à répéter le même code dans plusieurs champs ou à plusieurs endroits dans le document, et d’avoir un code qui s’exécute plus rapidemment car il est préchargé au lancement de l’application ou à l’ouverture du document.
Ça permet aussi de regrouper tous les scripts, ce qui facilite beaucoup la maintenance.
Merlin
Maître des clésBonjour
Si j’en crois le nom des fonctions qui sont dans le champ utilisé dans ton exemple ce document vient de chez moi. Il aurait fallu copier aussi les fonctions.
Mais il n’y a pas nécessairement besoin d’utiliser des fonctions.
Exemple ci-joint.
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésBonjour et bonne année
Quand on intègre les données d’un ou plusieurs formulaires dans un fichier Réponses et qu’on exporte ensuite en CSV on obtient les données dans les cellules, les noms des champs sont en tête des colonnes.
Si on exporte les données en FDF depuis chaque formulaire individuellement on obtient aussi les noms des champs, mais on ne peut pas les concaténer facilement.
Dans la maquette jointe je ne récupère que le chemin des fichiers, et leur dates de création, mais aucun champ.
Qu’est-ce que tu veux dire par “récupérer”, que fais tu exactement ?
Merlin
Maître des clésBonjour et bonne année
Je ne crois pas que ça change quelque chose point de vue vitesse d’exécution ou de chargement, mais je préfère tout mettre dans un seul script dans un seul fichier .JS, sauf quand il y a des images/icônes que je met à part car sinon on atteint vite la limite de 32000 caractères de l’éditeur d’Acrobat.
Je travaille en faisant des copier-coller depuis Notepad++, donc en une seule fois je met tout à jour.
Ca me permet d’avoir une vue globale de tous les scripts du document et donc de toutes les erreurs possibles. Par exemple quand je sélectionne un nom de variable ou n’importe quel mot, toutes ses occurrences sont mises en surbrillance, ce qui permet de les repérer facilement dans tous les scripts et toutes les fonctions.
C’est plus simple quand il faut minifier le script parce que je place toutes les variables en tête des scripts, donc je peux minifier seulement le code en un seul copier-coller. Parce-que quand on minifie le texte des variables (messages d’alerte…) les caractères Unicode redeviennent des caractères accentués/spéciaux de base, ce qui pose l’éternel problème Mac/PC.
Ca permet aussi au client de pouvoir les modifier facilement sans chercher (s’il a le niveau).
Et ainsi j’ai un seul fichier .JS en regard de chaque PDF (et avec le même nom), ça simplifie beaucoup la maintenance. Même si en vrai j’ai plutôt deux fichiers .JS : l’original bien détaillé et bien commenté, et la version minifiée incorporée dans le document final. Mais cette dernière n’est crée que quand tout est fini et testé, je ne la réutilise que rarement.
Merlin
Maître des clésJe n’ai pas trop de temps en ce moment car comme d’habitude tous les clients ont des urgences avant les vacances.
J’essaierai de trouver un peu de temps ce weekend.
En tout cas j’ai regardé ta vidéo et l’interface de PDF Expert m’a fait baver, tout est disponible directement à un seul clic dans le panneau des propriétés. Ça change d’Acrobat et de son interface des années 90 qui impose d’ouvrir plusieurs boites pour modifier une propriété !
“S’il faut passer par un hébergeur, par lequel dois-je passer?”
Voir : https://www.abracadabrapdf.net/forums/topic/envoyer-partager-poster-une-piece-jointe-volumineuse/
Merlin
Maître des clésMichel C. très franchement j’admire ce que tu fais, à double titre.
D’une part le côté apprentissage technique du PDF-JavaScript et ses à cotés, et d’autre part la passion pédagogique et le cœur que tu mets à transmettre le savoir à tes élèves en utilisant des technologies qui les intéressent*.
Bravo et joyeuses fêtes (sans élèves).
*J’imagine que parmi tes élèves il y a un groupe de petits malins qui cherchent à cracker tes documents, si ça trouve il y en a d’inscrits sur ce forum ! 😉
Merlin
Maître des clésDans renommer_champs_v01.pdf il n’y a pas de champs à renommer, et exercice_interactif-ok.pdf n’a pas été transféré car trop lourd.
Du coup on ne peut pas tester.
🙁
Merlin
Maître des clésBonjour
Non, je ne crois pas.
Sur les machines Apple il faudrait essayer avec PDF Expert, mais c’est une app payante.
Merlin
Maître des clés“@Merlin – Tu peux m’envoyer que aT-CompteurMots.js ou aT-NouveauDoc.js.”
Ayé !
Merlin
Maître des clésBonjour
Pareil, je peux t’envoyer les abracadabraTools en version originale (non minifiée).
Chaque plugin est indépendant, donc il vérifie d’abord la présence du menu “abracadabraTools”. S’il n’existe pas déjà il le crée, sinon il s’y intègre.
Merlin
Maître des clésJ’ai passé un bon moment à chercher… et il me semblait bien qu’il y avait comme une évidence que je ne voyais pas !
😉
Merlin
Maître des clésJe n’ai pas le temps de tout bien vérifier mais a priori le problème vient du nom des champs (this.getField(“Name.3.1”) et this.getField(“Name.3.2”)) qui sont utilisés dans le script en nom absolu.
Comme ils rentrent dans la boucle leur nom est modifié pendant l’exécution de celle-ci et ça provoque des incohérences.
Ça l’est moins quand on utilise P1 mais c’est flagrant quand on utilise P2, le retour de la Console est sans appel :
TypeError: this.getField(…) is null
12:Document-Level:Renommer_c(dans “Test-4.pdf”, ligne 12 du script sans commentaire, ou ligne 15 du script commenté, voir capture)
Il faut donc soit les exclure de la boucle, soit modifier leurs noms de sorte qu’ils ne rentrent pas dans la boucle.
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésBonjour
J’ai placé cette question dans un nouveau sujet pour plus de clarté.
Pour répondre à la question : je n’ai jamais utilisé FindChangeList.txt avec AppleScript, seulement avec les scripts JavaScript (.jsx).
Tout ce que je peux te dire c’est que le fichier FindChangeList.txt doit être placé dans le dossier FindChangeSupport qui se trouve au même niveau que le fichier FindChangeByList.jsx
A priori ça devrait être pareil pour les scripts AppleScript.
Attachments:
You must be logged in to view attached files.Merlin
Maître des clés“Il y a un truc que je ne comprend pas. Mon script fonctionne mais il y a toujours un champ qui n’est pas renommé…”
Il est toujours très difficile d’examiner des scripts non commentés, même quand on sait ce qu’ils sont supposés faire.
J’y jetterai un deuxième regard demain à tête reposée.
Merlin
Maître des clés“Par contre mon script ne fonctionne pas quand je souhaite “modifier” la partie 2 P2. J’ai une erreur à la ligne 28…”
Vu le dernier exemple je crois que tu as compris l’erreur entre nom du script (qui importe peu) et nom de la fonction.
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésBonjour
Non hélas, ni ses instructions (dont je suis l’auteur) ni ce script (fourni par Adobe) ne permettent de rechercher dans un style de paragraphe en particulier.
Tu pourrais peut-être trouver ton bonheur en utilisant ce script : Record Find Change
Merlin
Maître des clés“un nouveau problème rien ne fonctionne sur les mobiles !!!!!!!!!! une idée pourquoi ? c’est des simples boutons …”
En fait ce n’est pas nouveau, hélas.
Le support de JavaScript sur les mobiles est très très limité. Pour te donner une idée la documentation JavaScript d’Acrobat fait plus de 800 pages, celle d’Acrobat Mobile à peine une soixantaine.
“la personne qui m’a répondu est un des dirigeants d’une banque privée.”
Je travaille beaucoup avec les banques, suffisamment pour savoir que en général les postes sont équipés d’Acrobat Reader mais que le plus souvent l’utilisation de JavaScript est désactivée par le service informatique. Sécurité oblige.
“Le but est de faire du visuel et d’impressionner”
Dans ce cas le plus simple est d’utiliser InDesign, de faire des animations qui déchirent avec ses fonctions intégrées et/ou avec Express, de publier en ligne avec Publish On Line et de mettre un lien sur ton CV.
Le PDF a beaucoup de qualités (ce n’est pas moi qui dirait le contraire) mais en version interactive ce n’est pas un format diffusable de façon fiable.
Exemple que j’ai réalisé : https://indd.adobe.com/view/2a8f6f46-a53c-4fd4-851e-db3a5d906f6b
Exemple réalisé par JCTremblay : https://indd.adobe.com/view/16a62004-694d-442a-9650-000a6dd4d241
Et voir plus généralement : https://indd.adobe.com/view/c2c7aa96-405e-488f-8902-e1d96c1bea4f
Merlin
Maître des clésSinon fais moi passer ton document, avec Acrobat j’en aurai pour 2 minutes.
Merlin
Maître des clés“Je voulais renommer 30 champs : “Q.7.1” à “Q.7.30” qui se seraient appelés : “R.7.1″ à R.7.30”.”
Il y a beaucoup plus simple qu’un script, c’est une astuce bien cachée dans Acrobat (je ne sais pas pour PDF Expert).
Dans le panneau des champs il faut d’abord cliquer sur le bouton AZ pour afficher les champs dans l’ordre alphabétique.
À partir de là il apparaissent sous forme d’une arborescence qu’on déplie en cliquant sur les flèches, ce sont les points dans les noms qui séparent chaque niveau.
Il faut juste savoir qu’il suffit de double-cliquer sur un nom pour pouvoir renommer, on peut renommer la racine ou n’importe quel niveau en deux secondes. 😉
Attachments:
You must be logged in to view attached files.Merlin
Maître des clés“D’après plusieurs pro dans le domaine 3 minutes pour un CV “
Compte plutôt entre 10 et 20 secondes.
Il est généralement plus judicieux de présenter un CV “normal” et d’y mettre des liens vers les documents interactifs que tu veux présenter, ainsi s’il retient l’attention le recruteur prendra le temps d’aller voir.
“je ne sais pas supprimer des calques”
Acrobat est retors : il faut d’abord masquer le calque à supprimer et ensuite soit aplatir tous les calques soit le fusionner avec un autre, ce qui le fait disparaitre.
“la lecture des vidéos n’est pas activé par defaut”
Si Acrobat pouvait déjà juste lire les vidéos se serait bien, depuis la dernière mise à jour ça ne fonctionne plus !
Merlin
Maître des clésBonjour
L’expérience montre que la plupart des gens (et des recruteurs) affichent les PDF dans le logiciel par défaut (Aperçu sur Mac, Edge sur Windows, et “Pourave” sur mobile).
Donc pour qu’un CV soit lu et retenu il faut aller au plus simple pour être efficace.
En clair : zéro interactivité, parce qu’en plus s’ils comprennent que quelque chose ne fonctionne pas dans certains cas ce sera forcément de ta faute et à cause de ton “incompétence”. Ils ne remettront jamais en cause leur logiciel ni leurs pratiques.
Merlin
Maître des clésbebarth doit être en vacances.
J’ai retrouvé le sujet, le script y est en pièce jointe :
Merlin
Maître des clésNos messages se sont croisés (j’étais au téléphone avec un bavard).
Sinon, bebarth a créé un utilitaire de renommage des champs, je pense qu’il va t’en parler.
Merlin
Maître des clésBonjour
Il te faut télécharger la version d’essai de Qoppa PDF Studio qui permet de renommer plusieurs champs de formulaire à la fois, des centaines si besoin.
Comme cette version d’essai ajoute des filigranes l’astuce c’est de faire ça dans une copie du document PDF et ensuite de ramener les champs renommés dans le document original par copier-coller en ouvrant les 2 PDF avec Acrobat, ou avec PDF Expert.
Pour trouver cette fonction il faut sélectionner plusieurs champs à la fois et faire un clic-droit dessus : Sequential renaming (Je ne l’ai pas en français).
Attachments:
You must be logged in to view attached files.Merlin
Maître des clésBonjour
Ça m’en bouche un coin ! Je ne savais qu’il existait un logiciel capable faire ça (bien que dans Acrobat les items se placent à gauche quand on clique sur le menu).
Concernant Acrobat tu n’as rien raté, la réponse est non.
Merlin
Maître des clésSur mon PC ça fonctionne bien, sauf quand je veux jouer la même note deux fois de suite : pour la jouer une deuxième fois il faut cliquer deux fois de suite.
Je ne peux pas tester faute d’avoir les sons mais je me demande si tu ne devrais pas plutôt utiliser l’action souris relâchée.
Merlin
Maître des clés🙂
Merlin
Maître des clésBonjour
Il me semble que c’est un vieux bug de la version Mac, fais moi passer ton fichier que j’essaie sur PC.
Merlin
Maître des clésBonjour
” En fait, tout se passe à la création de ton champ image qui te propose un nom avec le suffixe “_af_image”.”
Ça c’est le comportement d’Acrobat, peut être que PDF Expert gère différemment.
En tout cas oui, il faut qu’il y ait une différence entre les noms car JavaScriptement on ne peut pas distinguer un bouton image d’un bouton en label/texte seul.
Merlin
Maître des clésEssaye ça :
if (nomChamp.indexOf("Aide.")==0) {
if (this.getField(nomChamp).type=="text" || (this.getField(nomChamp).type=="button" && nomChamp.indexOf("_af_image")>0)) this.getField(nomChamp).readonly=true;
else this.getField(nomChamp).readonly=false;
}
-
AuteurRéponses