Donnez vie à vos documents numériques !
 

Merlin

Toutes mes réponses sur les forums

Affichage de 99 réponses de 496 à 594 (sur un total de 10,151)
  • Auteur
    Réponses
  • en réponse à : Items sur plusieurs lignes dans un menu déroulant #70790
    Merlin
    Maître des clés

    bebarth a raison, ce n’est pas possible en utilisant l’interface d’Acrobat.

    Par-contre c’est possible si on utilise JavaScript pour remplir les items du menu en y insérant des sauts de ligne “\n”.

    Par exemple en exécutant ce script dans la Console JavaScript (copier dans la Console, tout sélectionner, appuyer sur la touche Entrée*) :

     

    this.getField("theme1").setItems(["Patiente avec progression au niveau\nviscéral après 2 lignes de traitement", "Patiente en rechute après 2 lignes de traitement avec notamment\nprésence de métastases cérébrales peu symptomatiques", "Etc."]);

     

    Exemple ci-joint.

     

    *Attention, la touche Entrée (Enter) n’est pas la touche Retour (Return) !

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Effacer une page #70749
    Merlin
    Maître des clés

    Plus exactement : il faut que la page a supprimer ait été dupliquée/générée (spawned) à partir d’une page modèle (en général masquée).

     

    Ça fonctionne aussi avec les versions de Foxit Reader postérieures à septembre 2021.

    Après que je leur ai signalé ce “défaut de fonctionnalité” en juin 2021 : belle réactivité, en plus de prendre la peine de m’en informer par email. Tous les éditeurs ne peuvent pas en dire autant… 😉

    en réponse à : Effacer une page #70740
    Merlin
    Maître des clés

    Bonjour

     

    Attention, ça fonctionne avec Acrobat Pro et Acrobat Standard mais pas avec Acrobat Reader, ni avec Foxit Reader.

    en réponse à : Case à cocher obligatoire #70737
    Merlin
    Maître des clés

    Bonjour

     

    Place ce script en action de document “(Quand) Le document sera enregistré” :

    var nCompt = 0;
    for (var i=0; i<this.numFields; i++) { var oChamp = this.getField(this.getNthFieldName(i)); if (oChamp != null && oChamp.required == true && oChamp.value == oChamp.defaultValue) {nCompt++;} } if (nCompt > 0) {
    app.alert("Merci de cocher tous les champs obligatoires sinon votre demande ne sera pas prise en compte.");
    }

     

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Prénom composé #70710
    Merlin
    Maître des clés

    👍

    en réponse à : PDF interactif type bon de commande #70689
    Merlin
    Maître des clés

    😀

    en réponse à : PDF interactif type bon de commande #70685
    Merlin
    Maître des clés

    Clic-droit sur un champ : Propriétés.

    Ou double-clic.

    Ou quand le champ est sélectionné : touche Entrée (Enter)

     

     

    Attachments:
    You must be logged in to view attached files.
    en réponse à : PDF interactif type bon de commande #70678
    Merlin
    Maître des clés

    L’idéal serait que dans le document InDesign tu puisses convertir les intitulés en autant de champs de textes indépendants. (Il existe des scripts pour InDesign, certains gratuits, qui découpent en un clin d’œil un bloc de texte multiligne en autant de blocs qu’il y a de lignes.)

     

    Si les intitulés/champs de texte sont placés sur la page à peu près en face des cases à cocher, lors de la conversion en PDF InDesign devrait les numéroter de façon synchrone.

    Ainsi le script de calcul du champ texte pourrait aller chercher automatiquement l’intitulé correspondant à chaque case cochée, ce qui éviterait de devoir (re)remplir la valeur des cases manuellement.

    en réponse à : PDF interactif type bon de commande #70674
    Merlin
    Maître des clés

    2. Il faut ajouter ce script en script de calcul dans le champ de texte, exemple ci-joint (je n’ai renseigné que les 3 premières cases).

    InDesign a une curieuse et peu pratique façon de nommer les champs de formulaires mais heureusement les cases à cocher ont toutes un point commun : leur nom contient “Case à cocher”.

     

    // CONCATÉNER LES VALEURS (str) DES COCHES DONT LE NOM CONTIENT "Case à cocher"
    var strTexte = "";
    for (var i = 0; i < this.numFields; i++) {
    var oFld = this.getField(this.getNthFieldName(i));
    if ((oFld.type == "checkbox") && (/Case à cocher/.test(oFld.name)) && oFld.value != "Off") {
    strTexte = strTexte + oFld.valueAsString + "\n";
    }
    }
    event.target.value = strTexte;

    Attachments:
    You must be logged in to view attached files.
    en réponse à : PDF interactif type bon de commande #70671
    Merlin
    Maître des clés

    1. Il faut donner à chaque case à cocher l’intitulé correspondant, c’est faisable avec InDesign ou avec Acrobat Pro.

    Voir captures jointes.

    Attachments:
    You must be logged in to view attached files.
    en réponse à : PDF interactif type bon de commande #70666
    Merlin
    Maître des clés

    Bonjour

     

    A priori la réponse est oui.

    Mais pour dire comment il faudrait en savoir plus et/ou que tu partages ce document.

    en réponse à : QR Code dynamique dans PDF interactif #70665
    Merlin
    Maître des clés

    Ça n’est pas possible, tous les logiciels qui ouvrent des fichiers PDF ne se valent pas, loin de là.

    Je te conseille la lecture de ce tuto :

    Forcer l’utilisation d’un PDF avec Acrobat Reader

     

    Cependant les champs de type Codebarre ne s’affichent pas dans Acrobat Reader, c’est voulu, mais ils fonctionnent quand même.

    Par-contre ils s’affichent très bien dans Foxit Reader…

    en réponse à : QR Code dynamique dans PDF interactif #70660
    Merlin
    Maître des clés

    Bonjour

     

    Concernant le message d’alerte la réponse est simple : coche “Ne plus afficher” et tu ne le verras plus.

    Ce message ne concerne que les codes-barres et de toute façon est périmé, le “Barcode Paper Form Solution” dont il parle est un vieux truc qui date du XXe siècle, ce n’est plus d’actualité.

    Un peu comme les fax.

     

     

    Pour le reste, réponse en images :

     

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Insérer une vidéo dans un PDF avec Acrobat DC #70653
    Merlin
    Maître des clés

    Bonjour

     

    Je n’ai pas essayé depuis l’avant-dernière version (32 bits) mais ça fonctionnait.

    Par-contre ça fait maintenant plus de deux ans, depuis l’abandon du support de Flash Player, qu’on attend qu’Adobe implémente la barre de contrôle.

    Parce-que quand ça fonctionne l’utilisateur ne peut que déclencher la vidéo, ou le son, et ensuite attendre que ça s’arrête. Faute d’avoir les boutons Pause, Arrêt, Retour, Avance, etc.

     

    Donc mon conseil en attendant qu’Adobe se réveille c’est de placer la vidéo en pièce jointe dans le PDF, ce qui a pour effet de la lancer en externe via le lecteur vidéo par défaut de l’ordinateur, et donc avec une barre de contrôle.

    Et sans avoir le problème des formats non reconnus par Acrobat, puisque que le lecteur par défaut gère tous les formats standards actuels.

    😎

    en réponse à : Ajouter le symbole M² dans la colonne d’un formulaire #70638
    Merlin
    Maître des clés

    Pourquoi ne pas remplacer event.value+=” M”+String.fromCharCode(0x00B2);
    par : event.value+=” M²”

     

    Parce-que si tu le fait sur Mac ça ne s’affichera pas correctement sur PC, Android et iOS, et si tu le fait sur PC ça ne s’affichera pas correctement sur Mac, Android et iOS.

    Voir : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/pdf-javascript-et-unicode/

    en réponse à : Création script avec plusieurs calculs différents #70631
    Merlin
    Maître des clés

    Bonjour

     

    Quand j’ouvre ce document la console m’affiche :

    TypeError: f is null
    2:Document-Level:New Script 1

    Parce-que le champ “DATE” s’appelle en fait : “03-DATE”.

     

     

    Le script de date à l’ouverture n’est pas bon, celui-ci devrait mieux fonctionner :

    f = this.getField("03-DATE");
    if (f != null && f.value == f.defaultValue)
    {f.value = util.printd("dd/mm/yy", new Date())};

     

     

    Pour répondre à ta question :

    var oChampCoche = this.getField("Classe de précision");
    var oChampText = this.getField("texte1");
    if (oChampCoche.value == 0.4) {event.value = (oChampText.value / 2) + 1;}
    else if (oChampCoche.value == 1.5) {event.value = (oChampText.value / 2) + 2;}
    else {event.value = ""}

     

    Ci-joint.

     

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Ajouter le symbole M² dans la colonne d’un formulaire #70619
    Merlin
    Maître des clés

    👍

    en réponse à : Script pour compter les champs restants à remplir #70610
    Merlin
    Maître des clés

    OK, je n’ai rien dit.

    😇

    en réponse à : Griser un label #70598
    Merlin
    Maître des clés

    Supprime le script de validation (qui ne sert à rien) et supprime le script de calcul (qui converti en capitales et qui donc fausse tout le reste).

     

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Griser un label #70594
    Merlin
    Maître des clés

    PS : le texte qui apparait en gris clair doit être placé en texte par défaut.

     

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Griser un label #70593
    Merlin
    Maître des clés

    Bonjour

     

    // À PLACER EN ACTION "CHAMP ACTIVÉ" (ON FOCUS)
    if (event.target.value == event.target.defaultValue) {
    event.target.value = "";
    event.target.textColor = color.black;
    event.target.textSize = 36;
    event.target.alignment = "left"; // à gauche
    }

    // À PLACER EN ACTION CHAMP DÉSACTIVÉ (ON BLUR)
    if (event.target.value == "") {
    event.target.value = event.target.defaultValue;
    event.target.textColor = color.ltGray; // gris clair
    event.target.textSize = 12;
    event.target.alignment = "center"; // centrer
    }

    en réponse à : Script pour compter les champs restants à remplir #70590
    Merlin
    Maître des clés

    Une telle liste est un non-sens ergonomique, comment un utilisateur pourrait-il se souvenir de la liste des noms de champs affichés s’il y en a plus de 3 ?

    Voir ci-dessus mon message du 6 janvier.

    en réponse à : Créer un bouton sauvegarder #70548
    Merlin
    Maître des clés

    👍

     

    Galactica : Je crois que le champ image serait mieux s’il était carré, sans contour et avec un redimensionnement proportionnel de l’image.

    Carré parce-que ça permet des images dans les deux sens H et V, et aussi les images carrées.

    Redimensionnement proportionnel pour éviter de déformer les visages.

    Sans contour pour éviter l’effet moche entre le bord de l’image et le cadre si l’image n’est pas carrée.

     

     

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Valider une saisie par la touche entrée #70530
    Merlin
    Maître des clés

    bebarth wrote:
    Je ne comprends pas pourquoi « if (event.commitKey == 13… » ???

    Moi non plus.

     

    en réponse à : Valider une saisie par la touche entrée #70525
    Merlin
    Maître des clés

    👌

    en réponse à : Valider une saisie par la touche entrée #70519
    Merlin
    Maître des clés

    Bonjour

     

    Dans le champ “Result” j’ai déplacé le script en Validation et je l’ai un peu modifié.

    J’ai aussi ajouté une instruction dans le script du bouton “Générer”.

     

     

    Attachments:
    You must be logged in to view attached files.
    en réponse à : affichage ligne suivante. #70515
    Merlin
    Maître des clés

    Moi je l’ai vu, c’est déjà ça 😉

    Merci.

    en réponse à : affichage ligne suivante. #70513
    Merlin
    Maître des clés

    Merci, mais n’hésites pas : moins on a l’habitude de publier et plus ça parait sincère quand on le fait.

    😎

    en réponse à : affichage ligne suivante. #70511
    Merlin
    Maître des clés

    On ne peux pas te donner tort.

    😉

    en réponse à : affichage ligne suivante. #70506
    Merlin
    Maître des clés

    Merci pour les compliments !

    Si tu pouvais publier les mêmes sur Twitter, LinkedIn, Facebook, etc. ce serait extra.

    😎

    en réponse à : affichage ligne suivante. #70497
    Merlin
    Maître des clés
    en réponse à : affichage ligne suivante. #70474
    Merlin
    Maître des clés

    appelle la en « script de touche personnalisé » dans chacun des champs

     

    Pour le faire en un clin d’œil copie-colle ce script dans la Console, sélectionne tout et appuie sur la touche Entrée (ne pas confondre avec Retour) :

     

    for (var i = 0; i < this.numFields; i++) {

    var oFld = this.getField(this.getNthFieldName(i));
    if ((oFld.type == "text") && (/ac/.test(oFld.name))) {
    oFld.setAction("Keystroke", "formatChiffre()");
    }

    }

    en réponse à : affichage ligne suivante. #70473
    Merlin
    Maître des clés

    je n’ai pas pu formater les champs en nombre car cela crée une erreur (je pense qu’un champ nombre ne peut pas contenir la valeur vide « ».

     

    C’est exactement ça.

    Ajoute cette fonction et appelle la en “script de touche personnalisé” dans chacun des champs.

    Elle n’autorise que la saisie de chiffres mais elle n’empêche pas “rien”.

     

    function formatChiffre() {
    var regxp=/^[0-9]$/;
    if (event.willCommit==false) {
    if (event.change.length>0 && regxp.test(event.change)==false) {
    app.beep();
    event.rc=false
    }
    }
    }

    en réponse à : affichage ligne suivante. #70472
    Merlin
    Maître des clés
    en réponse à : affichage ligne suivante. #70470
    Merlin
    Maître des clés

    Avec le script de bebarth ça fonctionne bien.

    Dans le ci-joint j’ai mis la fonction en action “onBlur”, j’ai supprimé les calculs et j’ai optimisé le script de reset.

     

    function affLigne() {
    for (var i=0; i<=19; i++) {
    eval("var ac"+i+" = this.getField(\"ac."+i+"\").value");
    }

    if (ac0 != "" | ac1 != "" | ac2 != "" | ac3 != "" ) {
    for (var k = 4 ; k<8 ; k++) {
    this.getField("ac."+k).display = display.visible;}}

    if (ac4 != "" | ac5 != "" | ac6 != "" | ac7 != "" ) {
    for (var l = 8 ; l<12 ; l++) {
    this.getField("ac."+l).display = display.visible;}}

    if (ac8 != "" | ac9 != "" | ac10 != "" | ac11 != "" ) {
    for (var m = 12 ; m<16 ; m++) {
    this.getField("ac."+m).display = display.visible;}}

    if (ac12 != "" | ac13 != "" | ac14 != "" | ac15 != "" ) {
    for (var n = 16 ; n<20 ; n++) {
    this.getField("ac."+n).display = display.visible;}}

    }

    Attachments:
    You must be logged in to view attached files.
    en réponse à : affichage ligne suivante. #70460
    Merlin
    Maître des clés

    L’ordre d’exécution des événements dans les champs de formulaire PDF

     

    https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/lordre-dexecution-des-evenements-dans-les-champs-de-formulaire-pdf/

    en réponse à : affichage ligne suivante. #70457
    Merlin
    Maître des clés

    Bonjour

     

    1 Il faudrait placer le script en script de validation, pas en script de calcul.

    De plus tous les scripts et actions de calcul de tous les champs d’un document se déclenchent tous à chaque fois qu’un champ du document, y compris les boutons, passe par l’état “champ désactivé”. Ce qui peut vite devenir pénalisant en terme de performances et d’expérience utilisateur.

    Les scripts de calculs sont à éviter autant que possible.

     

    2 Pour moi une variable qui n’est utilisée qu’une seule fois et qui ne change pas de valeur ne sert à rien d’autre qu’à encombrer la mémoire, en tel cas je mettrais les noms de champs directement dans les conditions if.

     

    3 C’est possible mais je préfère toujours faire comme toi car je trouve que c’est trop prise de tête.

    Par-contre dans ce cas précis la double numérotation des suffixes serait avec toi puisqu’elle rendrait les boucles inutiles. Si les champs étaient nommés comme les champs “ab” de la capture ci-jointe, pour afficher la deuxième rangée tu pourrais utiliser :

    this.getField("ab.1").display = display.visible;

    Qui affiche tous les champs enfants du champ virtuel “ab.1”, peut importe leur nombre.

     

    • Cette réponse a été modifiée le il y a 2 années et 5 mois par Merlin.
    Attachments:
    You must be logged in to view attached files.
    Merlin
    Maître des clés

    Oui ne regrette pas trop, pas de JavaScript et une curieuse façon de mémoriser les paramètres.

    C’est une implémentation un peu bancale, mais c’est hélas d’origine.

    en réponse à : Affichage du haut d’une page #70433
    Merlin
    Maître des clés

    Bonjour.

     

    Quand on envoie vers une page via JavaScript le haut de la page ciblée est toujours visible.

     

    // NAVIGATION DANS LES PAGES D'UN DOCUMENT PDF
    // EN JAVASCRIPT LES NUMÉROTATIONS COMMENCENT À ZÉRO, LE NUMÉRO DE LA PAGE CIBLE EST DONC TOUJOURS ÉGAL À N-1

    // aller à la vue précédente*
    app.execMenuItem("GoBack");

    // aller à la page précédente
    this.pageNum--;

    // aller à la page suivante
    this.pageNum++;

    // aller à la dernière page
    this.pageNum = this.numPages - 1;

    // aller à la première page
    this.pageNum = 0;

    // aller à la page 4
    this.pageNum = 3;

    en réponse à : Changer la couleur des textes lors de l’impression #70432
    Merlin
    Maître des clés

    Bonjour Jean-Claude

     

    // CHANGER LA COULEUR DES TEXTES (PAR DÉFAUT) LORS DE L'IMPRESSION

    // ACTION DOCUMENT WILL PRINT
    var bSale = this.dirty;
    for (var i=0; i<this.numFields; i++) {
    var oFld = this.getField(this.getNthFieldName(i));
    if (oFld.type == "text" && oFld.value == oFld.defaulValue) {
    oFld.value = "";
    }
    }
    this.dirty = bSale;

    // ACTION DOCUMENT DID PRINT
    var bSale = this.dirty;
    for (var i=0; i<this.numFields; i++) {
    var oFld = this.getField(this.getNthFieldName(i));
    if (oFld.type == "text" && oFld.value == "") {
    oFld.value = oFld.defaulValue;
    }
    }
    this.dirty = bSale;

    Merlin
    Maître des clés

    Attention : pour cette dernière étape il faut utiliser l’outil Main (mode saisie).

    Attention aussi : il faut que les champs restent remplis (même avec une espace) car sinon ces propriétés ne sont pas enregistrées.

     

    Attachments:
    You must be logged in to view attached files.
    Merlin
    Maître des clés

    Bonjour

     

    Réponse en images.

     

     

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Codes postaux en liaison sur deux casses #70398
    Merlin
    Maître des clés

    Je les ai toutes dans l’ordre chronologique, c’est peut être un problème d’horloge ?

    en réponse à : Codes postaux en liaison sur deux casses #70391
    Merlin
    Maître des clés

    PS : Bizarre, ma réponse est bien la dernière mais n’est pas située après l’avant-dernière de Merlin !!!

    Reload !   🔄

    😉

    en réponse à : Codes postaux en liaison sur deux casses #70382
    Merlin
    Maître des clés

    C’est un paradoxe, pour aider à la saisie de noms de villes à l’orthographe “compliquée” on se retrouve avec un problème avec les noms “simples” qui sont utilisés par plusieurs villes. 🤔

     

    Faute d’avoir une solution j’ai un autre (petit) problème à ajouter : certaines villes partagent un même code postal, si par exemple je cherche Labeaume par son code postal (07120) c’est la ville de Pradons qui s’affiche (c’est la première qui utilise le 07120 dans l’ordre alphabétique inverse).

    De mémoire il y a au moins 5 villes qui partagent ce code postal…

     

    Il va falloir faire confiance au bon sens de l’utilisateur.

    🙏

    en réponse à : Codes postaux en liaison sur deux casses #70375
    Merlin
    Maître des clés

    en réponse à : Saisie mode de passe #70349
    Merlin
    Maître des clés

    Bonjour

     

    Un dessin vaut mieux qu’un long discours :

    (attention quand même, la valeur d’un champ “mot de passe” n’est jamais exportée avec les autres données)

     

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Nombres aléatoires #70339
    Merlin
    Maître des clés

    👍

    en réponse à : Calcul date automatique j+1, j+2, j+3…. #70317
    Merlin
    Maître des clés

    “j’ai testé et cela fonctionne sur Adobe mais toujours pas sur notre logiciel. J’essaye de comprendre…”

    A priori la réponse est simple (et peu plaisante) : ce logiciel ne supporte pas toutes les fonctionnalités d’ECMAScript.

    Voir : https://www.abracadabrapdf.net/format_pdf/normes_iso_et_pdf/norme-iso-ecmascript-for-pdf/

    en réponse à : Script pour compter les champs restants à remplir #70316
    Merlin
    Maître des clés

    “C’est effectivement une méthode que je n’utilise pas, et ici elle ne convient pas !”

    Oui, je n’avais pas fait attention aux cases. 😩

     

     

    “Quel script peut-on mettre dans l’onglet « Actions » du champ de texte pour afficher un pop up qui liste le contenu des infobulles des champs non complétés ?”

    Le plus simple, le plus ergonomique et le plus intuitif pour l’utilisateur final c’est de mettre un contour rouge aux champs obligatoires, contour qui devient transparent quand le champ est rempli. C’est très visuel, ça lui permet de voir l’avancement du remplissage au fur et à mesure et ça lui évite de chercher un intitulé (infobulle) obscur dans un document qui est farci d’intitulés de partout.

    Et ça évite au développeur de devoir gérer des listes, des noms et un champ supplémentaire à affichage variable.

     

    Pour faire ça dans chaque champ obligatoire je met un script en action “champ désactivé” qui vérifie si un “event” a eu lieu ou qui vérifie si le champ a été rempli, et qui change la couleur de contour en fonction du résultat.

    en réponse à : Script pour compter les champs restants à remplir #70287
    Merlin
    Maître des clés

    bebarth, tu crées des scripts astucieux qui m’épatent, mais là je crois que tu te casses la tête pour rien. 😉

    Pour savoir si un champ a été rempli ou coché il n’y a pas besoin de savoir ce qu’il contient ni de savoir de quel type il est, il suffit de comparer sa valeur active avec sa valeur par défaut.

    On peut donc simplifier le script ainsi :

     

    var nbChps=0;
    // Vérifie tous les champs du document
    for (var i=0; i<this.numFields; i++) {
    var f = this.getField(this.getNthFieldName(i));
    // si le champ est obligatoire ET si sa valeur est égale à sa valeur par défaut
    if (f.required==true && f.value == f.defaultValue) {nbChps++}
    }
    // Affichage du message
    if (nbChps!=0) {
    if (nbChps==1) app.alert("Un champ n'est pas rempli.",3);
    else app.alert(nbChps+ " champs ne sont pas remplis.",3);
    }

    en réponse à : Saisie de l’identité avec boite dialogue #70277
    Merlin
    Maître des clés

    Bonjour

     

    C’est le problème inverse de celui de l’autre jour, dans cette ligne :

    var results = dialog.store();

    la variable “results” est déclarée avec “var”, ce qui en fait une variable locale (qui n’existe que dans et pour la fonction).

    Du coup le script qui s’exécute dans le bouton juste après la fonction n’a pas accès à cette variable et donc ne peut pas remplir le champ texte.

     

    Pour que le script du bouton puisse accéder à cette variable il faut la déclarer comme globale, et donc remplacer la ligne ci-dessus par :

    results = dialog.store();

     

     

    Par ailleurs il me semble qu’il y a un petit bug (humain) dans la boite de dialogue :

    😀

     

    Attachments:
    You must be logged in to view attached files.
    en réponse à : [Protection] Comment font ils? #70269
    Merlin
    Maître des clés

    “j’aimerais verrouiller mes formulaires de façon efficace comme ce fichier que l’on trouve disponible sur le net”

    Et pour finir, le fichier que tu cites n’est pas protégé ni chiffré ni verrouillé.

    C’est juste que tu n’as pas le logiciel nécessaire pour l’ouvrir et le modifier.

    😎

    en réponse à : [Protection] Comment font ils? #70268
    Merlin
    Maître des clés

    “Lorsque je verrouille mes fichiers via mon logiciel d’édition, il est assez facile de les déverrouiller via certains sites web, même lorsque je spécifie un mot de passe complexe.”

    Ce qu’on appelle souvent à tort des “protections” ne sont en fait que des “restrictions d’usage”. En réalité ce sont des instructions ajoutées au fichier et qui indiquent les restrictions à appliquer.

    L’ennui c’est qu’il suffit tout simplement d’ignorer ces instructions pour ignorer les restrictions d’usage, c’est ce que font tous les services en ligne qui proposent de “déverrouiller” un PDF.

     

    La vraie protection “simple” fournie de base avec Acrobat, avec un vrai chiffrement total du fichier, c’est la protection par mot de passe à l’ouverture. Mais ça ne conviendra pas dans ton cas car quand on a ledit mot de passe on a pleinement accès à tout le contenu du fichier.

    en réponse à : [Protection] Comment font ils? #70267
    Merlin
    Maître des clés

    “Je suis enseignant et je fais quelques contrôles sous forme de formulaires pdf et je ne veux pas qu’un jour certains petits malins trouvent qu’avec un logiciel d’édition pdf on peut avoir toutes les réponses.”

    Ne t’inquiètes pas, ils sont déjà tous au courant. 😉

     

    La protection d’un document est toujours un compromis entre sécurité et facilité d’utilisation.

    Les formulaires XFA-PDF n’ont de PDF que le nom, leur structure n’a en fait rien à voir avec le format PDF, s’ils ont le suffixe “.pdf” c’est juste pour permettre directement leur ouverture avec Acrobat (les XFA-PDF ne fonctionnent dans aucun autre logiciel et ne fonctionnent pas du tout sur mobile).

     

    Dans ton cas il y aurait deux “vraies” possibilités de protection, mais il faudrait faire des sacrifices :

    • utiliser la fonction “Envoyer pour signature” pour envoyer les contrôles aux élèves. La protection est totale mais les formulaires “Adobe Sign” ne peuvent pas contenir d’actions ni de calculs ni de JavaScripts, juste de “bêtes” champs à remplir…
    • utiliser la protection par Certificat, ça ne fonctionne qu’avec Acrobat (y compris sur mobile) et c’est assez lourd à mettre en place car chaque élève doit avoir son fichier “ID numérique” et toi tu dois avoir le certificat d’échange (ou “certificat d’identité approuvé”) de chaque élève pour pouvoir leur envoyer un document protégé (de plus il faudrait les envoyer un par un).
      Voir : https://www.abracadabrapdf.net/ressources-et-tutos/protection-ressources/protection-par-certificat/

     

    Donc le plus simple à mon avis serait de te contenter de la minification et de revoir le fonctionnement de ton formulaire.

    Par exemple en privilégiant de simples champs à remplir plutôt que des listes contenant déjà la bonne réponse, etc.

    Une autre possibilité serait de cacher les réponses dans les scripts en les noyant dans un flot de texte inutile et en les rédigeant en Unicode, de façon à rendre tout “piratage” très complexe, donc non rentable et peu intéressant.
    Voir : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/pdf-javascript-et-unicode/

    en réponse à : Problème avec des boucles for #70263
    Merlin
    Maître des clés

    Il y a un message à l’ouverture du fichier « L’arborescence de la page contient un noeud incorrect. ».

    C’est un problème de structure du document, ce n’est pas lié aux champs de formulaire ni à JavaScript.

    en réponse à : Problème avec des boucles for #70262
    Merlin
    Maître des clés

    c’est ce qu’on appelle une collision de variables

    On peut aussi éviter les collisions en plaçant le mot “var” devant la variable lors de sa déclaration, ainsi on utilise une variable “locale” et non pas une variable “globale”.

    en réponse à : Problème avec des boucles for #70250
    Merlin
    Maître des clés

    Bonjour et bonne année

     

    Ces boucles utilisent une variable nommée “i”.

    Tous les champs “diff.n” utilisent chacun un script de calcul qui utilise aussi une variable nommée “i”.

    Un script de calcul se déclenche à chaque fois qu’un champ du document passe par l’état “désactivé”, que l’action vienne d’un humain ou d’un script.

     

    Ce qui a deux conséquences :

    • la variable “i” des boucles est immédiatement interceptée et modifié par le premier calcul déclenché, c’est ce qu’on appelle une collision de variables et c’est pour ça que les boucles ne fonctionnent que sur la première itération.
    • à chaque fois qu’un champ est modifié cela déclenche les 52 calculs des champs “diff.n” (et il y a peut être d’autres calculs ailleurs, je n’ai pas vérifié).
      Donc quand on boucle sur 52 champs cela fait 52 x 52 calculs à effectuer : c’est pour ça que ça rame.

     

    Ci-joint, j’ai remplacé “i” par “t” dans les boucles de remplissage et de reset. Dans la mesure où le remplissage et le reset des champs n’est effectué qu’une fois (ou deux) par l’utilisateur on peut considérer le temps de latence comme acceptable. Sinon il faudrait “pousser” les valeurs depuis chaque menu déroulant correspondant, au lieu de les “tirer” avec un calcul.

    J’ai aussi ajouté une protection qui empêche les script de s’arrêter si un champ n’existe pas.

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Liste de choix 2 niveaux #70229
    Merlin
    Maître des clés

    1 Il y a une erreur dans cette ligne :

    if ((event.target.type == "combobox" && event.name == "Format") || (event.target.type == "listbox" && event.name == "Keystroke")) {

     

    À remplacer par :

    if ((event.target.type == "combobox" && event.name == "Keystroke") || (event.target.type == "listbox" && event.name == "Keystroke")) {

     

    2 Le script devrait être placé en script de “Touche personnalisé” et non pas en script de Format (un script de Format ne modifie que l’affichage, pas la valeur elle-même. Ce qui explique que la valeur du 2e menu revienne toujours à sa valeur par défaut).

     

    Ci-joint.

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Champs obligatoires (boutons radio) multipage et valeurs #70212
    Merlin
    Maître des clés

    Une autre solution simple : dans le champ “résultat” afficher un message (en rouge*) expliquant qu’il faut que tout soit coché pour déclencher l’affichage du résultat.

    Et y afficher le résultat à la place du message quand tout est OK.

     

     

    • On peut aussi le faire clignoter si besoin 😉
    Merlin
    Maître des clés

    Bonjour

     

    Si par “document joints” tu entends “pièces jointes du document PDF” il y a moyen de faire autrement, on peut facilement afficher une pièce jointe, surtout si elle est en PDF.

    en réponse à : Champs obligatoires (boutons radio) multipage et valeurs #70207
    Merlin
    Maître des clés

    On ne peut (heureusement) pas empêcher un utilisateur d’enregistrer un document, par contre au moment où il enregistre rien n’empêche de lui afficher un message explicatif si tout n’est pas rempli.

     

    en réponse à : Champs obligatoires (boutons radio) multipage et valeurs #70194
    Merlin
    Maître des clés

    Bonjour

     

    Je ne suis pas certain de bien comprendre la question.

    Vu comme ça pour moi il y aurait deux solutions, soit rendre tous les boutons-radios obligatoires, soit ne déclencher le calcul final que quand tous les groupes de boutons-radio sont cochés.

    Cette dernière solution étant à mon avis la plus fiable et la plus logique car elle n’afficherait pas un résultat faux ou partiel lors de la saisie utilisateur.

    en réponse à : Problème pour poster #70193
    Merlin
    Maître des clés

    Bonjour

     

    Si tu as réussi à poster ici il n’y a pas de raison que ça ne fonctionne pas ailleurs…

    En tous cas tu peux toujours poster ta question ici, il y sera répondu même si je n’arrive pas à la déplacer.

    😎

    en réponse à : PDF interactif sur site web #70188
    Merlin
    Maître des clés

    C’est possible si et seulement si l’utilisateur utilise Firefox et le plugin Acrobat.

    Autant dire qu’on perd la plus grande partie des utilisateurs avant même d’avoir commencé.

     

    Il existe une autre méthode : forcer le téléchargement du PDF et forcer son ouverture avec Acrobat ou Foxit Reader.

    Voir :

    en réponse à : Export de la valeur d’un champ texte #70177
    Merlin
    Maître des clés

    👍

    en réponse à : Export de la valeur d’un champ texte #70173
    Merlin
    Maître des clés

    Bonjour

     

    Il y a deux problèmes :

     

    1- Dans la première ligne du script

    str = event.target.value;

    signifie “la valeur du champ du champ actif”, c’est à dire la valeur déjà affichée par ce champ.

    Alors que

    str = event.value;

    signifie “la valeur qui vient d’être saisie”, ce qui n’est généralement pas la même chose.

    Donc il faut remplacer la 1re ligne ci-dessus par la 2e.

     

    2- L’emplacement du script n’est pas bon.

    Un script de Format ne change jamais la “vraie” valeur d’un champ, il ne change que l’affichage de cette valeur (il faut penser aux formats de Date : la date ne change pas, c’est seulement sa présentation qui change).

    Donc dans ce cas il faut utiliser un script de Validation, qui modifie vraiment la valeur saisie.

     

    Ce tuto devrait t’aider à y voir plus clair dans l’ordre d’enchainement des évènements :

    L’ordre d’exécution des événements dans les champs de formulaire PDF

     

    • Cette réponse a été modifiée le il y a 2 années et 6 mois par Merlin.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Script qui a l’air de marcher mais… #70169
    Merlin
    Maître des clés

    Ceci pourrait peut être aider à répondre à ta dernière question (dont je ne connais pas la réponse) :

    Calcul date automatique j+1, j+2, j+3….

    en réponse à : Script qui a l’air de marcher mais… #70165
    Merlin
    Maître des clés

    Le problème c’est la boucle :

    for (var i = 0; i < this.numFields; i++) {

     

    this.numFields ça veut dire : nombre de champs contenus dans le document (199 dans ce document).

    Les champs à calculer sont nommés avec des suffixes qui vont de  xxxxx.0  à  xxxxx.52

    Comme il y a plus que 52 champs dans le document quand “i” arrive à la valeur 53 ça provoque une erreur puisque ces champs n’existent pas (en JavaScript “null” ça veut dire : n’existe pas).

     

    Donc il faut remplacer la ligne ci-dessus par celle-ci, qui indique zéro comme valeur de départ et 52 comme valeur à ne pas dépasser :

    for (var i = 0; i < 53; i++) {

     

     

    • Cette réponse a été modifiée le il y a 2 années et 6 mois par Merlin.
    en réponse à : Script qui a l’air de marcher mais… #70159
    Merlin
    Maître des clés

    Bonjour

     

    “Le champ n’existe pas” parce-que tu fais faire une boucle au script alors qu’il n’y a que des champs “.0“, donc pas besoin de boucle ni de “+i“.

     

    if (this.getField("CheckBox.0").value == "A" & this.getField("TheckBox.0").value != "D") {
    app.alert({cMsg:"Attention, les apprentis ne peuvent pas être au lycée quand les élèves sont en PFMP ou en vacances", nIcon:2});
    this.getField("CheckBox.0").value = "Off"
    }

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Plan de table #70158
    Merlin
    Maître des clés

    Si jamais tu avais peur de t’ennuyer pendant les fêtes il y a d’autres ressources listées ici :

    Ressources PDF-JavaScript

     

    🤓

    en réponse à : Couleurs #70151
    Merlin
    Maître des clés

    Tu as raison de préciser qu’il est inutile d’exécuter les 53 scripts; J’avais remarqué que lorsque j’ai un pdf dans lesquels trop de champs contiennent des scripts

    C’est pour ça que mon exemple n’utilise qu’un seul script de calcul dans un seul champ.

    😎

     

     

    Ce que tu appelle script de touche personnalisée

    Voir capture jointe et voir aussi ce tuto, mais je ne connais pas les équivalences avec PDF XChange Editor Plus  :

    L’ordre d’exécution des événements dans les champs de formulaire PDF

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Couleurs #70142
    Merlin
    Maître des clés

    Bonjour

     

    1. C’est parce-que les couleurs ne sont pas référencées correctement il manque /255, voir le script ci-dessous. Si la 1re fonctionnait c’est parce qu’elle n’utilisait que 255 et 0, si la dernière fonctionne c’est parce-que c’est une couleur nommée.

    2. Il faut placer le script à la suite du calcul existant dans le bouton CALCUL, voir le ci-joint.

     

    for (var j = 0; j < 53; j++) {

    if (this.getField("diff."+j).value === 0) {
    this.getField("diff."+j).fillColor = color.transparent;}

    else if (this.getField("diff." +j).value === 1) {
    this.getField("diff."+j ).fillColor = ["RGB", 0/255, 255/255, 0/255];}

    else if (this.getField("diff." +j).value === 2) {
    this.getField("diff."+j ).fillColor = ["RGB", 255/255, 205/255, 0/255];}

    else if (this.getField("diff." +j).value === 3) {
    this.getField("diff."+j ).fillColor = ["RGB", 255/255, 180/255, 0/255];}

    else if (this.getField("diff." +j).value === 4) {
    this.getField("diff."+j ).fillColor = ["RGB", 255/255, 149/255, 0/255];}

    else if (this.getField("diff." +j).value === 5) {
    this.getField("diff."+j ).fillColor = ["RGB", 255/255, 122/255, 0/255];}

    else if (this.getField("diff." +j).value === 6) {
    this.getField("diff."+j ).fillColor = ["RGB", 255/255, 102/255, 0/255];}

    else if (this.getField("diff." +j).value === 7) {
    this.getField("diff."+j ).fillColor = ["RGB", 255/255, 77/255, 0/255];}

    else if (this.getField("diff." +j).value === 8) {
    this.getField("diff."+j ).fillColor = ["RGB", 255/255, 54/255, 0/255];}

    else if (this.getField("diff." +j).value === 9) {
    this.getField("diff."+j ).fillColor = ["RGB", 255/255, 37/255, 0/255];}

    else if (this.getField("diff." +j).value === 10) {
    this.getField("diff."+j ).fillColor = color.red;}

    else {this.getField("diff."+j ).fillColor = color.transparent;}

    }

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Checkbox #70136
    Merlin
    Maître des clés

    Je crois que le script est plus logique et plus compréhensible ainsi, j’ai changé le nom des variables :

     

    var comptA = 0;
    var comptB = 0;
    var comptC = 0;

    // Itération de tous les champs du document
    for (var i = 0; i < this.numFields; i++) {

    var oFld = this.getField(this.getNthFieldName(i));
    // si le champ est de type "checkbox" et si son nom contient "CheckBox" et si sa valeur n'est pas nulle
    if ((oFld.type == "checkbox") && (/CheckBox/.test(oFld.name)) && (oFld.value != "Off")) {

    if (oFld.value == "A") {comptA += 1;}
    if (oFld.value == "B") {comptB += 1;}
    if (oFld.value == "C") {comptC += 1;}
    }
    }

    this.getField("LT").value = comptA;
    this.getField("ET").value = comptB;
    this.getField("VT").value = comptC;

    en réponse à : Checkbox #70133
    Merlin
    Maître des clés

    var compt0 = 0;
    var compt1 = 0;
    var compt2 = 0;

    // Itération de tous les champs du document
    for (var i = 0; i < this.numFields; i++) {

    var oFld = this.getField(this.getNthFieldName(i));
    // si le champ est de type "checkbox" et si son nom contient "CheckBox" et si sa valeur n'est pas nulle
    if ((oFld.type == "checkbox") && (/CheckBox/.test(oFld.name)) && (oFld.value != "Off")) {

    if (oFld.value == "A") {compt0 += 1;}
    if (oFld.value == "B") {compt1 += 1;}
    if (oFld.value == "C") {compt2 += 1;}
    }
    }

    this.getField("LT").value = compt0;
    this.getField("ET").value = compt1;
    this.getField("VT").value = compt2;

    en réponse à : Checkbox #70131
    Merlin
    Maître des clés

    Ci-joint, le script se trouve dans le champ masqué “CALCUL”.

     

    Pour que des cases à cocher fonctionnent comme des boutons-radios il faut que chaque rangée (par exemple) de cases ait le même nom et une valeur d’exportation différente, comme dans le ci-joint.

    Le script fait les totaux en fonction de la valeur d’exportation de chaque coche, s’il y en a une (valeur).

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Checkbox #70129
    Merlin
    Maître des clés

    Dans mon premier message, le fichier est attaché, je suis le seul à le voir ?

    OTAN pour moi, je m’étais concentré sur le 2e message. 😵

    Ton document à l’air bien inutilement compliqué, je répondrai plus longuement demain.

    en réponse à : Dupliquer actions d’un bouton #70128
    Merlin
    Maître des clés

    Sinon tu peux utiliser JavaScript, en modifiant un tout petit peu cet exemple ça devrait le faire :

    Script pour ajouter un bouton avec action Page suivante sur fichiers pdf

    en réponse à : Dupliquer actions d’un bouton #70127
    Merlin
    Maître des clés

    Bonjour

     

    En fait il faut prendre le problème à l’envers, c’est très rapide.

    Pour commencer il faut supprimer tous les boutons déjà créés, sauf un. Ça se fait en tournemain dans la liste des champs du panneau “Préparer le formulaire” d’Acrobat Pro.

    Ensuite il faut soigneusement paramétrer le bouton restant en lui attribuant tous les paramètres (position, aspect, action, etc) nécessaires.

    Et pour finir, clic-droit sur le bouton : Dupliquer sur toutes les pages.

    C’est terminé.

     

    Pour les autres documents il suffit de copier-coller un bouton et de le dupliquer de la même manière sur toutes pages.

    en réponse à : Nom de fichier et titre de fichier #70126
    Merlin
    Maître des clés

    🤗

    en réponse à : Nom de fichier et titre de fichier #70115
    Merlin
    Maître des clés

    Bonjour

     

    C’est une propriété du document, pas un réglage du logiciel.

    Tu étais à deux doigts de la solution : menu Fichier : Propriétés : Vue initiale

    La suite en image :

     

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Checkbox #70114
    Merlin
    Maître des clés

    Bonjour

     

    Est-ce que ce sont des cases à cocher indépendantes ou bien est-ce qu’elles fonctionnent avec un choix unique pour chaque ligne (comme des boutons-radio) ?

    Peux tu partager ton document ou un exemple ?

    en réponse à : Générer un numéro unique non aléatoire dans un champ texte #70106
    Merlin
    Maître des clés

    👍

    J’ajoute juste qu’avec le script de bebarth le champ COMPTEUR ne doit surtout pas être au format “nombre”, ce qui supprimerait les zéros directeurs de toute façon.

    Par principe, un champ dont le contenu est issu d’un calcul ou d’un script, donc non modifiable par l’utilisateur, n’a pas besoin d’avoir un “format”, puisque la valeur obtenue a déjà ce format.

    Merlin
    Maître des clés

    😎

    Merlin
    Maître des clés

    Pour avoir un bouton avec “texte sur icône” (à ajouter avant la dernière ligne) :

    f.buttonPosition = position.overlay; // texte sur icône

     

     

    Pour ne pas avoir le texte (les flèches) il faut supprimer ou désactiver cette ligne :

    f.buttonSetCaption("\u003E\u003E\u003E"); // flèche vers la droite

    Merlin
    Maître des clés

    Ajoute cette ligne juste avant la dernière accolade , il faut indiquer le chemin d’accès au fichier icône (qui peut aussi être en PNG ou JPG) :

    f.buttonImportIcon("/F/pdfs/monIcone.pdf");

    Merlin
    Maître des clés

    Cette fois j’ai testé avec un Acrobat tout juste ouvert et donc débarrassé de toute variable fantôme, il y en avait deux autres 😱

     

    // POSITION BOUTON "PAGE SUIVANTE"
    var nPosBt6 = 1.5; // multiplicateur
    var inch = 28.3; // unité de base, ce qui fait 1 inch = 1 centimètre

    // CRÉER BOUTON PAGE SUIVANTE SUR TOUTES LES PAGES
    for (var p = 0; p < this.numPages; p++) {
    // Position du rectangle
    var aRect = this.getPageBox( {nPage: p} );
    aRect[0] = aRect[2] - nPosBt6*inch; // from right of page
    aRect[2] = aRect[0]+1*inch; // Make it 1 cm wide
    aRect[1] -= .5*inch; // 0,5 cm from the top of page
    aRect[3] = aRect[1] - 15; // and 15 points high
    var f = this.addField("btPageSuiv", "button", p, aRect)
    f.setAction("MouseUp", "this.pageNum++");
    f.userName = "Page suivante"; // infobulle
    f.display = display.noPrint;
    f.borderStyle = border.s;
    f.highlight = "none";
    f.textSize = 0; // 0 = corps automatique
    f.textColor = color.black;
    f.fillColor = color.white;
    f.strokeColor = color.black;
    f.textFont = font.Helv; // Helvetica
    f.buttonSetCaption("\u003E\u003E\u003E"); // flèche vers la droite
    }

    en réponse à : Générer un numéro unique non aléatoire dans un champ texte #70095
    Merlin
    Maître des clés

    Il faut créer un champ texte qu’on va nommer COMPTEUR dans le document, initialisé à zéro.

    Et ajouter cette ligne juste avant le script de réinitialisation :

    this.getField("COMPTEUR").defaultValue = Number(this.getField("COMPTEUR").value) +1;

     

     

    en réponse à : Champ calculé – difference #70090
    Merlin
    Maître des clés

    Oublie tout ce qui a été écrit précédemment et ce vieux script inutilement compliqué.

    Je viens justement de croiser un script beaucoup plus simple sur un autre forum.

    Ci-dessous et dans le document ci-joint en script de calcul du champ qui indique le nombre de jours :

     

    if (this.getField("DateDeb").value != "" && this.getField("DateFin").value != "") {
    var dd = this.getField("DateDeb").value;
    var rd = this.getField("DateFin").value;
    var d1 = util.scand("dd/mm/yyyy", dd);
    var d2 = util.scand("dd/mm/yyyy", rd);
    var diff = (d2.valueOf() - d1.valueOf()) / 1000;
    event.value = (Math.round((diff / 60 / 60) / 24)+1) + " jour(s)";
    }
    else {event.value = "";}

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Générer un numéro unique non aléatoire dans un champ texte #70086
    Merlin
    Maître des clés

    Bonjour

     

    Qu’appelles tu un “numéro unique” ? Est-ce qu’il doit être vraiment unique universellement parmi tous les documents du monde ou bien est-ce qu’il doit n’être unique que pour toi ?

    À quoi devrait ressembler cette numérotation ?

    en réponse à : Champ calculé – difference #70082
    Merlin
    Maître des clés

    C’est parce-que tu n’as pas intégré la fonction qui se trouve en script de document dans l’exemple fourni :

     

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Champ texte nul si champ liste déroulante nul #70079
    Merlin
    Maître des clés

    Bonjour

     

    Met ce code en script de Format Personnalisé dans le champ “texte2” :

    if (event.value == 1) {event.value = ""};

    Merlin
    Maître des clés

    En fait il manquait la première ligne, qui défini la variable “nPosBt6”.

    Du coup j’ai testé et j’ai remplacé les “>>>” par leur équivalent Unicode car ça buggait (en dernière ligne).

     

    // POSITION BOUTON "PAGE SUIVANTE"
    var nPosBt6 = 1.5; // cm à partir du bord DROIT de la page, ce bt fait 1 cm de large

    // CRÉER BOUTON PAGE SUIVANTE SUR TOUTES LES PAGES
    for (var p = 0; p < this.numPages; p++) {
    // Position du rectangle
    var aRect = this.getPageBox( {nPage: p} );
    // aRect[0] = zéro car on est dans la CROP box
    aRect[0] = aRect[2] - nPosBt6*inch; // from right of page
    aRect[2] = aRect[0]+1*inch; // Make it 1 cm wide
    aRect[1] -= .5*inch; // 0,5 cm from the top of page
    // aRect[3] = zéro car on est dans la CROP box
    aRect[3] = aRect[1] - 15; // and 15 points high
    var f = this.addField("btPageSuiv", "button", p, aRect)
    f.setAction("MouseUp", "pageSuiv()");
    f.userName = "Page suivante"; // infobulle
    f.display = display.noPrint;
    f.borderStyle = border.s;
    f.highlight = "none";
    f.textSize = 0; // 0 = corps automatique
    f.textColor = color.black;
    f.fillColor = color.white;
    f.strokeColor = color.black;
    f.textFont = font.Helv; // Helvetica
    f.buttonSetCaption("\u003E\u003E\u003E"); // flèche vers la droite
    }

    en réponse à : Bouton pour insérer une page #70074
    Merlin
    Maître des clés

    Par-contre il est possible d’insérer un document en pièce jointe, y compris avec Acrobat Reader.

    Merlin
    Maître des clés

    👍

    Merlin
    Maître des clés

    Si je comprend bien tu voudrais qu’une case à cocher active ou désactive un autre groupe de cases ?

    en réponse à : Modifier un script de champ vers un script de document. #70057
    Merlin
    Maître des clés

    Il faut mettre les instructions à exécuter à la suite entre les accolades, on peut ajouter des lignes à loisir :

     

    if (event.value == "")
    {
    this.getField("o.box." + nSuffix).value= "Off";
    this.getField("o.date." + nSuffix).value= "";
    }

    else
    {
    this.getField("o.box." + nSuffix).value= "Oui";
    this.getField("o.date." + nSuffix).value= "Exemple";
    }

    en réponse à : Bouton pour insérer une page #70055
    Merlin
    Maître des clés

    Bonjour

     

    Pour moi c’est NON aussi.

    Acrobat Reader ne peut pas importer ni ajouter des pages dans un document PDF.

    en réponse à : Modifier un script de champ vers un script de document. #70053
    Merlin
    Maître des clés

    Je mettrais ça en script de Validation :

    gereLeMachin();

     

     

    Après avoir mis ça en script de document :

    function gereLeMachin() {
    // mise en variable du nom du champ actif
    var cName = event.target.name;
    // récupération du suffixe
    var nSuffix = cName.substring(cName.lastIndexOf('.')+1);
    if (event.value==""){this.getField("o.box." + nSuffix).value="Off"}
    else {this.getField("o.box." + nSuffix).value="Yes"}
    }

     

    En fait j’ai remplacé le numéro de suffixe de ton script par une variable contenant le numéro de suffixe du champ actif/cliqué.

    (Non testé)

Affichage de 99 réponses de 496 à 594 (sur un total de 10,151)