abracadabraPDF › Forums › PDF – Général › Aplatir certains champs
- Ce sujet est vide.
-
CréateurSujet
-
21 avril 2021 à 18:58 #46581jctremblayParticipant
Il 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 #69129MerlinMaître des clés
Bonjour
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 #69130jctremblayParticipantJ’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 #69131MerlinMaître des clésC’est une bonne question ! :joker:
21 avril 2021 à 21:41 #69132jctremblayParticipantPour 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 #69133bebarthMaî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 #69134jctremblayParticipantDonc, 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 #69135MerlinMaî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 #69136jctremblayParticipantC’est ça. La «visibilité» ou pas lors de l’impression.
22 avril 2021 à 17:04 #69137bebarthMaî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 #69138MerlinMaî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 #69139jctremblayParticipant… Certainement l’hiver prochain !
J’ai hâte à l’hiver prochain! [Je pensais jamais dire ça!] :jerisjaune:
27 avril 2021 à 12:55 #69140jctremblayParticipantJe 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 #69141bebarthMaî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 #69142jctremblayParticipantMerci… 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 fields = [
this.getNthFieldName(i),
this.getField(this.getNthFieldName(i)).display
];
this.getField(fields[0]).display = display.noPrint;
}for (var i = 0; i this.getField(list).display = display.visible;
}this.flattenPages({
nStart: 0,
nEnd: this.numPages – 1,
nNonPrint: 1,
});for (var i = 0; i for (var j = 0; j if (fields[j][0] == this.getNthFieldName(i)) {
this.getField(this.getNthFieldName(i)).display = fields[j][1];
}
}
}28 avril 2021 à 06:09 #69143bebarthMaî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 #69144jctremblayParticipantMerci! Cela fonctionne parfaitement.
28 avril 2021 à 16:57 #69145bebarthMaî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 #69146MerlinMaître des clésfields.push([this.getNthFieldName(i),this.getField(this.getNthFieldName(i)).display]);
Impressionant !
:bravo:28 avril 2021 à 18:11 #69147jctremblayParticipantÇa donne le vertige, mais c’est beau… :jerisjaune: Merci Bebarth!
Impressionant !
:bravo: -
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.