Toutes mes réponses sur les forums
-
AuteurRéponses
-
jctremblay
ParticipantC’est bien ce que je pensais. On peut par contre relier un fichier .csv en pièce jointe. Je vais voir si c’est une option faisable. Merci!
jctremblay
ParticipantMerci mon cher bebarth!
J’était bien conscience que mon code n’était pas optimale. 😀Je vais comparer.
Merci 1000xjctremblay
ParticipantThom 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.jctremblay
ParticipantC’est rassurant… Je ne suis donc pas fou.
J’ai publié sur la «Community Adobe». On verra ce que nos amis nous diront.jctremblay
ParticipantEn 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é).
jctremblay
ParticipantPour 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 nulljctremblay
ParticipantC’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.jctremblay
ParticipantUn 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).jctremblay
ParticipantLes 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. 😀
jctremblay
ParticipantJe 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.jctremblay
ParticipantMes 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.jctremblay
ParticipantThis 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 10 mois et 1 semaine par
jctremblay.
-
Cette réponse a été modifiée le il y a 10 mois et 1 semaine par
jctremblay.
jctremblay
ParticipantMerci!
jctremblay
ParticipantWow! 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 ? 😍
jctremblay
ParticipantBon… 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.jctremblay
ParticipantOui. J’ai déjà vu ça… je cherche aussi par curiosité.
Je publie ici si je trouve.jctremblay
ParticipantOui. 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.jctremblay
ParticipantMerci 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 10 mois et 2 semaines par
jctremblay.
jctremblay
ParticipantCela 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.
jctremblay
ParticipantJ’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;
jctremblay
ParticipantC’est bon aussi… 😀
Tu sais pourquoi, un bouton réinitialiser le formulaire ne remets la couleur de défaut des «gommettes»?
jctremblay
ParticipantPutain… mon dernier script modifié marche bien. J’avais oublié un «m» dans gommette… 😮
jctremblay
ParticipantJ’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;
}
}
jctremblay
ParticipantLe voici…
Attachments:
You must be logged in to view attached files.jctremblay
ParticipantOui, 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.
jctremblay
ParticipantActuellement 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.
jctremblay
ParticipantQuel 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! 😀
jctremblay
ParticipantCe 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.
jctremblay
ParticipantBon, 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!
jctremblay
ParticipantMerci! 😉
jctremblay
ParticipantOh 😯! 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?jctremblay
ParticipantAucun 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));
}
jctremblay
ParticipantJ’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);
}
jctremblay
ParticipantPour ê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.
jctremblay
ParticipantEn 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);
}
jctremblay
ParticipantBonjour Merlin,
J’obtiens seulement un undefined dans la console. Comment spécifier un champ de liste en particulier?
jctremblay
ParticipantMerci Bebarth!
Ça me sembles bon. Je valide…jctremblay
ParticipantMerci 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.jctremblay
ParticipantMerci JR! Bonne année à nous tous…
jctremblay
ParticipantMerci!… Me voici corriger devant tous! 😀
jctremblay
ParticipantOh 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!
jctremblay
ParticipantJ’ai trouvé réponse à ma question dans une publication de 2004 dans le forum ici:
[une-alerte-javascript-une-seule]jctremblay
ParticipantSalut 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.jctremblay
ParticipantMerci Merlin! J’essai ça…
jctremblay
ParticipantMe reste donc, juste a trouver comment cibler l’ensemble des champs. je cherche… 😀
jctremblay
ParticipantIl 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?
jctremblay
ParticipantMerci!
J’ajoute à mes signets…jctremblay
ParticipantAlors oui (avec un peu de retard) bonne année 2022 et merci milles fois pour ce forum!
jctremblay
ParticipantJ’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++) {
jctremblay
ParticipantJe vis vérifier ce qui se passe réellement quand je vais avoir la tête libre… Merci.
jctremblay
ParticipantBebarth, 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. #70058jctremblay
ParticipantSi 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. #70056jctremblay
ParticipantMerci 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"} }
jctremblay
ParticipantMerci Bebarth! Comme c’est beau… Je vérifie tout ça et te reviens.
jctremblay
ParticipantMerci Merlin,
Du coup, cela a plus de sens et corrige un bogue avec ce que j’utilisais.jctremblay
ParticipantOk, 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!
jctremblay
ParticipantBonjour,
Cette technique je connais. Un peu pénible quand tu as à faire cela plusieurs fois.jctremblay
ParticipantC’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.
jctremblay
ParticipantOMG! 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!
jctremblay
ParticipantLe 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.
jctremblay
ParticipantOh, interessant! J’essai avec mes documents.
jctremblay
ParticipantMerci bebarth ! C’est de toute beauté. :jerisjaune:
jctremblay
ParticipantBonjour, 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é.jctremblay
ParticipantMerci!
«Je vais me coucher moins niaiseux !» Espression très québécoise. :geek:
jctremblay
ParticipantMerci 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).jctremblay
ParticipantMerlin, 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?
jctremblay
ParticipantQuel “amateur”! :jerisjaune:
C’est exactement ça. C’est parfait.
jctremblay
ParticipantMais 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;
jctremblay
ParticipantWow! Merci. Que c’est agréable d’apprendre des pros comme toi et notre cher Merlin!
:bravo:
jctremblay
ParticipantMerci 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?
jctremblay
ParticipantPour 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;
}jctremblay
ParticipantExactement ce que je voulais. Merci…. encore une fois!
jctremblay
ParticipantBonsoir 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.jctremblay
ParticipantVoici 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!
jctremblay
ParticipantIl faudra donc utiliser une boucle pour extraire cette liste, et appliquer le readonly = false; pour chacun?
jctremblay
ParticipantAucune 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.jctremblay
ParticipantSi ces champs sont utilisés dans des notations simplifiées de calcul tu mets des devant.
jctremblay
ParticipantAprè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:
jctremblay
ParticipantJ’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.jctremblay
ParticipantÇa donne le vertige, mais c’est beau… :jerisjaune: Merci Bebarth!
Impressionant !
:bravo:jctremblay
ParticipantMerci! Cela fonctionne parfaitement.
jctremblay
ParticipantMerci… 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];
}
}
}jctremblay
ParticipantDans ce que j’avais besoin, seulement la propiétés Print «Print when visible» qui devait changer pour «Never Print».
On va faire autrement.
jctremblay
ParticipantJe 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”
jctremblay
ParticipantJe 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.
jctremblay
ParticipantBien, ça ne marche pas plus…
Avec la console oui, mais pas en action de document.
jctremblay
ParticipantC’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;
}
}jctremblay
ParticipantSi 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
jctremblay
ParticipantC’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.
jctremblay
Participant… Certainement l’hiver prochain !
J’ai hâte à l’hiver prochain! [Je pensais jamais dire ça!] :jerisjaune:
jctremblay
ParticipantC’est ça. La «visibilité» ou pas lors de l’impression.
jctremblay
ParticipantDonc, 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;jctremblay
ParticipantPour 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.
jctremblay
ParticipantBon, 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?
jctremblay
ParticipantJ’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.
jctremblay
ParticipantEn 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:
jctremblay
ParticipantC’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.
jctremblay
ParticipantJe 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:
jctremblay
ParticipantOh 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:
-
Cette réponse a été modifiée le il y a 10 mois et 1 semaine par
-
AuteurRéponses