Donnez vie à vos documents numériques !
 

Renommer plusieurs champs de formulaire avec JavaScript

abracadabraPDF Forums PDF – Général Renommer plusieurs champs de formulaire avec JavaScript

  • Créateur
    Sujet
  • #71093
    paulivisual
    Participant

    Bonjour à tous !

    Une question qui avant de venir demander me semblait simple !

    Renommer des champs de formulaire textes en PDF (ex: j’ai “text-1”, “chabada”, “undefied”… et j’aimerais avoir “DJCK_001”, “DJCK_002” etc…

    J’ai beaucoup de formulaires PDF avec des champs Text, check box et radio a renommer et customiser.

    J’arrive a changer les couleurs, remplacer des caractères avec un script que j’ai trouvé, mais apparemment je bug pour renommer et intégrer ma séquence.

    Please help ;O)

    Voici le script trouvé… (pour le remplacement) // le site en référence pour le script : https://vielhuber.de/fr/blog/renommer-pdf-form-fields-en-masse/

     

    var fields = [];

    var props = [

    'alignment',

    'borderStyle',

    'buttonAlignX',

    'buttonAlignY',

    'buttonFitBounds',

    'buttonScaleHow',

    'buttonScaleWhen',

    'comb',

    'display',

    'doNotScroll',

    'editable',

    'exportValues',

    'fileSelect',

    'fillColor',

    'highlight',

    'lineWidth',

    'multiline',

    'multipleSelection',

    'numItems',

    'password',

    'readonly',

    'richText',

    'richValue',

    'rotation',

    'strokeColor',

    'style',

    'textColor',

    'textFont',

    'textSize',

    'userName'

    ];

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

    fields.push(this.getNthFieldName(i));

    }

    for (var i = 0; i < fields.length; i++) {

    var source_name = fields;

    // skip some names if needed

    if (source_name.indexOf('.') === -1) {

    continue;

    }

    // modifications to name (various examples)

    var target_name = source_name;

    target_name = source_name.replace(/\./g, '#');

    //target_name = target_name.toLowerCase();

    //target_name = target_name.replace(/\s/g, '');

    //target_name = target_name.replace(/\ß/g, 'ss');

    //target_name = target_name.replace(/\-|\/|\*|\.|\;|\:/g, '_');

    //target_name = target_name+'-S1';

    var source_field = this.getField(source_name);

    if (source_field !== null) {

    // debug output (if needed)

    //console.println(JSON.stringify([target_name, source_field.type, source_field.page, source_field.rect]));

    var page = source_field.page;

    if( !Array.isArray(page) ) { page = [page]; }

    for(var pages__value = 0; pages__value < page.length; pages__value++) {

    var rect = this.getField(source_name+'.'+pages__value).rect;

    var target_field = this.addField(

    target_name,

    source_field.type,

    page[pages__value],

    rect

    );

    }

    for (var p = 0; p < props.length; p++) {

    if (testField(source_field, props[p])) {

    target_field[props[p]] = source_field[props[p]];

    }

    }

    this.removeField(source_name);

    }

    }

    function testField(field, prop) {

    try {

    var tprop = field[prop];

    return true;

    } catch (e) {

    return false;

    }

    }

     

     

     

     

    • Ce sujet a été modifié le il y a 2 années et 7 mois par paulivisual.
