Donnez vie à vos documents numériques !
 

Nom du template ou nom d’un champ avec regex

abracadabraPDF Forums PDF – Général Nom du template ou nom d’un champ avec regex

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #45836
    adrith
    Participant

    Bonjour,

    J’ai besoin de récupérer une données qui se trouve soit dans un champ, soit dans le nom du template.
    Dans le détail, j’ajoute une page qui s’appelle par exemple ACC_FR
    Elle s’ajoute en page 2 donc tous les champs ne nomment : P2.ACC_FR….

    Est-ce que c’est possible de récupérer le FR qui se trouve dans le nom du template ?

    Ou bien de récupérer le FR qui se trouve dans le nom d’un champ ? Avec une regex peut-être ?

    Merci pour l’aide, je sèche  :doute:

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

    bonjour,

    Est-ce que c’est possible de récupérer le FR qui se trouve dans le nom du template ?

    Qu’entends-tu par là ??? Normalement, si tu rajoutes une page via un template, tu connais son nom, non !!!
    Comment rajoutes-tu la page ?
    @+
    :bonjour:

    #63737
    adrith
    Participant

    Je l’ajoute avec getTemplate.
    Mais ensuite directement sur la page, une fois que celle-ci est ajoutée, on perd cette notion de nom de page et j’aimerai quand même récupérer une partie du nom du template pour rendre mon code complètement dynamique.

    En gros j’ai des pages ACC_FR, ACC_US, ACC_BE, etc… et je veux que le code sur ces pages modèles soit exactement le même. Pour cela soit je récupère le nom du template parce que tous mes champs sont du type P2.ACC_FR…. ou P2.ACC_US…. donc j’ai besoin de cette notion.
    Soit je peux dire un truc du genre P2.ACC_[regex sur 2 caractères].
    J’espère être clair :)

    #63738
    bebarth
    Maître des clés

    ben, on va dire que c’est moyen clair pour moi !
    Est-ce que tu veux récupérer l’info à chaque fois que tu ajoutes une page ou sur un document entier ?
    Ou ajoutes-tu cette page ? en première page, en dernière page, n’importe où ???
    @+
    :bonjour:

    #63739
    adrith
    Participant

    Je veux récupérer l’info quand je suis sur la page en question, pour interagir sur les champs, les masquer/afficher par exemple, mais tout ça avec un code dynamique.

    #63740
    bebarth
    Maître des clés

    dernier point : FR, US, BE… sont des pays je présume.
    Y a-t-il toujours uniquement 2 lettres ??? sont-elles toujours situées au même endroit : en fin du nom de champs ou  après l’underscore “_” par exemple ???
    @+
    :bonjour:

    #63741
    adrith
    Participant

    Oui ce sont des pays, oui toujours 2 lettres, toujours en majuscules et toujours placés au même endroit.
    Par exemple :
    P2.ACC_FR.IBAN
    En rouge ce sont les 2 choses dynamiques.
    Le numéro de la page je peux le récupérer avec :

    Code:
    current=this.pageNum;

    Mais le FR  :doute: :doute:

    #63742
    bebarth
    Maître des clés

    bon ben voilà,
    J’ai mis une fonction en script de document que j’appelle en script d’ouverture de page :

    Code:
    function symbol()
    {
    var laPage = this.pageNum;
    var fpage = -1;
    var Pays=””;
    var i = 0;
    try {
        while (fpage != laPage) {
        var fname = this.getNthFieldName(i);
        var fpage = this.getField(fname).page;
        i++;
        }
        var str = fname;
        var n = str.indexOf(“_”);
        var Pays = str.slice(n+1,n+3);
        app.alert({cMsg:”Le code pays est “+Pays+”.”, nIcon:2});
        } catch(e) {
            app.alert({cMsg:”Il n’y a pas de code pays en page “+(laPage+1)+”.”, nIcon:2});
            };
    }

    Si tu colle le script d’ouverture de page sur chaque template, il sera présent pour chaque nouvelle page créée.
    Ici il y a un message d’alerte, Il faudra adapter à ce que tu veux faire…
    @+
    :bonjour:

    #63743
    adrith
    Participant

    Super, un grand merci bebarth !
    J’ai adapté un peu en retirant le try/catch, retirant les alert et en mettant un “return Pays;” afin de pouvoir récupérer le code pays dans une variable. Et maintenant je peux m’en resservir de cette variable.
    Merci, bonne soirée.

    #63744
    Merlin
    Maître des clés

    un truc du genre P2.ACC_[regex sur 2 caractères]

    var strName = “”;
    for (var i=0; i    strName = this.getNthFieldName(i);
        if (/
    P2.ACC_..$/.test(strName)) {
            // blablabla
        }
    }

    :Smiley15:

    #63745
    adrith
    Participant

    Bonjour,
    autre question en lien avec ces templates et qui m’embête un peu.
    Je vous explique, j’ai des pages modèles qui vont donc s’ajouter un peu partout dans le document, ce ne sera pas toujours le même nombre de page qui sera ajouté, est-il possible de dire avec un bouton reset par exemple de supprimer toutes les pages modèles qui ont été ajoutées au document ? (ou bien supprimer toutes les pages où il y a au moins un champ commençant pas “P” et un numéro).
    Ou bien autrement dit, retourner au document initial ?
    Merci bien

    #63746
    Merlin
    Maître des clés

    L’idéal c’est que toutes les pages (sauf éventuellement la première) soient des pages issues d’un modèle/template, y compris les pages statiques.
    Ainsi pour réinitialiser le document il suffit de supprimer toutes les pages* (sauf une, en général la première, parce-qu’il est impossible de toutes les supprimer) et de regénérer les pages en configuration de base.
    Il suffit d’une ligne de JavaScript dans la Console pour générer une page faussement statique depuis un modèle/template, avec ou sans renommage des champs.  :idee:

    Sinon il faut construire un jeu de variables/marqueurs qui enregistre chaque génération de page, chaque position et chaque suppression pour pouvoir tout remettre à zéro en fonction de ce qui a été fait…
    Sans oublier de stocker tous ces marqueurs dans des champs invisibles pour qu’ils restent disponibles après fermeture, enregistrement et réouverture du document, y compris sur un autre ordi.
    Bon courage !  :mur:

    * Acrobat Reader ne peut supprimer que des pages issues d’un modèle/template, il ne peut pas supprimer de “vraies” pages.

    #63747
    adrith
    Participant

    Pas bête du tout ça Merlin, je vais faire ça je pense, du coup je pourrai réinitialiser le document.

    Oui la 2ème solution, j’avais déjà fait pour un autre document et c’était plus que galère, surtout dès qu’il y avait des modifications à effectuer par la suite. Là ce nouveau document est encore plus complexe donc ça va être trop compliqué.

    Dommage que les pages modèles ne soit pas tagués avec un nom et que l’on puisse pas les supprimer avec ce tag, ça serait tellement plus simple. Car là juste avec un numéro de page (ou plage de page), ça limite pas mal.

    En tout cas merci encore :)

    #63748
    Merlin
    Maître des clés

    Pas bête du tout ça Merlin…

    C’est l’expérience qui parle.
    :Smiley03:

    #63749
    bebarth
    Maître des clés

    bonjour,
    …sinon, on peut tester les pages qui possèdent au moins un champ comprenant “.ACC_” (par exemple), et on supprime ces pages !
    @+
    :bonjour:

    #63750
    adrith
    Participant

    Bonjour, oui c’est une bonne idée également. Avez-vous une idée de comment mettre en pratique ?

    D’autre part, vos codes plus haut m’ont inspiré et je récupère mon code pays avec un chiffre incrémenté, car sur chaque page pays, je masque des champs en fonction d’une liste déroulante. Donc pour optimisé tout ça, je récupère une partie du nom d’un champ et j’obtiens bien FR1, FR2… FR9 c’est parfait. Sauf que je récupère que 3 caractères et pour FR10 jusqu’à FR16 bah je suis un peu bloqué. En prenant 4 caractères, je me retrouve avec un point à la fin des 9 premiers FR1. FR2. FR3. etc.. (mais c’est ok pour FR10-FR16 forcément)
    Une des solutions pourrait être de supprimer le caractère point qui se trouve à la fin, en gros si il trouve un point, il supprime, si il ne trouve pas, la fonction ne fait rien.
    Vous en pensez quoi ?

    Merci bien

    #63751
    bebarth
    Maître des clés

    bonjour,
    Tu peux sélectionner uniquement le texte compris entre l’underscore “_” et le point “.”

    Code:

    var str = fname;
    var n = str.indexOf(“_”);
    var nn = str.indexOf(“.”);
    var Pays = str.slice(n+1,nn);

    …et là il peut y avoir autant de chiffres qu’il est possible !
    @+
    :bonjour:

    #63752
    Merlin
    Maître des clés

    Vous en pensez quoi ?

    J’en pense qu’il faut toujours commencer la numérotation à 00, voire 000
    :Smiley03:

    #63753
    adrith
    Participant

    bonjour,
    Tu peux sélectionner uniquement le texte compris entre l’underscore “_” et le point “.”

    Code:

    var str = fname;
    var n = str.indexOf(“_”);
    var nn = str.indexOf(“.”);
    var Pays = str.slice(n+1,nn);

    …et là il peut y avoir autant de chiffres qu’il est possible !
    @+
    :bonjour:

    Super merci beaucoup, ça fonctionne parfaitement.

    J’en pense qu’il faut toujours commencer la numérotation à 00, voire 000
    :Smiley03:

    Oui au départ je ne pensais pas que j’allais devoir extraire cette partie, la prochaine fois je ferai mieux ;)

    #63754
    Merlin
    Maître des clés

    En tout cas j’ai bien noté le truc de bebarth !
    :extra:

    #63755
    adrith
    Participant

    Idem très pratique  ;)

    #63756
    bebarth
    Maître des clés

    bonjour,

    Avez-vous une idée de comment mettre en pratique ?

    J’ai écris un petit script qui supprime les pages qui possèdent un champ dont le nom contient “ACC_FR”.

    Code:
    var test = “ZERO”;
    var pagesAsupprimer = new Array();
    // On teste tous les noms des champs
    for (var i = 0; i     var fname = this.getNthFieldName(i);
        // Page relative au champ
        var fpage = this.getField(fname).page;
        // Ici on teste si le nom du champ con tient ACC_FR
        var str = fname;
        var n = str.indexOf(“ACC_FR”);
        // Si ACC_FR a été trouvé et la page n’est pas identique à la précédente trouvée
        if (n > -1 && fpage != test) {
            pagesAsupprimer.unshift(fpage);
            var test = fpage;
        }
    }
    // On remet les numéros de pages dans l’ordre décroissant
    pagesAsupprimer.sort(function(a, b){return b-a});
    // On supprime les pages trouvées dans l’ordre de la table (sens inverss)
    for (var i = 0; i     this.deletePages({nStart: pagesAsupprimer});
    }

    Il faudra adapter le script selon le nom des champs à tester !
    @+
    :bonjour:

    #63757
    Merlin
    Maître des clés

    :bravo:

    #63758
    adrith
    Participant

    Merci beaucoup, bravo.
    Le fichier en PJ par contre je pense qu’il a un petit souci non ?

    #63759
    bebarth
    Maître des clés

    bonjour,
    Apparemment non, je ne crois pas que le fichier ait un souci ! C’est un fichier action (zippé).
    Il faut le décompresser et double-cliquer pour l’installer.
    Si tu l’utilises avec le fichier joint (par exemple), tu lances l’action et ça fonctionne bien !
    @+
    :bonjour:

    #63760
    adrith
    Participant

    Bonjour,
    Ah ok je ne connaissais pas cette façon de faire, j’ai testé ça fonctionne bien merci.
    Par contre si je ne me trompe pas, pour que ça fonctionne sur un autre poste, il faut importer/installer le fichier action avant sur chaque poste c’est bien ça ? Il ne peut pas être incorporé au fichier pdf ?
    Merci
    Bonne journée

    #63761
    bebarth
    Maître des clés

    bonjour,

    Il ne peut pas être incorporé au fichier pdf ?

    si, tu pourrais le mettre en action d’un signet par exemple !
    @+
    :bonjour:

    #63762
    Merlin
    Maître des clés

    Ou faire apparaitre un bouton dans une palette flottante…

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