Donnez vie à vos documents numériques !
 

Dupliquer des champs de texte renommés automatiquement sur plusieurs pages

abracadabraPDF Forums PDF – Général Dupliquer des champs de texte renommés automatiquement sur plusieurs pages

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #46167
    etteluoc
    Membre

    Bonsoir,
    J’aimerais dupliquer des champs de texte sur plusieurs dizaines des pages, mais il faudrait qu’ils soient renommés sur chaque page.J’ai essayé selon ce modèle, https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/dupliquer-dynamiquement-des-pages-dans-un-pdf/, avec le paramètre bOverlay égal à true, et nPage indiquant la page sur laquelle devait se placer le modèle.Le problème c’est que la page modèle remplace la page choisie, alors que je voulais que seuls les champs de texte apparaissent sur cette page, comme un calque.
    Y a-t-il une autre solution?
    Merci d’avance pour votre aide.

Affichage de 10 réponses de 1 à 10 (sur un total de 10)
  • Auteur
    Réponses
  • #66408
    bebarth
    Maître des clés

    bonjour,
    Il faut écrire un script pour copier ledit champ sur une ou des autres pages !
    Comment penses-tu lancer le script ??? via un bouton ??? et comment indiquer le numéro des pages ?
    Comment veux-tu également renommer le champ ? avec un suffixe ?
    Les champs sont-ils repositionnés exactement à la même place ?
    Doit-il y avoir un choix sur le ou les champs à dupliquer ?
    La complexité du script dépendra de toute ces réponses.
    @+
    :bonjour:

    #66409
    etteluoc
    Membre

    Bonsoir bebarth, merci pour ta réponse.
    J’aimerais de préférence lancer le script depuis la console javascript.
    Pour le numéro des pages sur lesquelles copier les champs, ce serait depuis la page 25 jusqu’à la fin du document (jusqu’à la page 95). En fait je veux dupliquer tous les champs de texte qui se trouvent sur la page 24, sur les pages suivantes jusqu’à la fin du document, en les repositionnant exactement à la même place sur chaque page.Les champs pourraient être renommés avec le préfixe P suivi du numéro de la page sur laquelle se trouve le champ copié.
    Il n’y a pas de choix sur les champs à dupliquer.
    Bonne soirée

    #66410
    bebarth
    Maître des clés

    bonsoir,
    Je ne te promets pas ce weekend, mais certainement lundi.
    J’ai déjà fait un script de ce genre, ça ne devrait pas être trop long à adapter.
    On dit donc TOUS les champs textes de la page 24 à dupliquer sur les pages de 25 à 95.
    @+
    :bonjour:

    #66411
    etteluoc
    Membre

    Bonjour,
    Oui tous les champs de textes qui se trouvent sur la page 24 dupliqués et renommés sur les pages 25 à 95.
    Merci pour ton aide!  :Smiley01:

    #66412
    bebarth
    Maître des clés

    bonjour,
    Je t’ai collé le script dans un champ texte du fichier joint.
    Comme il me semble que ce script soit à usage unique, je ne l’ai pas peaufiné.
    Vérifie bien que tout soit correct avant d’enregistrer… une copie, bien sûr !!!
    Tu me dis si quelque chose ne va pas.
    @+
    :bonjour:

    #66413
    etteluoc
    Membre

    Bonjour bebarth
    Ça fonctionne parfaitement. Merci beaucoup!!

    Bon week-end  :soleil:

    #66414
    Merlin
    Maître des clés

    bebarth : peux tu m’expliquer cette ligne de script :

    Code:
    if (typeof g[j] != “function” && j != “name” && j != “type” && j != “page” && j != “rect”) f[j]=g[j];

    Je comprend bien ce qu’elle fait, mais je ne comprend pas comment. Notamment le typeof, je ne comprend pas comment elle fait pour aller chercher les toutes les propriétés du champ.
    Moi j’aurais bêtement listé toutes les propriétés une par une pour les répliquer mais ce script est bien plus efficace.
    :bravo:

    #66415
    bebarth
    Maître des clés

    bonjour (Merlin),
    Chaque objet “champ” est composé de propriétés sous différentes formes (table, chaine, nombre, booléen) et de méthodes (fonctions).
    Seules les propriétés sont accessibles en lecture et/ou écriture via JavaScript. Les fonctions ne peuvent être que listées (il y en a une trentaine par type, toutes identiques : signatureValidate, signatureSign, signatureInfo, signatureGetSeedValue, …).
    typeof retourne le type de variable, donc ici on demande de retourner tous les types de variables qui ne sont pas des fonctions. Ce sont donc des propriétés, et vu que chaque type de champ contient un nombre particulier de propriétés (pas tous les mêmes), ici on ne va lire que les propriétés attribuées au type du champ. Donc pas la peine de lister toutes les propriétés…
    Dans l’exemple, je ne vais pas lire les propriétés : nom, type, page et rect (position) puisque je ne veux pas réatribuer ces propriétés aux nouveaux champs dupliqués.
    Lorsque que j’ai fait mon “étude” des champs, je me suis fait un fichier Excel qui résume assez bien tout ça (bonjour les chevilles…). Je peux te l’envoyer si ça t’intéresse ! …et à d’autres personnes sur demande.
    @+
    :bonjour:

    #66416
    Merlin
    Maître des clés

    – Là tu m’as troué le cul !  :geek:
    – Il n’y a vraiment rien à faire pour les fonctions ?
    – J’ai noté que même la “valeur par défaut” du champ est répliquée.    :bravo:
    – Je suis preneur du fichier Excel.
    – Ce script ignore les champs qui ont le même nom (plusieurs champs avec le même nom sur la page de départ).  :Smiley02:

    – J’ai modifié ton script pour mes besoins, celui-ci tient compte du type des champs (text, bouton, etc.).
    Faute de pouvoir répliquer les fonctions j’ai fait en sorte que les champs-texte dont le nom contient “date” ou “Date” soient au format Date, et que les champs-bouton dont le nom contient “image” contiennent le script nécessaire à l’importation d’une image.
    :Smiley15:

    Ce script duplique les champs de la page 1 sur les pages 2 à 4, en leur ajoutant le préfixe “Px.” où x est le numéro de la page cible :

    Code:
    var lesChamps=new Array();
    var typeDuChamp;
    for (var i = 0; i var nomChamp=this.getNthFieldName(i);
    var g = this.getField(nomChamp);
    if (g.page==(0)) lesChamps.push(nomChamp);
    }
    for (var i=0; i var g = this.getField(lesChamps);
    var typeDuChamp = g.type;
    var lesCoord=g.rect;
    for (var p=(1); p var nouveauNom = “P” + (p+1) + “.” + lesChamps;
    var f = this.addField(nouveauNom, typeDuChamp, p, lesCoord);
    f = this.getField(nouveauNom);
    // répliquer toutes les propriétés (onglets : général, aspect, options, position)
    for (var j in g) {
    try {if (typeof g[j] != “function” && j != “name” && j != “type” && j != “page” && j != “rect”) f[j]=g[j];}
    catch(e) {}
    }
    // champs bouton dont le nom contient “image” : ajout de l’action JavaScript
    if ((f.type == “button”) && (/image/.test(f.name))) {
    f.setAction(“MouseUp”, “event.target.buttonImportIcon();”);
    }
    // champs texte dont le nom contient Date ou date : ajout du format Date
    if ((f.type == “text”) && (/[d|D]ate/.test(f.name))) {
    var cFormat = “dd/mm/yyyy”;  // format français
    f.setAction(“Format”, “AFDate_FormatEx(“”+cFormat+””)”);
    f.setAction(“Keystroke”, “AFDate_KeystrokeEx(“”+cFormat+””)”);
    }
    }
    }
    #66417
    bebarth
    Maître des clés

    – Ce script ignore les champs qui ont le même nom (plusieurs champs avec le même nom sur la page de départ).  :Smiley02:

    J’avais écris une action pour “renommer” un champ. Je ne me souviens plus si je l’avais partagé sur un post !!!
    Cette action tient compte des widgets. Ce n’est pas vraiment renommer car en fait il duplique le champ avec un autre nom et supprime le champ d’origine, car il n’est pas possible de modifier le nom d’un champ.
    Le hic, c’est que l’on perd les actions.
    Je t’envoie le fichier Excel sur ta boite mail.
    Je suis en train de faire le même travail sur les annotations. Il y a encore 2 ou 3 trucs ou je bloque car je n’ai pas tout compris…
    @+
    :bonjour:

Affichage de 10 réponses de 1 à 10 (sur un total de 10)
  • Vous devez être connecté pour répondre à ce sujet.