abracadabraPDF › Forums › PDF – Général › Nom du template ou nom d’un champ avec regex
- Ce sujet est vide.
-
CréateurSujet
-
4 avril 2018 à 10:07 #45836adrithParticipant
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:
-
CréateurSujet
-
AuteurRéponses
-
4 avril 2018 à 10:33 #63736bebarthMaî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:4 avril 2018 à 11:28 #63737adrithParticipantJe 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 clair4 avril 2018 à 11:54 #63738bebarthMaître des clésben, 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:4 avril 2018 à 12:46 #63739adrithParticipantJe 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.
4 avril 2018 à 12:58 #63740bebarthMaître des clésdernier 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:4 avril 2018 à 13:10 #63741adrithParticipantOui 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:
4 avril 2018 à 14:22 #63742bebarthMaître des clésbon 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:4 avril 2018 à 16:15 #63743adrithParticipantSuper, 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.4 avril 2018 à 18:14 #63744MerlinMaître des clésun truc du genre P2.ACC_[regex sur 2 caractères]
var strName = “”;
for (var i=0; istrName = this.getNthFieldName(i);
if (/P2.ACC_..$/.test(strName)) {
// blablabla
}
}
:Smiley15:12 avril 2018 à 13:10 #63745adrithParticipantBonjour,
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 bien12 avril 2018 à 17:50 #63746MerlinMaître des clésL’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.
12 avril 2018 à 20:12 #63747adrithParticipantPas 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
12 avril 2018 à 20:53 #63748MerlinMaître des clésPas bête du tout ça Merlin…
C’est l’expérience qui parle.
:Smiley03:13 avril 2018 à 14:52 #63749bebarthMaître des clésbonjour,
…sinon, on peut tester les pages qui possèdent au moins un champ comprenant “.ACC_” (par exemple), et on supprime ces pages !
@+
:bonjour:24 avril 2018 à 15:17 #63750adrithParticipantBonjour, 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
24 avril 2018 à 16:03 #63751bebarthMaître des clésbonjour,
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:24 avril 2018 à 17:19 #63752MerlinMaître des clésVous en pensez quoi ?
J’en pense qu’il faut toujours commencer la numérotation à 00, voire 000
:Smiley03:25 avril 2018 à 11:49 #63753adrithParticipantbonjour,
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
25 avril 2018 à 12:11 #63754MerlinMaître des clésEn tout cas j’ai bien noté le truc de bebarth !
:extra:25 avril 2018 à 12:32 #63755adrithParticipantIdem très pratique
25 avril 2018 à 21:13 #63756bebarthMaître des clésbonjour,
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 < this.numFields; 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 < pagesAsupprimer.length; i++) {
this.deletePages({nStart: pagesAsupprimer});
}Il faudra adapter le script selon le nom des champs à tester !
@+
:bonjour:25 avril 2018 à 22:30 #63757MerlinMaître des clés:bravo:
30 avril 2018 à 13:38 #63758adrithParticipantMerci beaucoup, bravo.
Le fichier en PJ par contre je pense qu’il a un petit souci non ?30 avril 2018 à 17:08 #63759bebarthMaître des clésbonjour,
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:2 mai 2018 à 07:54 #63760adrithParticipantBonjour,
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ée2 mai 2018 à 09:45 #63761bebarthMaître des clésbonjour,
Il ne peut pas être incorporé au fichier pdf ?
si, tu pourrais le mettre en action d’un signet par exemple !
@+
:bonjour:2 mai 2018 à 09:46 #63762MerlinMaître des clésOu faire apparaitre un bouton dans une palette flottante…
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.