Affichage de 31 réponses de 1 à 31 (sur un total de 31)
  • Auteur
    Réponses
  • #71095
    bebarth
    Maître des clés

    bonjour,
    2 choses :

    1. Il est impossible de renommer un champ via JavaScript. Par contre (et c’est ce que fait ton exemple) il est possible de créer un champ avec un nouveau nom, qui a les mêmes propriétés puis de supprimer le champ initial.
      Par contre, il est impossible de lire (donc de “coller” dans le nouveau champ les formats et les différents scripts appliqués à ce champ).
      On ne peut pas les copier, mais si on les connait on peut les réécrire…
    2. Le script que tu indiques permet de “renommer” les champs dont le nom contient un point et de le changer par un dièse. Je ne crois pas comprendre que c’est ce que tu veux exactement faire !
      Veux-tu renommer avec un nom incrémental tous les champs ou seulement certains ???

    @+
    😎

    #71096
    Merlin
    Maître des clés

    Bonjour

     

    Il y a une autre façon de faire, souvent plus rapide : supprimer tous les champs sauf un, le nommer soigneusement (par exemple “DJCK”) et le dupliquer avec la fonction “Créer plusieurs copies” disponible au clic-droit qui nomme les champs de façon logique et séquentielle.

     

     

    Attachments:
    You must be logged in to view attached files.
    #71098
    paulivisual
    Participant

    Bonjour,

    Merci pour ta réponse.

    1 : arf après mes recherche j’avais peur de ça ;O(

    2 : Oui exactement. J’ai des  PDF (beaucoup) avec des champs (beaucoup) qui ont été nommé n’importe comment. J’aimerais renommer tout le champs par un nom défini et une incrémentation. En gros…. j’aimerais dans ce cas, utilis le replace qui fonctionne.. mais au lieux du “.” (points) tout les caractères du nom ;O).

    Merci pour votre temps.

    #71099
    paulivisual
    Participant

    Bonjour,

    Merci pour la réponse, mais la champs sont déjà présent. Oui pour la nomination l’idée était “DNJDN_001” etc… mais la je parle pas hélas de 3 pdf avec 20 champs.

    Pour revenir sur on autre réponse par apport au script.. le replace fonctionne… si on pouvais juste replacer tout le nom ;O)

    Merci  pour votre temps.

    #71100
    bebarth
    Maître des clés

    bonjour,
    Voici un script à exécuter depuis la console :
    // Nouveau nom à incrémenter
    var nomIncr="DJCK";
    // Pour "DJCK_000", "DJCK_001", "DJCK_002", etc.
    var nomChamps=[];
    ...
    }

    …et en pièce jointe une action pour renommer un champ.

    Je joins un fichier avec le script car il n’était pas afficher correctement même au format “Code”.

    @+
    😎

    • Cette réponse a été modifiée le il y a 2 années et 7 mois par bebarth.
    Attachments:
    You must be logged in to view attached files.
    #71104
    paulivisual
    Participant

    Waou super merci beaucoup, je tes au plus vite et je fais un retour…

    UN GRAND MERCI MERCI

    p.s car je m’arrachais le peu de cheveux qui me reste! ;O)

    #71106
    paulivisual
    Participant

    Bonjour,

    déjà merci pour le script, il fonctionne parfaitement, et dans la console c’est le top.

    Le truc c’est que j’ai dans un PDF 45 noms différents, si je dois sélectionné chaque nom ça m’aide mais mon idée étais peut-être plus basique.

    Est-il possible de garder la même choses, mais de donné un nom en séquence pour tout les noms, de zappé la partie sélection ?

    Pour imager : nom des champs dans le formulaire actuellement : Trubidulle, machin, chose nom, prénom, adresse, 0f9fd09, fsdafjdska etc…

    Je choisi ma séquence : IDKO_

    Résulta : IDKO_ 001 , IDKO_ 002, IDKO_ 003 etc…

    Merci d’avance

    p.s si je peux faire quelque choses ou participer c’est avec plaisir.

     

     

    • Cette réponse a été modifiée le il y a 2 années et 7 mois par paulivisual.
    • Cette réponse a été modifiée le il y a 2 années et 7 mois par paulivisual.
    #71109
    bebarth
    Maître des clés

    C’est exactement ce que fait le script inclus dans le fichier… “Script” !
    Il faut sélectionner tout ce script, le coller dans la console vide, modifier la ligne n° 2 en indiquant le nouveau nom des champs (sans index), puis sélectionner tout le script de la console et ENTER du pavé numérique.

    Sinon, voici une action où il faudra également modifier la ligne n° 2.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #71111
    paulivisual
    Participant

    Oups pardon.. j’ai cliqué un peu vite sur le fichier d’action.. (d’ailleur très cool) et du coup …

    J’y retourne et je test..

    Merci encore

    #71112
    paulivisual
    Participant

    OUIIIIII top, trop cool, merci beaucoup !

    Je vais tenté de couplé avec mon autre script qui donné les params de fonts, etc…

    p.s 1 j’ai relu pour le fichier script 🤓,  j’aurais du simplement (si j’avais bien lu) intégré dans la console… meâ-culpâ.. l’emballement du test.

    p.s 2 Si je peux rendre un service.. message MP

    Très bonne fin de journée

     

    #71113
    bebarth
    Maître des clés

    Ce script remet exactement les mêmes propriétés !
    Mais si il faut en modifier (fond, police…), tu me dis et je peux l’adapter.

    @+
    😎

    #71114
    paulivisual
    Participant

    Si tu propose je dispose! (offre valable dans les deux sens ;O)

    Je suis comme tu as surement compris dans le visuel plus que dans la technique.

    Dans l’absolu définir:

    • la typo et la taille (Arial, 9) la couleur est noir par default..
    • définir que la hauteur des champs textes (ex: 6mm)
    • chexbox et radio (ex: 6mmX6mm)

    J’ai fais un petit script qui fonctionne qui fait ça (surement pas de la meilleure façon) c’est surtout ou mettre les choses au bon endroit qui couinne chez moi ;O) Si ja’i un exemple après je cherche…à ta convenance.

    @+ et merci

    p.s j’ai proposé dispose si besoin ;O)

    #71115
    bebarth
    Maître des clés

    Essaye le script dans ce fichier !

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #71119
    paulivisual
    Participant

    je viens de finir ma journée, je test et te reviens…

    #71177
    paulivisual
    Participant

    Bonjour,

    désolé pour ma réponse tardive.. (ça a été le grand chamboulement)!!!!!!!!

    la situation a un poil changer.. mais je peux faire un retour objectifs sur le script qui me semble utile.

    Il fonctionne parfaitement.. dans un cas (si les champs sont dans un seul sens et dans un ordre précis)…  quand on peut s’attendre a un renommage par ordre direct…j’ai fais des test dans tout les sens… l’ordre dans les champs est logiquement le plus objectifs.. MAIS:….. et un gros mais….. copié ou dupliqué un champs change clairement la donne. (on peut avoir le 001 a la fin et le 0047 au début) ce qui change aussi l’odre d’incrémentation de l’utilisation.

    Je suis un poil pressé par l’attente (de mon travail) et je vous reviens avec des exemples plus précis… mais un exemple qui reprend l’idée de Merlin (qui est bonne et a utilisé) la duplication via le menu…

    Le script si on fait un 2 par 5 renomme les champs : 1.1 par 1.5 et 2.1 par 2.5… et dans l’utilisation logique (du m0ins la mienne) l’idéal serait : 1.1 -> 2.1 -> 1.2 -> 2.2 etc…

    il me semble que le script est une base énorme pour un outil.. sous estimé et attendu!!!!

    un autre point que je reproche a PDF.. quand on copie un un champs.. (visuellement et manuellement) il le place toujours en bas.. pourquoi si on sélectionne un champs il pourrait pas le mettre a l bonne place.. et j’ai encore plains de petites idées dans le genre…

    bon je retour au taff

     

     

     

     

     

    #71178
    Merlin
    Maître des clés

    “un autre point que je reproche a PDF.. quand on copie un un champs.. (visuellement et manuellement) il le place toujours en bas.. pourquoi si on sélectionne un champs il pourrait pas le mettre a l bonne place.. “

    Par défaut Acrobat Pro DC colle “sur place”, c’est à dire au même endroit sur la page.

    Parfois c’est embêtant mais il faut faire avec.

    Sinon on peut dupliquer un ou plusieurs champs en appuyant sur la touche CTRL (CMD sur Mac) lors du déplacement.

    Si en plus on appuie sur la touche majuscule la duplication se fait en ligne droite (horizontal/vertical).

    #71179
    paulivisual
    Participant

    hello Merlin, merci pour ta réponse.. alors non pas dans tout les cas… (je viens de traité 100 pdf)  à main…. comme expliqué le scrit bebarth est top.. une bombe..mais il faut l’amélioré c’est vraiment une tuerie… mais hélas (on m’appelle pas casse couille pour rien) il y encore 1 ou2 point pour qu’il soit au top..

    Te me contredira pas si je dis que la pratique vaux tout les beaux discours.

    la je suis objectivement dans un cas pratique pour une s…. b…. et on parle pas de 2 fichiers…mais plutot 150 dans 3 langues…

    #71180
    Merlin
    Maître des clés

    Il colle sur place sous réserve que le format de page de départ et d’arrivée soit identique.

    Sinon oui, c’est plutôt au petit bonheur la chance.

     

    #71182
    bebarth
    Maître des clés

    …mais il faut l’amélioré…

    Il faudrait l’améliorer… si c’était possible !
    Dans un monde parfait où on a pensé à tout, l’ordre de tabulation est identique à l’ordre de création des champs.
    Sauf que, pauvres mortels que nous sommes, nous ne pensons pas tout juste du premier coup l’ordre de tabulation est modifié alors que l’ordre de création ne l’est pas… Et par dessus ça, il n’est pas possible de modifier l’ordre de tabulation via JavaScript. Du coup, il n’est pas possible de redéfinir un ordre de création de nouveau champ par rapport à un ordre de tabulation.
    Le seul ordre qu’il est possible de modifier est l’ordre de calcul… à la limite il faudrait avant de lancer un script, placer un calcul bidon dans l’ordre de tabulation, mais ça fait du travail manuel sur tous les champs et ce n’est pas ce qui est recherché… Autant renommer manuellement tous les champs !

    @+
    😎

    #71208
    paulivisual
    Participant

    Hello,

    Alors oui on peut l’amélioré et d’une façon simple j’espère ;O)
    Quand je renomme les champs.. si il y a une info bulle… il remet partout la même… ;O( si on peut déjà virer ça c’est top..)

    Tu a tout a fait raison pour l’odre c’est d’ailleur mon problème et il est encore pire… après environ 30 PDF entre 25 et 150 champs par PDF j’ai eu le temps de tester. PDF fais la différence entre les premiers créés/ou copiés et pas de la même façon! (mais le meilleure reste a venir)…

    ok je renome avec le script.. top nickel… mais l’ordre de tab n’est pas le bon.. alors je me dis.. testons le trie par ligne.. pouf ça marche (pour l’odre de tabulation).. mais les champs ne sont plus dans l’ordre ;O) Après si je triche en trainant par ordre alphabétique.. c’est visuellement ok.. amis le hick c’est la personne qui boss chez mon client direct qui elle connais et ça passera pas ;O)

    Un truc qui marche mieux…. (dans mon cas c’est des fois viable) tu renome, tu replace tout… et comme ja’i des fichier dans des langue différent je peux la renommer.. mais encore une fois cela dépend de comment ja’i ranger et créer etc… bref la pour le coup Adob.. ce sont pas fouler.

     

    A plus

     

     

    #71210
    bebarth
    Maître des clés

    bonjour,

    Hello, Alors oui on peut l’amélioré et d’une façon simple j’espère ;O) Quand je renomme les champs.. si il y a une info bulle… il remet partout la même… ;O( si on peut déjà virer ça c’est top..)

    Sans vouloir jouer sur les mots, ce n’est pas une amélioration, mais une adaptation pour résoudre ton problème !
    Lorsque tu dis “il remet la partout même” je suppose que tu veux dire “il remet partout l’existante”, car c’est ce qui est prévu par le script.
    Pour supprimer les info-bulles, il faut écrire :
    ...
    }
    f.userName="";
    if (leType=="text") {
    ...
    En ce qui concerne l’ordre de tabulation, est-ce que les champs texte sont remplis ?
    Est-il envisageable d’indiquer l’ordre de tabulation souhaité dans ces champs ? La numérotation serait évidemment retirée automatiquement !

    …et t’est-il possible de me faire parvenir un fichier via mon adresse e-mail ?

    @+
    😎

    #71217
    paulivisual
    Participant

    Hello,

    oui adaptation ;O)

    J’ai regardé et je suis pas du-tout sur d’ou mettre le if sans faire faux/perdre 3 heures today (je dois rendre pas mal de fichier aujourd’hui).
    Un mini question.. (si je veux juste enlever les infos bulle sans tout renommer) Pour nettoyer les excitants.

    Oui ils sont vides.  La fonction automatique de trie qui marche le mieux pour le moment c’est : “tiré par rangée”. Je ne comprend pas la numérotation retirée, amis si tu entend qu’ils perdent les numéro d’intégration par default je pense pas que ça soit un soucis…

    Oui je peux t’envoyé un fichier je dois juste enlevé certain point identitaire. (je te donne mon mail ici ?)

    @+

     

     

    • Cette réponse a été modifiée le il y a 2 années et 6 mois par paulivisual.
    #71219
    paulivisual
    Participant

    J’ai trouvé pour nettoyé les info-bulles de mes PDF (champs, text-checkbox et radio), merci pour la piste.

    C’est surement pas la meilleure façon de faire mais ça fonctionne (testé sur 12 pdf de 1  a 3 pages)

    for (var i = 0; i < this.numFields; i++) {
    var fname = this.getNthFieldName(i);
    if (this.getField(fname).type == "text") {
    this.getField(fname).userName = "";
    }else if (this.getField(fname).type == "checkbox") {
    this.getField(fname).userName = "";
    }else if (this.getField(fname).type == "radiobutton") {
    this.getField(fname).userName = "";
    }
    }

    • Cette réponse a été modifiée le il y a 2 années et 6 mois par paulivisual.
    • Cette réponse a été modifiée le il y a 2 années et 6 mois par paulivisual.
    • Cette réponse a été modifiée le il y a 2 années et 6 mois par paulivisual.
    #71223
    Merlin
    Maître des clés

    “J’ai trouvé une façon hors script pour nettoyé les infos-bull de mes PDF, merci pour la piste.”

    Sinon il y a Tooltip Remover, qui est gratuit :

    Tooltips Remover

    #71224
    paulivisual
    Participant

    Aaaaaaaaaaah merci.. bon je vais faire mon super script payant alors ;O) ahahah

    Au moins j’ai appris un truc…

    Mais je fais volontiers un don au site (ou de mes capacité en temps ou un petite donation pour votre aide qui me motive et me fais gagné du temps.)

    Je reste dispo par mp ;O)

    #71226
    bebarth
    Maître des clés

    bonjour,
    Ou en une ligne :
    for (var i=0; i<this.numFields; i++) this.getField(this.getNthFieldName(i)).userName="";
    Je regarde pour la suite plus tard !

    Pour mon adresse e-mail, je ne sais pas si on peut la trouver sur le nouveau forum ! J’ai cherché mais je n’ai pas trouvé…
    C’est bebarth arrobase sfr point fr. Tu écris ça correctement et ça devrait m’arriver…

    @+

    #71235
    Merlin
    Maître des clés

    “J’ai cherché mais je n’ai pas trouvé…”

    Moi non plus…

    😕

    #71236
    paulivisual
    Participant

    @bebarth : Frimeur ;O) ahahah

    je t’es écris korhectement ;O)


    @Merlin
    … pareil…

     

    p.s vous povez me trouver sur le net facilement avec mon pseudo… pour une idée… et autrement il y discord.

    #71248
    bebarth
    Maître des clés

    Voici un exemple où j’ai indiqué l’ordre de tabulation souhaité en info-bulle de chaque champ.
    Après avoir lancé le script, les info-bulles sont effacées et j’ai indiqué pour les champs texte uniquement le numéro de tabulation, mais ça c’est juste pour montrer que ça a fonctionné !

    Le script à lancer de la console ou à mettre en action :

    var nomIncr="BB";
    var nomChamps=[];
    for (var i=0; i<this.numFields; i++) nomChamps.push([getNthFieldName(i),this.getField(getNthFieldName(i)).userName]);
    nomChamps.sort(function(a, b){return a[1]-b[1]});
    for (var i=0; i<nomChamps.length; i++) {
    var leNom=nomChamps[0];
    var nouveauNom=nomIncr+"_";
    if (i<10) nouveauNom+="00"+i;
    else if (i<100) nouveauNom+="0"+i;
    else nouveauNom+=i;
    g=this.getField(leNom);
    var leType=g.type;
    var laPage=String(g.page);
    var lesPages=laPage.split(",");
    for (var p=0; p<lesPages.length; p++) {
    var cettePage=Number(lesPages[p]);
    if (lesPages.length>1) {
    var nomChamp=leNom+"."+p;
    } else {
    var nomChamp=leNom;
    }
    g=this.getField(nomChamp);
    var lesCoord=g.rect;
    var f=this.addField(nouveauNom, leType, cettePage, lesCoord);
    f=this.getField(nouveauNom);
    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) {}
    }
    f.userName="";
    if (f.type="text") f.value="Tabulation n° "+nomChamps[1];
    }
    this.removeField(leNom);
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #71251
    paulivisual
    Participant

    TOP TOP O TOP! Grandéééééééééééééé et dire qu’on m’avait dit qu’on pouvez pas l’amélioré ;O) (adapté au besoin est une amélioration ;O)

    Tu as bien reçu mon mail ?

    Je rend la pareil avec plaisir (dans mes compétences).

    #73012
    VinceQC974
    Participant

    Salut Bebarth,

    Ton script est super mais lorsque j’indique une hauteur de champs, les champs semblent se réduire par le bas. Est-ce possible de faire l’inverse et de les réduire par le haut pour qu’ils restent collés à mes lignes ? J’ai joins un exemple. Merci beaucoup 🙂

    Attachments:
    You must be logged in to view attached files.
Affichage de 31 réponses de 1 à 31 (sur un total de 31)
  • Vous devez être connecté pour répondre à ce sujet.