abracadabraPDF › Forums › PDF – Général › Aplatir certains champs
- Ce sujet est vide.
-
CréateurSujet
-
21 avril 2021 à 18:58 #46581
jctremblay
Maître des clésIl est possible d’aplatir tout les champs d’un formulaire facilement avec flattenPages()
[font=verdana, arial, helvetica, sans-serif]Est-ce possible d’aplatir un champ, ou quelques champs spécifique seulement?[/font] -
CréateurSujet
-
AuteurRéponses
-
21 avril 2021 à 20:38 #69129
Merlin
Maître des clésBonjour
Tu as le choix entre le Selective Flatten Tool de Thom Parker :
https://www.pdfscripting.com/public/Selective-Flatten-Tool-Description.cfmOu le Selective Flattener de UVSAR :
https://www.uvsar.com/projects/acrobat/flattener/Les deux sont excellents.
Sinon, l’outil “Aplatir” des abracadabraTools permet de n’aplatir qu’une seule page :
https://www.abracadabrapdf.net/utilitaires/acrobat-plugins/abracadabratools/21 avril 2021 à 20:57 #69130jctremblay
Maître des clésJ’utilise Selective Flatten Tool de Thom Parker. Je me demandais s’il était possible d’aplatir qu’un seul avec le nom d’un champ spécifique mais en javascript.
21 avril 2021 à 21:03 #69131Merlin
Maître des clésC’est une bonne question ! :joker:
21 avril 2021 à 21:41 #69132jctremblay
Maître des clésPour aplatir des champs spécifique, il y a un javascript ici: https://answers.acrobatusers.com/How-flatten-specific-group-form-fields-page-q293414.aspx
Par contre, je me demande si toutes ces lignes sont nécessaires.
22 avril 2021 à 08:00 #69133bebarth
Maître des clésbonjour,
Il y a 3 possibilités pour le paramètre nNonPrint de la fonction flattenPages.
On peut dont paramétrer un champ de façon à faire ce que l’on souhaite.
https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FDoc_methods.htm%23TOC_flattenPagesbc-34&rhtocid=_6_1_8_23_1_33
Attention : dans l’API Reference, la plupart du temps (car je ne le connais pas par coeur) le terme “annotation” fait référence aux commentaires (annots) mais pour cette fonction il englobe les champs, commentaires et liens (All annotations—including form fields, comments, and links).
@+
:bonjour:22 avril 2021 à 13:45 #69134jctremblay
Maître des clésDonc, si j’ai bien saisi le script:
a) écriture de la liste des champs;
b) capturer les propriétés de visibilité de tout champs, puis les mettre tous invisible;
c) mettre les champs de la liste à visible;
d) Aplatir les champs visible;
e) Restaurer les propriétés initiaux des champs;22 avril 2021 à 14:48 #69135Merlin
Maître des clésC’est bien ça, sauf qu’il ne s’agit pas de la visibilité (display) qui n’est disponible que pour les champs, mais de la propriété nNonPrint qui est disponible pour les champs et les annotations/commentaires.
22 avril 2021 à 14:50 #69136jctremblay
Maître des clésC’est ça. La «visibilité» ou pas lors de l’impression.
22 avril 2021 à 17:04 #69137bebarth
Maître des clésEn fin d’année dernière je me suis lancé sur l’écriture d’un utilitaire similaire… en français !
Je n’ai malheureusement pas trouvé le temps de le terminer bien qu’il soit bien avancé, et je ne pense pas pouvoir le faire ces prochain mois.
Certainement l’hiver prochain !
@+
:bonjour:22 avril 2021 à 17:17 #69138Merlin
Maître des clés:bravo:
Place tous les items en variable ou dans un array et tu auras un utilitaire multilingue sans effort supplémentaire. :Smiley03:22 avril 2021 à 17:40 #69139jctremblay
Maître des clés… Certainement l’hiver prochain !
J’ai hâte à l’hiver prochain! [Je pensais jamais dire ça!] :jerisjaune:
27 avril 2021 à 12:55 #69140jctremblay
Maître des clésJe reviens avec une petite question concernant le script disponible sur le site Acrobatuser que j’ai mentionné plus haut.
Ce script permet de saisir manuellement les noms des champs à aplatir comme ceci:
var list = new Array();
list = [
“Text1”,
“Text2”
];J’imagine que ce serait possible au lieu d’une liste spécifique, que le Array contiennent automatiquement tout les champs de type bouton. Comment pourrais-je inclure quelques choses du genre pour construire mon Array avec les noms des boutons?
Aucune idée comment faire ça avec > this.getField(fname).type == “button”
27 avril 2021 à 18:57 #69141bebarth
Maître des clésbonjour,
Voici un script pour faire une table avec les noms de tous les boutons radio :Code:var lesBoutonsRadio=new Array();
for (var i=0; ivar leChamp=this.getField(this.getNthFieldName(i));
if (leChamp.type==”radiobutton”) lesBoutonsRadio.push(this.getNthFieldName(i));
}@+
:bonjour:27 avril 2021 à 22:34 #69142jctremblay
Maître des clésMerci… Si j’integre ton code pour aplatir seulement les champs bouton. J’ai une erreur. À la ligne 17.
TypeError: this.getField(…) is null
17:Console:Exec
Tu as une idée… J’essai de récupérer le code d’AcrobatUsers pour aplatir tout les boutons.
Code:var list=new Array();
for (var i=0; ivar leChamp=this.getField(this.getNthFieldName(i));
if (leChamp.type==”button”) list.push(leChamp);
}var fields = new Array;
for (var i = 0; i < this.numFields; i++) {
fields = [
this.getNthFieldName(i),
this.getField(this.getNthFieldName(i)).display
];
this.getField(fields[0]).display = display.noPrint;
}for (var i = 0; i < list.length; i++) {
this.getField(list).display = display.visible;
}this.flattenPages({
nStart: 0,
nEnd: this.numPages – 1,
nNonPrint: 1,
});for (var i = 0; i < this.numFields; i++) {
for (var j = 0; j < fields.length; j++) {
if (fields[j][0] == this.getNthFieldName(i)) {
this.getField(this.getNthFieldName(i)).display = fields[j][1];
}
}
}28 avril 2021 à 06:09 #69143bebarth
Maître des clésbonjour,
Erreur de ma part !!! en ligne 4 il faut écrire :Code:…
if (leChamp.type==”button”) list.push(this.getNthFieldName(i));
…@+
:bonjour:28 avril 2021 à 12:33 #69144jctremblay
Maître des clésMerci! Cela fonctionne parfaitement.
28 avril 2021 à 16:57 #69145bebarth
Maître des clésVoici comment j’aurai écrit, si je peux me permettre :
Code:var fields=new Array();
for (var i=0; iif (this.getField(this.getNthFieldName(i)).type!=”button”) {
fields.push([this.getNthFieldName(i),this.getField(this.getNthFieldName(i)).display]);
this.getField(this.getNthFieldName(i)).display=display.noPrint;
} else {
this.getField(this.getNthFieldName(i)).display=display.visible;
}
}
this.flattenPages({
nStart: 0,
nEnd: this.numPages-1,
nNonPrint: 1,
});
for (var i=0; ithis.getField(fields[0]).display=fields[1];
}Une seule fois la boucle pour vérifier le nom et l’état des champs, et pas besoin d’avoir 2 tables !
Ce coup ci j’ai vérifier avant de poster…
@+
:bonjour:28 avril 2021 à 18:07 #69146Merlin
Maître des clésfields.push([this.getNthFieldName(i),this.getField(this.getNthFieldName(i)).display]);
Impressionant !
:bravo:28 avril 2021 à 18:11 #69147jctremblay
Maître des clésÇa donne le vertige, mais c’est beau… :jerisjaune: Merci Bebarth!
Impressionant !
:bravo: -
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.