- Ce sujet est vide.
-
Sujet
-
Salut à tous,
j’ai essayé de trouver une solution pour ne plus à avoir a renommer un par un les champs après la reconnaissance automatique par acrobat.
J’ai créé un script (il ne traite pour l’instant que les champs text et checkbox) qui va stocker dans un array le nom, le type, la page et les coordonnées de chaque champ page par page.
L’array est trié en fonction des coordonnées des champs : du plus haut au plus bas et de gauche à droite.
Ensuite dans l’ordre de l’array trié, il va recréer des champs « par dessus », du même type, au même endroit mais en les nommant avec le numéro de la page, un nom, le type et un numéro.
Le nom sera celui du champ d’origine mais sans accent, sans espace et la première lettre de chaque mot commence par une majuscule sauf la première lettre du premier mot qui commence par une lettre minuscule.(Lower Camel Case).
Ensuite pour finir le travail, il faut cliquer sur trier les champs par ordre alphabétiques dans acrobat et supprimer tous champs du bas qui commence par une lettre.
En pièce jointe un exemple.
Voilà le script, il a besoin d’une bonne amélioration :
Code:// regex contient àçéèêîïùô ,.;?!:’
var regex =
{
a: /[u00e0]/gi,
c: /[u00e7]/gi,
e: /[u00e9u00e8u00ea]/gi,
i: /[u00eeu00ef]/gi,
u: /[u00fb]/gi,
o: /[u00f4]/gi,
« »: /[su003Fu0021u003Au002Eu002Cu0027u003B]/g
};// Pour chaque page du document
for(p = 0; p // Tableau des champs avec leur nom, type, numéro de page et coordonnées
var tabChamp = new Array();// Compteur de champ (Pour éviter une ligne vide dans l’array tabChamp si le champ N°0 est un bouton)
var numChamp = 0;for(var i = 0; i var nomChamp = this.getNthFieldName(i);
var f = this.getField(nomChamp);
var typeChamp = f.type;
var pageChamp = f.page
if(f.page == p && (f.type == « text » || f.type == « checkbox »)){
// console.println(« Ligne N° » + i);
// Créer un array de 7 éléments par champ
tabChamp[numChamp] = new Array(7);
// Le nom
tabChamp[numChamp][0] = f.name;
// Le type
tabChamp[numChamp][1] = f.type;
// La page
tabChamp[numChamp][2] = f.page;
var coordChamp = f.rect;
// Coordonées sur x
tabChamp[numChamp][3] = coordChamp[0];
// Coordonées sur y
tabChamp[numChamp][4] = coordChamp[1];
// Coordonées sur x + longueur
tabChamp[numChamp][5] = coordChamp[2];
// Coordonées sur y + hauteur
tabChamp[numChamp][6] = coordChamp[3];numChamp++;
}
}// console.println(« Avant triage : » + tabChamp + « n »);
// Trier l’array en fonction de la hauteur des champs et de leur position sur x
tabChamp.sort(function(a, b){
// S’ils sont à la même hauteur
if (a[4] == b[4]){
// Les trier par rapport à leur position sur x du plus prés du bord gauche de la feuille au plus éloigné
return a[3] – b[3];
}
// Trier du plus haut au plus bas
return b[4] – a[4];
});// console.println(« Après triage : » + tabChamp + « n »);
// console.println(« Longueur tableau » + tabChamp.length + « n »);
// console.println(tabChamp[0][0] + « n »);
// console.println(tabChamp[0][1] + « n »);
// console.println(tabChamp[0][2] + « n »);
// console.println(tabChamp[0][3] + « n »);
// console.println(tabChamp[0][4] + « n »);
// console.println(tabChamp[0][5] + « n »);
// console.println(tabChamp[0][6] + « n »);// Compteur de champ text et champ checkbox
var nbText = 0;
var nbCheckbox = 0;
// Pour tous les champs
for (i = 0; i // Retirer les apostrophes du nom
tabChamp[0] = tabChamp[0].replace(« ‘ », » « );
// Séparer tous les mots du nom du champ
motDuChamp = tabChamp[0].split( » « );
// Créer array pour stocker chaque mot du nom du champs
var mot = new Array();
// Mettre le premier mot du nom du champ dans l’array en minuscule
mot.push(motDuChamp[0].toLowerCase());
var k = 1;
// Pour tous les autres mots du nom du champ
for(var j = 0; j // Si le mot est défini
if(motDuChamp[k] != undefined){
// Mettre la première lettre en majuscule et le reste en minuscule
motM = motDuChamp[k].charAt(0).toUpperCase() + motDuChamp[k].substring(1).toLowerCase();
// Mettre le mot dans l’array nom
mot.push(motM);
}
k++;
}
// Joindre tous les mots
nomConstitue = mot.join(« »);
// Retirer tous les accents et caractères spéciaux du regex
for(var r in regex) nomConstitue = nomConstitue.replace(regex[r], r);// Numéro suivant le type de champ
if(tabChamp[1] == « text »){
var numChamp = nbText;
}else if(tabChamp[1] == « checkbox »){
var numChamp = nbCheckbox;
}// Le nouveau nom du champ = numPage.nomChamp.typeChamp.numChamp
var nouveauNom = tabChamp[2] + « . » + nomConstitue + « . » + tabChamp[1] + « . » + numChamp;// console.println(« nouveauNom : » + nouveauNom);
// console.println(« type : » + tabChamp[1]);
// console.println(« numPage : » + tabChamp[2]);// Créer les champs
this.addField
(
nouveauNom,
tabChamp[1],
tabChamp[2],
[
tabChamp[3],
tabChamp[4],
tabChamp[5],
tabChamp[6]
]
);// Incrémenter le numéro des champs suivants en fonction du type
if(tabChamp[1] == « text »){
nbText++;
}else if(tabChamp[1] == « checkbox »){
nbCheckbox++;
}
}
}
- Vous devez être connecté pour répondre à ce sujet.