Toutes mes réponses sur les forums
-
AuteurRéponses
-
jctremblayParticipant
Merci mon cher bebarth!
J’était bien conscience que mon code n’était pas optimale. 😀Je vais comparer.
Merci 1000xjctremblayParticipantThom Parker (l’auteur du fameux «All About PDF Stamps») as répondu dans le forum de la communauté.
L’erreur était que:—
The “item_id” in a dialog object must be 4 and only 4 characters long.
Otherwise that item cannot be referenced and returns undefined as a value.jctremblayParticipantC’est rassurant… Je ne suis donc pas fou.
J’ai publié sur la «Community Adobe». On verra ce que nos amis nous diront.jctremblayParticipantEn effet! 😕
Pas de rapport, mais j’ai ajouté un this.resetForm(prefix); avant de remplir les champs de numérotation, car dans mon doc actuel cela m’assurer de réinitialiser le contenue des modèles dupliquer (je n’utilise pas ici de modèle caché).
jctremblayParticipantPour moi ça fonctionne… dans le PDF la page 2 [pageindex 1] (le modèle) lorsque copier, devient la page 3 [pageindex 2] et les champs dupliquer sont avec un P2. au début.
Si j’utilise var pageIndex = this.pageNum +1;
La console me donne ceci et les champs à modifier ne sont pas reconnue
prefix: P3
TypeError: this.getField(…) is nulljctremblayParticipantC’est fait (le prototype en pièce jointe). J’ai placé mes variables de compteurs sur la page 1 (ils seront invisibles au final). Puis, chaque page (2,3,7 et 8) avec un compteur est un modèle avec un bouton. Pour la page 2, comme ceci:
var expTplt = getTemplate("p2");
expTplt.spawn(this.pageNum+1,true,false);
var newCount = parseInt(this.getField("counterP2").value + 3);
this.getField("counterP2").value = newCount;
var pageIndex = this.pageNum;
var prefix = "P" + pageIndex;
this.getField(prefix +".p2.p2_1").value = newCount;
this.getField(prefix +".p2.p2_2").value = newCount + 1;
this.getField(prefix +".p2.p2_3").value = newCount + 2;
Dommage, le client à changer d’idée! 😐
Attachments:
You must be logged in to view attached files.jctremblayParticipantUn compteur par couleur (donc quatre au total dans ce document).
Pour ce qui est de supprimer les pages. En fait, non, ils ne pourrons pas. (Reader ne le permet pas, à moins de leurs offrir un bouton/script).jctremblayParticipantLes pages à dupliquer sont elles toutes identiques ou bien ont elles un contenu différent ? Contenu différent
L’utilisateur a-t-il moyen de supprimer les pages dupliquées et si oui comment ? Non, sinon qu’avec le navigateur de page
Dans l’image, un utilisateur pour dupliquer la section jaune, par exemple, dix fois. Donc, il y aurait plus que douze pages.
Une solution encore plus simple serait de laisser l’utilisateur entrer même les numéros. Cela risque d’être ma solution considérant le temps que j’ai a y mettre. 😀
jctremblayParticipantJe me suis réjouis trop vite…
En réalité, je vais avoir «4 liste» numérotés à configurer. Utiliser le pageIndex ne fonctionneras plus car les pages ne seront pas dupliquer toujours le même nombres ni le même ordre (voir l’image). Il me faudrais une façon de calculer le nombre de pages d’un templates spécifique, et d’utiliser ce nombre pour les calcules.Une idée de comment faire ça?
Attachments:
You must be logged in to view attached files.jctremblayParticipantMes maths n’étaient pas correct… 😃 ceci fonctionne. (PDF joint pour les curieux)
var pageIndex = this.pageNum;
var prefix = “P” + pageIndex;
var nbField = 3;
this.getField(prefix +”.page.A”).value = pageIndex * nbField + 1;
this.getField(prefix +”.page.B”).value = pageIndex * nbField + 2;
this.getField(prefix +”.page.C”).value = pageIndex * nbField + 3;Attachments:
You must be logged in to view attached files.jctremblayParticipantThis seems to be working… the nbField variable is the number of fields on that page affected. Is there a better way of doing it?
var expTplt = getTemplate("page");
expTplt.spawn(numPages,true,false);
var pageIndex = this.pageNum;
var prefix = "P" + pageIndex;
var nbField = pageIndex + 3;
this.getField(prefix +".page.A").value = nbField + 1;
this.getField(prefix +".page.B").value = nbField + 2;
this.getField(prefix +".page.C").value = nbField + 3;
- Cette réponse a été modifiée le il y a 7 mois et 2 semaines par jctremblay.
- Cette réponse a été modifiée le il y a 7 mois et 2 semaines par jctremblay.
jctremblayParticipantMerci!
jctremblayParticipantWow! Merci!
Il ne resterais qu’a enlever l’extension dans le nom de la pièce jointe dans le popup.Que ferions nous sans toi mon cher @bebarth ? 😍
jctremblayParticipantBon… J’ai réussi à faire un menu sur un bouton comme ceci, mais chaque nom des pièces jointes doit être écrit manuellement.
var menuItemNames = ["Le PDF 1", "Le PDF 2", "Le PDF 3", "Le HTML 1", "Le HTML 2"];
var actions = [
'this.exportDataObject({ cName: "PDF1.pdf", nLaunch: 2 });', 'this.exportDataObject({ cName: "PDF2.pdf", nLaunch: 2 });', 'this.exportDataObject({ cName: "PDF3.pdf", nLaunch: 2 });', 'this.exportDataObject({ cName: "html1.html", nLaunch: 2 });', 'this.exportDataObject({ cName: "html2.html", nLaunch: 2 });'
];
var cChoice = app.popUpMenu.apply(app, menuItemNames);
if (cChoice != null) { var selectedIndex = menuItemNames.indexOf(cChoice);
if (selectedIndex >= 0 && selectedIndex < actions.length) {
try {
eval(actions[selectedIndex]);
} catch (e) {
app.alert("An error occurred while executing the selected action: " + e);
} } }Ce qui serait mieux c’est que le menu capture le nombre de pièces et leurs noms de façon dynamique. Ce qui permettrait de l’utiliser rapidement sans avoir à l’éditer pour chaque usage. À suivre… à moins que @bebarth ait une idée pour modifier ce code. Je joint le PDF
Attachments:
You must be logged in to view attached files.jctremblayParticipantOui. J’ai déjà vu ça… je cherche aussi par curiosité.
Je publie ici si je trouve.jctremblayParticipantOui. l’ouverture des pièces jointes est possible avec ceci (et ça marche pour les html aussi).
this.exportDataObject({ cName: “PDF2.pdf”, nLaunch: 2 });
Par contre quand j’essai de faire apparaitre un popup avec la liste de pièces jointes cela ne fonctionne pas. Ex:
Voir le code dans le troisième bouton du fichier
Attachments:
You must be logged in to view attached files.jctremblayParticipantMerci Merlin! C’est bien ce que je pensais.
J’imagine que ce serait la même blocage de sécurité en essayant d’ouvrir un .html qui se trouve en pièce jointe ou l’écriture temporaire d’un fichier ainsi que son ouverture. Je me trompe?
- Cette réponse a été modifiée le il y a 7 mois et 4 semaines par jctremblay.
jctremblayParticipantCela a du sens… même si en réinitialisant les champs de listes, je n’attendais à ce qu’ils exécutent à nouveau la fonction de script personnalisé incluse dans ceux-ci. Ce qui n’est pas le cas.
jctremblayParticipantJ’ai utilisé ceci au lieu d’un bouton Réinitialiser standard et cela marche.
this.resetForm();
var gReset = this.getField("gomette");
gReset.fillColor = color.transparent;
jctremblayParticipantC’est bon aussi… 😀
Tu sais pourquoi, un bouton réinitialiser le formulaire ne remets la couleur de défaut des «gommettes»?
jctremblayParticipantPutain… mon dernier script modifié marche bien. J’avais oublié un «m» dans gommette… 😮
jctremblayParticipantJ’ai pensé à quelques choses comme ça, mais cela ne fonctionne pas.
function light()
{
var cName = event.target.name;
var nSuffix = cName.substring(cName.lastIndexOf('.')+1);
if (!event.willCommit) {
switch (event.changeEx) {
case "Oui":
var couleur=["RGB",0,1,0];
break;
case "Partiellement":
var couleur=["RGB",1,1,0];
break;
case "Non":
var couleur=["RGB",1,0,0];
break;
default:
var couleur=["T"];
}
this.getField("gomette." + nSuffix).fillColor=couleur;
}
}
jctremblayParticipantLe voici…
Attachments:
You must be logged in to view attached files.jctremblayParticipantOui, il y aura plusieurs séries de champs liste «couleurs» et «gommette».
Si j’appelle la fonction
light(event.target.name.substr(event.target.name.indexOf(".")+1));
Il ne se passe rien, probablement car à la fin dans le this.getField(gommette).fillColor=couleur;
le suffix n’est pas ajouter. L’extraction du suffix devrait être récupérer dans le script de document et non pas dans l’appelle de la fonction.je continue mes essai.
jctremblayParticipantActuellement j’ai ceci comme script de document. Et je ne met que light(“gommette.2”); dans la zone de script de touche personnalisé
function light(gommette)
{
var field = this.getField(gommette);
if (!event.willCommit) {
switch (event.changeEx) {
case "Oui":
var couleur=["RGB",0,1,0];
break;
case "Partiellement":
var couleur=["RGB",1,1,0];
break;
case "Non":
var couleur=["RGB",1,0,0];
break;
default:
var couleur=["T"];
}
this.getField(gommette).fillColor=couleur;
}
}
J’aimerai éliminer la nécessité d’entrée le nom du champs de la gomette.
jctremblayParticipantQuel beau hasard, je suis justement en train de faire ce genre de manipulation pour changer la couleur. C’est parfait. Par contre j’aimerai mettre ce script dans un fonction de script de document. Et configurer les variables (les champs «gommette» et la liste «couleurs») pour qu’ils soient automatiser selon le nom des champs ex: «couleurs.0» affecteras automatiquement «gommette.0», «couleurs.1» affecteras «gommette.1», etc.. Cela serait plus facile à modifier, et surtout lorsqu’une série de champs «couleurs/gommette» se retrouve dans une page.
Je sais que ça se fait… mais je suis perdu! 😀
jctremblayParticipantCe sont malheureusement des champs avec des noms différents et de document différents.
L’idée c’est que je recherchais une méthode rapide de remplir les champs lors de la fabrication des formulaires afin d’en valide l’aspect, l’alignement, les polices, etc. Je suis paresseux… 😂
De cliquer OK quelques fois pour les champs problématiques ne sera pas un grand souci.
jctremblayParticipantBon, les gars vous me rassurer. J’ai tellement essayé de trucs… Ce n’est pas tous les formulaires qui possèdent des champs au format spécifique. Je vis donc vivre avec cette limitation.
Merci!
jctremblayParticipantMerci! 😉
jctremblayParticipantOh 😯! C’est la classe comme d’habitude… merci!
Je remarque que je peux le faire pour les liste d’option en remplaçant
combobox
parlistbox
en début de script. Serait-il possible d’avoir les deux types de liste dans un seul script?jctremblayParticipantAucun souci… 😀.
Au final je l’ai modifié avec un
app.response();
pour pouvoir l’executer sur une liste de mon choix.
J’obtiens dans ma console la liste des: Éléments – Valeur d’exportationvar fL = app.response();
var f = this.getField(fL);
var numItems = f.numItems;
console.clear();
console.show();
for (var i=0; i < f.numItems; i++) {
console.println(f.getItemAt(i,false) + " - " + f.getItemAt(i,true));
}
jctremblayParticipantJ’y suis arrivé…
console.show();
console.clear();
var field = this.getField("list");
var numItems = field.numItems;
for (var i = 0; i < numItems; i++) {
var displayValue = field.getItemAt(i, false);
console.println(displayValue);
}
jctremblayParticipantPour être plus précis… le code que j’ai mis va fonctionner SEULEMENT si les valeurs d’exportation sont vides. À ce moment je vais obtenir les éléments. Probablement, car les valeurs d’exportations utilisent le nom des éléments s’ils sont vides.
jctremblayParticipantEn passant avec ceci j’obtiens les valeurs des items de la liste. J’ai besoin d’obtenir les éléments (items)…
var listBoxField = this.getField("list");
var numItems = listBoxField.numItems;
for (var i = 0; i < numItems; i++) {
var item = listBoxField.getItemAt(i);
var displayText = item.toString();
console.println(displayText);
}
jctremblayParticipantBonjour Merlin,
J’obtiens seulement un undefined dans la console. Comment spécifier un champ de liste en particulier?
jctremblayParticipantMerci Bebarth!
Ça me sembles bon. Je valide…jctremblayParticipantMerci bebarth!
Les deux options fonctionnent. L’option de case à cocher est la plus pertinente pour mes besoins. Par contre, j’ai besoin que chacune des lignes de champs (start.x, end.x, Duree.x) possède leur propre case à cocher et non pas une qui affecte tout les champs. Serait-e possible de spécifier la caseAcocher dans le champ de calcul, tout en gardant l’ajout dans le script de document? Le caseAcocher enleveras 1h quand cocher, remettras une heure quand décocher.
Merci!
Qui a besoin de ChatGPT quand on a un Bebarth!Attachments:
You must be logged in to view attached files.jctremblayParticipantMerci JR! Bonne année à nous tous…
jctremblayParticipantMerci!… Me voici corriger devant tous! 😀
jctremblayParticipantOh mince… si simple!
Quand il s’agit que de nombre… le = est suffisant, mais quand c’est du texte il faut absolument == ?Détail important! J’ai passé des heures à chercher. 😂
Merci!
jctremblayParticipantJ’ai trouvé réponse à ma question dans une publication de 2004 dans le forum ici:
[une-alerte-javascript-une-seule]jctremblayParticipantSalut Merlin,
Les codes fournis ne fonctionne pas. Les textes par défaut demeurent lors de l’impression. Voir le PDF pour test.Par contre, j’ai réussi à changer la couleur avec ses code-ci:
//Will Print
for (var i=0; i<this.numFields; i++) {
var oFld = this.getField(this.getNthFieldName(i));
if (oFld.type == "text" && oFld.value == oFld.defaultValue) {
oFld.textColor = color.white;
}
}//Did Print
for (var i=0; i<this.numFields; i++) {
var oFld = this.getField(this.getNthFieldName(i));
if (oFld.type == "text" && oFld.value == oFld.defaultValue) {
oFld.textColor = color.ltGray;
}
}Curieux de savoir pour quoi ton code ne fonctionne pas. 😀
Attachments:
You must be logged in to view attached files.jctremblayParticipantMerci Merlin! J’essai ça…
jctremblayParticipantMe reste donc, juste a trouver comment cibler l’ensemble des champs. je cherche… 😀
jctremblayParticipantIl faut écrire un script d’action de document pour modifier les champs « lorsque le fichier sera imprimé » puis remettre les champs « lorsque le document a été imprimé ».
C’est ce que j’ai essayé sans succès. Ce peut-il que je dois écrit mon script initial non pas dans une action (on blur/focus) mais en validation, ou calcul?
jctremblayParticipantMerci!
J’ajoute à mes signets…jctremblayParticipantAlors oui (avec un peu de retard) bonne année 2022 et merci milles fois pour ce forum!
jctremblayParticipantJ’ai trouvé pourquoi cela ne fonctionnais pas. Dans mon PDF j’ai un nombre de champs de texte plus grand que l’exemple que j’ai inclus. Là, je viens de réalisé que le chiffre ici:
for (var i=0; i<=3; i++) {
doit être plus petit que le totals de mes champs à fusionner. Sinon, cela ne marche plus. Donc, si j’ai 20 champs de texte, je vais devoir utiliser ceci
for (var i=0; i<=19; i++) {
jctremblayParticipantJe vis vérifier ce qui se passe réellement quand je vais avoir la tête libre… Merci.
jctremblayParticipantBebarth, tout est parfait sauf que maintenant j’ai décide de change les noms de mes champs de:
o.txt.1 et o.date.1 à txt.1 et date.1 et maintenant, même si je les renommes dans le script, cela ne fonction plus. je n’y comprend rien. C’est surement une pécadille. Help! 😀
3 décembre 2021 à 03:54 en réponse à : Modifier un script de champ vers un script de document. #70058jctremblayParticipantSi simple… Merci encore une fois. Je vais tenter de m’en souvenir.
2 décembre 2021 à 23:39 en réponse à : Modifier un script de champ vers un script de document. #70056jctremblayParticipantMerci Merlin, c’est parfait! J’ai juste changé le this.getField(“o.box.” + nSuffix).value=”Yes”} pour “Oui”.
Aussi, comment puis-je ajouter une autre modification sans répéter le
if (event.value=="")
if (event.value==""){this.getField("o.box." + nSuffix).value="Off"}
if (event.value==""){this.getField("o.date." + nSuffix).value=""}
else {this.getField("o.box." + nSuffix).value="Oui"} }
jctremblayParticipantMerci Bebarth! Comme c’est beau… Je vérifie tout ça et te reviens.
jctremblayParticipantMerci Merlin,
Du coup, cela a plus de sens et corrige un bogue avec ce que j’utilisais.jctremblayParticipantOk, j’ai trouvé quelque chose. Je crois même que c’était dans ce forum, mais je ne le trouve plus. À moins que cela m’a été fournis en privé.
Merci!
jctremblayParticipantBonjour,
Cette technique je connais. Un peu pénible quand tu as à faire cela plusieurs fois.jctremblayParticipantC’est bon, tout roule. Merci!
Presque… j’ai quelques fichiers ou les claques ne se fusion pas correctement. Calques qui ont été créer dans acrobat directement. Me reste à voir pourquoi.
jctremblayParticipantOMG! Erreur de débutant… Je ne sélectionnait qu’un seul et le second comme destination.
On ne peux pas fusionner vers un autre, mais avec un autre.
C’est bon, tout roule. Merci!
jctremblayParticipantLe script fonctionne bien pour supprimer les dossiers, mais par la suite la fonction Fusionner les Calques d’Acrobat ne fonction pas vraiment. Est-ce une limitation ou un bug? Les calques se merge au document.
jctremblayParticipantOh, interessant! J’essai avec mes documents.
jctremblayParticipantMerci bebarth ! C’est de toute beauté. :jerisjaune:
jctremblayParticipantBonjour, et merci pour toutes les pistes.
Puisque les champs que j’utilisais étaient des boutons, il m’était impossible d’utiliser des scripts de calculs ou de validation. J’ai donc utilisé un JavaScript de document que j’appelle au besoin.
Ceci n’était qu’un exercice pour saisir comment faire basculer la visibilité de boutons par d’autres boutons, puis d’afficher un bouton si les 3 premiers étaient visibles.
Je joins mon PDF pour votre curiosité.jctremblayParticipantMerci!
«Je vais me coucher moins niaiseux !» Espression très québécoise. :geek:
jctremblayParticipantMerci Bebarth!
J’ai du changer le nom de la fonction et aussi mettre le nom du champ avec des ” “.Code:warning_states(event.value,this.getField(“box_a”));J’ai fait des test avec mon code en:
a) action avec le champ désactivé;
b) validation script;
c) executé avec un bouton.Je joint mon document test pour les curieux.
PS: Pour ce genre d’appel de function, quel est la meilleur endroit ou mettre le code? Validate, Calcule, Action? J’ai vu que le code ne s’exécute pas toujours correctement en action sur les champs (souris relâcher entre autre).jctremblayParticipantMerlin, si je veux utiliser ce script mais dans un script de document pour pouvoir appeler la fonction et le nom du champs avec un “Mouse Up”, que dois-je faire.
J’ai essayer de mettre le code comme ceci au début:Code:function color(champ)
{
var cSaisie = event.value;
var oChampB = this.getField(champ);
…Et ceci dans le champ:
Code:color(“nom du champ”);La console me donne toujours ceci quand je modifie le contenu du champ texte.
Code:InvalidSetError: Propriété Set impossible, incorrecte ou inconnue.
Field.fillColor:9:AcroForm:champ_text:Annot1:MouseExit:Action1Que faire pour inclure comme variable dans la fonction un champ de texte modifiable facilement selon les besoins dans les champs?
jctremblayParticipantQuel “amateur”! :jerisjaune:
C’est exactement ça. C’est parfait.
jctremblayParticipantMais je ne suis pas un pro…
Quel humilité! :jerisjaune:
Une autre question pour toi en lien…
Si je veux changer le fond pour blue de tout les champs qui ne sont pas transparent ni blanc, je fais comment.J’ai essayé… avec des || ou && mais rien ne fonctionne.
if (!color.equal(f.fillColor,(color.transparent || color.white))) f.fillColor=color.blue;
jctremblayParticipantWow! Merci. Que c’est agréable d’apprendre des pros comme toi et notre cher Merlin!
:bravo:
jctremblayParticipantMerci Bebarth,
Le code eval est nécessaire en raison de l’utilisation de color.equal?
Ça fonctionne bien. J’ai pu ainsi me créer un script d’application pour m’ajouter une commande de menu pour un rechercher/remplacement de couleur. :extra:Maintenant, si je veux, faire une recherche de tout ce qui n’est pas color.transparent. Je devrait remplacer le color.equal par quoi?
jctremblayParticipantPour faire suite….
Je ne comprend pas pourquoi ceci fonctionne:
Code:var fcolo = color.blue;
var ccolo = color.yellow;
for (var i=0; ivar f=this.getField(this.getNthFieldName(i));
if (color.equal(f.textColor,fcolo)) f.textColor=ccolo;
}Mais que ceci ne fonctionne pas, lorsqu’on utilise un app.response
Code:var fcolo = app.response({cDefault: “color.blue”});
var ccolo = app.response({cDefault: “color.yellow”});for (var i=0; i
var f=this.getField(this.getNthFieldName(i));
if (color.equal(f.textColor,fcolo)) f.textColor=ccolo;
}jctremblayParticipantExactement ce que je voulais. Merci…. encore une fois!
jctremblayParticipantBonsoir bebarth!
Ça, je connais. Ça permet d’uniformiser. Mais je ne veux pas ça, je veux juste changer le Yellow là ou il se trouve. Ce n’est pas tous les champs qui ont un fond Yellow.
Puis je recherche, une façon de changer le yellow pour du red aussi présent dans comme couleur de texte, de trait, etc… sachant que certains champs n’ont pas de Yellow et ne devrait pas serte modifier.jctremblayParticipantVoici l’exemple !
La soirée est arrivé assez vite! :jerisjaune: C’est juste parfait encore une fois. Cela m’ouvre d’énormes possibilités. Merci!
jctremblayParticipantIl faudra donc utiliser une boucle pour extraire cette liste, et appliquer le readonly = false; pour chacun?
jctremblayParticipantAucune idée !
Adobe ne semble pas avoir d’idée non plus! :oh:
Ce serait quand même intéressant qu’alternativement, ils utilisent le Document Cloud pour héberger les formulaires distribuer. L’idée que les réponses soient collectées automatiquement sans gestions de courriel et de pièces joints me semble une fonctionnalité intéressante. Mais bon, la logique d’un utilisateur n’est pas la même qu’un développeur.jctremblayParticipantSi ces champs sont utilisés dans des notations simplifiées de calcul tu mets des devant.
jctremblayParticipantAprès un coup d’œil à la documentation SDK, je pense pas que les paramètres d’accessibilité soit exposés/modifiables avec du JavaScript. :Smiley02:
jctremblayParticipantJ’ai pris le temps de tester un peu.
Le texte saisi dans un champ avec cette option Mot de passe ne peut pas être copié, il n’est pas exporté, et le champ est vidé lors de l’enregistrement du PDF. Donc, ce n’est pas pas une option pour «caché» le texte, mais bien pour permettre la saisi d’un mot de passe.
Un exemple, une section d’un formulaire dédié à l’administration dont tous les champs sont invisibles à l’écran et donc à l’utilisateur. L’administrateur à l’aide de son mot de passe peut terminer le formulaire reçu de celui-ci.jctremblayParticipantÇa donne le vertige, mais c’est beau… :jerisjaune: Merci Bebarth!
Impressionant !
:bravo:jctremblayParticipantMerci! Cela fonctionne parfaitement.
jctremblayParticipantMerci… 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];
}
}
}jctremblayParticipantDans ce que j’avais besoin, seulement la propiétés Print «Print when visible» qui devait changer pour «Never Print».
On va faire autrement.
jctremblayParticipantJe 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”
jctremblayParticipantJe n’étais pas fou alors! :jerisjaune:
Dans le cas de ces PDF, l’utilisation d’action n’est pas possible. Les documents PDF sont remis à des clients, qui ne doivent pas pouvoir imprimer la «Base» d’aucune façon. Souvent avec Reader. Le fournisseur vas devoir mettre la propriété «Ne Jamais Imprimer» à la main. J’essayais de voir comment le faire avec un JS. Mais cela ne semble pas possible.
jctremblayParticipantBien, ça ne marche pas plus…
Avec la console oui, mais pas en action de document.
jctremblayParticipantC’est là, mais pas possible avec un Javascript.
J’ai essayer ceci dans le «document sera» «document est imprimer» et cela ne fonctionne pas. L’état, ne se chance pas. Sauf en sauvegardant le document. Probablement trop de code pour rien.
var ocgArray = getOCGs();
for (var i=0; i < ocgArray.length; i++) {
if (ocgArray.name == “Base”) {
ocgArray.state = !ocgArray.state;
}
}jctremblayParticipantSi je lis bien ici:
Les propriétés d’impression ne sont pas possible avec un javascript. Il faut donc changer la visibilité seulement?
https://acrobatusers.com/tutorials/creating-and-using-layers-ocgs-with-acrobat-javascript/index.html
jctremblayParticipantC’est une possibilité…
Par contre, je ne trouve pas les informations pour modifier l’état «Ne jamais imprimer» vs «Imprimer lorsque visible». Du moins ceci ne semble pas détaillé dans la documentation.
jctremblayParticipant… Certainement l’hiver prochain !
J’ai hâte à l’hiver prochain! [Je pensais jamais dire ça!] :jerisjaune:
jctremblayParticipantC’est ça. La «visibilité» ou pas lors de l’impression.
jctremblayParticipantDonc, 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;jctremblayParticipantPour 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.
jctremblayParticipantBon, j’étais pas fou… du moins pas à cause de ça. :jerisjaune:
Mais j’ai cru comprendre que l’adoption du PDF 2.0 devrait changer la donne.
Il me semble que ça fait des années qu’on entend parler du PDF2.0. Rien vue de concret encore à ce niveau. Toi?
jctremblayParticipantJ’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.
jctremblayParticipantEn général je place cette info dans le tooltip, ou bien parfois en “Texte par défaut” qui disparait au focus.
Brillant! Comme toujours… :bravo:
jctremblayParticipantC’est de la merde… Sur mon MacBook Pro, je dois mettre mon zoom à 66% pour que les maths est du sens. Sur ma Surface Pro, c’est à 43.2%. Il y a certainement un lien avec la résolution de l’écran le moniteur.
jctremblayParticipantJe vois, c’est pour cela que la liste des menus disponible par des actions est limitée.
Ça va être moins long dire à l’utilisateur de faire Ctrl+E ! :geek:
jctremblayParticipantOh là, là… que c’est beau à voir. Bien au delà de mon besoin initial.
Merci et en plus ça restera disponible pour la postérité. :bravo:
jctremblayParticipantUne merde dont je vais aviser Adobe… :mur:
-
AuteurRéponses