Toutes mes réponses sur les forums
-
AuteurRéponses
-
12 juillet 2017 à 08:21 en réponse à : Intégrer un champ "Signature" pour que ADOBE SIGN le reconnaisse #62753
MerlinMaître des clésBonjour et bienvenue.
La réponse simpliste c’est : Sig_es_:signer1:signature
Le réponse complète se trouve sur cette page, c’est la bible des champs Sign : https://helpx.adobe.com/sign/help/adobesign_text_tag_guide.html
:Smiley15:
MerlinMaître des cléseffectivement tout marche très bien… Il devait ouvrir avec Aperçu…
Je t’avais bien dit que c’était un bouffon.
:Smiley08:
MerlinMaître des clésD’ailleurs je vais prochainement modifier cet article…
C’est fait.
MerlinMaître des clésD’ailleurs je vais prochainement modifier cet article car depuis je me suis aperçu qu’on pouvait faire beaucoup plus simple quand on utilise l’astuce « calque ».
MerlinMaître des clésCe formulaire est tout ce qu’il y a de plus normal, sauf que c’est un formulaire AdobeSign dans lequel les scripts et les calculs ne sont pas censés fonctionner.
Je ne comprend pas bien l’intérêt, il faudrait le reconvertir en « formulaire Acrobat ».À mon avis ton client est un bouffon : :Smiley03:
1- il semble croire que tous les ordinateurs fonctionnent à l’identique et avec les mêmes logiciels, pourtant il a certainement installé ou fait installer des logiciels supplémentaires dessus. En tout cas il doit savoir que c’est possible.
2- je suis prêt à parier qu’il ne se rend pas compte que parfois il utilise Aperçu* à la place d’Acrobat Reader. C’est un cas fréquent.
Pour t’en assurer tu peux télécharger le document proposé à la fin de cet article et lui demander de l’utiliser : s’il voit le calque ou le champ « masque » c’est qu’il n’utilise pas Acrobat Reader (ou alors c’est que JavaScript a été désactivé dans les Préférences mais c’est une action volontaire de l’utilisateur).
https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/forcer-utilisation-pdf-avec-acrobat-reader/Et éventuellement, dans le futur tu peux mettre en pratique ce qui est expliqué dans l’article. C’est plus user-friendly, ça évite ce genre de retour désastreux, et accessoirement ça rassure le client de savoir que son formulaire est « protégé » contre les logiciels bas-de-gamme programmés avec des moufles.
:Smiley15:* Voir : https://www.abracadabrapdf.net/ressources-et-tutos/pdf-mac/lecteurs-pdf-mac/
.
MerlinMaître des clés:bonjour:
MerlinMaître des clésBonjour et bienvenue.
Je ne comprend pas bien l’intérêt d’utiliser une (troisième) liste déroulante pour n’afficher qu’une seule valeur parmi deux possibles dans un champ en lecture seule… :doute: :Euuuh:
Dans cet exemple j’ai remplacé la 3e liste par un champ texte dont la valeur est remplie par la liste N1 (en script de validation) :
https://framadrop.org/r/A_g9w1okR7#z/GgdHN9a4F1XmW/7+rEW0Gq3ZsZPm23DIBBVlH22AM=
Ça marche comme sur des roulettes.
:Smiley15:
MerlinMaître des clésPar-contre, maintenant que j’y pense, il pourrait être judicieux de mettre « zéro » comme valeur par défaut dans les champs de saisie à totaliser car je ne suis pas certain que le script soit suffisamment protégé contre les erreurs NaN (Not a Number).
:idee:
MerlinMaître des clésJe ne saurais jamais pourquoi, ce matin en lisant ton message un éclair venu du fond de l’espace-temps a illuminé mon esprit et ça m’a paru simple.
Du coup ça m’a pris 2 minutes et ça fonctionne parfaitement ! :geek:Script de calcul :
Code:console.clear();
nNouvelHeure = 0;
nNouvelMinute = 0;
for (var i=0; i < 7; i++) {
nValeurDuChamp = this.getField(« Temps_passe. » + ).valueAsString;
aValeurAdecouper = nValeurDuChamp.split(« : »);
nHeure = aValeurAdecouper[0];
if (nHeure == null || nHeure == « ») {nHeure = 0;}
console.println(« nHeure : » + nHeure);
nMinute = aValeurAdecouper[1];
if (nMinute == null || nMinute == « ») {nMinute = 0;}
console.println(« nMinute : » + nMinute);
nNouvelHeure = Number(nNouvelHeure) + Number(nHeure);
nNouvelMinute = Number(nNouvelMinute) + Number(nMinute);
}
console.println(nNouvelHeure + « : » + nNouvelMinute);
// total des heures + minutes
nNouvelHeureMin = Number(nNouvelHeure) * 60;
nTotalMin = Number(nNouvelHeureMin) + Number(nNouvelMinute);
// conversion en HH:MM
nHours = (Math.floor(Math.abs(nTotalMin) / 60));
nMinuts = (Math.abs(nTotalMin) % 60);
console.println(nHours + ‘H ‘ + nMinuts + ‘M’);
event.target.value = nHours + « : » + nMinuts;On peut supprimer les lignes qui commencent par « console »
MerlinMaître des clésJe n’y arrive pas.
L’utilitaire de Practical à l’air très bien pour manipuler les dates et les jours mais pas pour additionner des heures…
J’ai aussi essayé de bricoler un truc maison mais ça ne fonctionne pas correctement.J’avais fait il y a quelques temps une fiche horaire pour une société et j’avais habilement rusé : l’utilisateur devait saisir le temps en minutes, sans les heures (ex : 80 mn).
Du coup la suite est beaucoup plus simple.
:joker:
MerlinMaître des clésj’ai essayé de comprendre mais le niveau est bien trop élevé pour moi.
Tant pis, je ne vous embête pas plus je vais essayer de trouver une autre façon de faire…Je ne suis pas très à l’aise avec les dates mais je verrai ce que je peux faire quand j’aurai un peu de temps, ça me donnera l’occasion de tester ce nouvel utilitaire qui m’a l’air bien « practique ».
MerlinMaître des clésCertainement, mais « chiffre » n’est pas une unité, et il faut nécessairement connaitre l’unité de départ… :geek:
MerlinMaître des clésBonjour et bienvenue.
Oui, c’est possible. Et avec un peu de « chance » on peut même ne pas avoir besoin de JavaScript.
Peux tu partager* ton document ou une maquette ?* https://abracadabrapdf.net/forum/index.php/topic,2974.0.html
MerlinMaître des clésle temps pour moi de le faire traduire et je m’y colle…
Au boulot !
:Smiley03:
MerlinMaître des clésBonjour.
Tu en as rêvé, Practical PDF l’a fait et a rendu beaucoup plus simple ce type de calcul avec son Date Library for Adobe Acrobat : http://practicalpdf.com/the-practicalpdf-date-library-for-adobe-acrobat/
:soleil:26 juin 2017 à 12:43 en réponse à : Comment limiter à "2" maximum la somme de 3 champs texte (format nombre) #62723
MerlinMaître des clésJ’ai placé ça dans les trois champs de saisie, ça à l’air de fonctionner :
Code:nTotal = this.getField(« QteProduit.1 »).value + this.getField(« QteProduit.2 »).value + this.getField(« QteProduit.3 »).value;
if (nTotal > 2)
{
event.value = 0;
nTotal = this.getField(« QteProduit.1 »).value + this.getField(« QteProduit.2 »).value + this.getField(« QteProduit.3 »).value;
this.getField(« total »).value = nTotal;
}
else
{
this.getField(« total »).value = nTotal;
}
MerlinMaître des clésLe mot de passe utilisateur c’est quand on ne peut ouvrir le document qu’après avoir saisi le bon mot de passe d’ouverture (c’est l’utilisateur qui doit avoir le mot de passe).
Protection par Certificat voir : https://www.abracadabrapdf.net/ressources-et-tutos/protection-ressources/protection-par-certificat/
On peut obfusquer tous les scripts, où qu’ils se trouvent.
MerlinMaître des clésBonjour.
Il y a au moins 5 types de protections différentes qui peuvent s’appliquer aux documents PDF, et il ne faut pas mélanger les torchons et les serviettes.
L’inconvénient de la protection c’est que plus elle est forte, plus elle contraignante pour tous les utilisateurs.La « protection facile à cracker » c’est le niveau 1 (pour ne pas dire zéro) de la protection PDF, qui s’appelle « mot de passe auteur » ou « Restrictions d’utilisation ».
Au-dessus on a le « mot de passe utilisateur », très difficile à cracker.
Et ensuite, les protections par Certificat, les DRM, etc.Mais si j’ai bien compris ce n’est pas le document qu’il faut protéger, ce sont les scripts JavaScript.
Alors le plus simple c’est de les protéger directement en les « obfuscant » : http://www.javascriptobfuscator.com/Javascript-Obfuscator.aspx
Ce site est un exemple parmi d’autres, il y a différent niveaux disponibles, sachant que plus le code est brouillé et crypté et moins il s’exécute rapidement.
Et attention aussi aux anti-virus : un PDF qui contient des JavaScripts vraiment brouillés, donc douteux, peut se retrouver bloqué…n’y a-t-il pas de solution vraiment incontournable ?
Non, par nature tout ce est crypté est décryptable. C’est une question de temps et de moyens.
23 juin 2017 à 15:57 en réponse à : Comment limiter à "2" maximum la somme de 3 champs texte (format nombre) #62721
MerlinMaître des clésOui c’est réalisable mais il faut un peu de temps, donc réponse dans les jours qui viennent… :priere:
23 juin 2017 à 12:10 en réponse à : Comment limiter à "2" maximum la somme de 3 champs texte (format nombre) #62719
MerlinMaître des clésBonjour.
Exemple ci-joint, le script de Calcul se trouve dans le champ total.
Le secret réside dans le petit script d’Action « champ désactivé » placé dans chaque champ de saisie qui empêche leur valeur d’être « null » ou « rien » en forçant la valeur à zéro si on ne saisi rien.
Zéro est également leur « Valeur par défaut », en cas de reset.:Smiley15:
Le script d’Action :
Code:if (event.value == « » || event.value == null)
{event.target.value = 0;}Le script de Calcul :
Code:oProduit1 = this.getField(« QteProduit.1 »);
oProduit2 = this.getField(« QteProduit.2 »);
oProduit3 = this.getField(« QteProduit.3 »);
nTotal = Number(oProduit1.value) + Number(oProduit2.value) + Number(oProduit3.value);
event.target.value = nTotal;
// Si total = 2 on désactive le(s) champ(s) à zéro
if (nTotal == 2)
{
if (oProduit1.value == 0)
{oProduit1.readonly = true;}
if (oProduit2.value == 0)
{oProduit2.readonly = true;}
if (oProduit3.value == 0)
{oProduit3.readonly = true;}
}
// si total < 2 on réactive tous les champs
else if (nTotal <= 2)
{
oProduit1.readonly = false;
oProduit2.readonly = false;
oProduit3.readonly = false;
}
MerlinMaître des clésLa réponse est non.
Le meilleur moyen de rendre cette opération plus sexy et plus explicite c’est de placer le document crypté en pièce jointe dans un autre PDF non protégé, ce qui revient à utiliser une « enveloppe virtuelle ».
L’intérêt de l’enveloppe c’est qu’elle permet d’indiquer un destinataire et d’expliquer de quoi il s’agit, c’est toujours plus parlant que cette petite boite de dialogue anonyme et pas du tout explicite.
Dans cet exemple on utilise une protection par certificat ID, mais ça fonctionne très bien avec une « simple » protection par mot de passe : https://files.acrobat.com/a/preview/e9d6fc45-b9ab-41e0-b0d3-521781b5a1b3
Dans cet exemple on démontre aussi que le format PDF est bien mieux sécurisé que R2D2…
:Smiley03:
MerlinMaître des clésBonjour.
A priori c’est très simple, on peut utiliser l’Action par défaut : Afficher/masquer un champ en Action Souris entrée ou Souris relevée.
Là où ça se corse c’est pour ensuite définir comment masquer l’élément qu’on vient d’afficher…
MerlinMaître des clés…
Il n’y a de pièce jointe dans aucun des messages précédents… ???
:Euuuh:En cas de problème de poids et/ou de format de fichier avec les fonctions natives du forum voir : https://abracadabrapdf.net/forum/index.php/topic,2974.0.html
:Smiley03:
MerlinMaître des clésBonjour.
Qu’est-ce que c’est « la fenêtre popup » ?
Si c’est la fenêtre intitulée : Protection par mot de passe – Paramètres alors la réponse est non.
MerlinMaître des clésBonjour.
J’ai bien l’impression que le problème vient du script de validation de la liste déroulante…
Donc, au lieu de « pousser » la valeur depuis la liste déroulante vers le champ email avec un script de format, j’utiliserais plutôt un script de calcul dans le champ email pour « tirer » la valeur.
:Smiley01:
MerlinMaître des clésBonjour.
Pour imprimer la page 1 deux fois il faut répéter la ligne de script :
this.print({bUI: true, bShrinkToFit: false, nStart: 0, nEnd: 0});
this.print({bUI: true, bShrinkToFit: false, nStart: 0, nEnd: 0});
(En JavaScript la numérotation des pages commence à zéro)Pour imprimer la page 3 :
this.print({bUI: true, bShrinkToFit: false, nStart: 2, nEnd: 2});
Par-contre, imprimer 3 pages en recto-verso je ne sais pas faire, il faut impérativement un nombre pair. :geek:
15 juin 2017 à 08:26 en réponse à : Rendre des champs obligatoire si un bouton radio est activé #62690
MerlinMaître des clésLes 3 premiers résultats de cette recherche sont les plus pertinents :
– https://abracadabrapdf.net/forum/index.php/topic,2922.msg16543.html
– https://abracadabrapdf.net/forum/index.php/topic,2814.msg15730.html
– https://abracadabrapdf.net/forum/index.php/topic,1411.msg6534.html
:idee:14 juin 2017 à 16:26 en réponse à : Rendre des champs obligatoire si un bouton radio est activé #62688
MerlinMaître des clésBonjour et bienvenue.
Utilise l’intitulé « Rechercher » ci-dessus pour chercher « rendre champ obligatoire » dans le forum.
Tu trouveras des dizaines de réponses, dont quelques-unes devraient convenir.
:Smiley15:
MerlinMaître des clésAh oui, zut, j’avais oublié cette histoire de trustedFunction… :oh:
Merci Merlin car j’ignorais qu’on pouvais ajouter des fonctions JS à Acrobat en passant par ce dossier !
C’est parce-que tu n’utilises pas les abracadabraTools !
C’est gratuit ==> https://www.abracadabrapdf.net/utilitaires/acrobat-plugins/abracadabratools/
:Smiley15:
MerlinMaître des clésEn effet, je préférerais utiliser l’identifiant si c’est possible. Ça évite de devoir remplir le champ Nom.
Remplace identity.name par identity.loginName
MerlinMaître des clésAs-tu installé le fichier .js et relancé Acrobat ?
MerlinMaître des clésPour info, le code JavaScript utilisé est :
Code:f = this.getField(« Nom du dessinateur »);
f.value = nomUtilisateur()Surtout pas, tu places juste nomUtilisateur(); en action champ activé, sans rien d’autre. C’est une fonction, pas une valeur.
Par-contre le script n’est pas protégé, si la rubrique « Nom » n’est pas renseignée dans les Préférences : Identité il retournera quelque chose de ce genre.
Sinon on peut utiliser l’identifiant, qui est parfois le nom de l’ordinateur mais qui est forcément renseigné.
MerlinMaître des clésTrop facile, il y avait ça dans les premières versions d’abracadabraTools (mais j’ai finalement supprimé les fonctions qui n’intéressaient personne). :geek:
1- Tu enregistres ça dans un fichier texte avec le suffixe .js que tu places dans le sous-dossier JavaScripts d’Acrobat (Reader ou Pro) :
Code:function nomUtilisateur() {
if (event.target.value.length = 0) { // si le champ est vide
event.target.value = identity.name; // on le rempli avec le nom utilisateur
}
}2- Dans le champ concerné tu appelles la fonction en action « champ activé » (on focus) :
Code:nomUtilisateur();.
MerlinMaître des clésBonjour.
Le nom de l’utilisateur de la session est une donnée sensible, pour des raisons de sécurité on ne peut pas y accéder directement depuis un document : il faut en passer par un script d’application (voir : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/les-differents-niveaux-dutilisation-des-scripts-javascript/ )
Autrement dit, pour que ça fonctionne il faut ajouter un fichier .JS dans un des sous-répertoire d’Acrobat sur chaque poste utilisateur.
8 juin 2017 à 09:59 en réponse à : Zone de liste remplie programmatiquement retourne toujours l’index -1. #62675
MerlinMaître des clésJ’ai créé un formulaire dans LiveCycle Designer…
Je ne connais pas du tout ce logiciel. :joker:
MerlinMaître des clésBonjour.
Oui, j’ai une autre astuce bien plus simple qu’un mot de passe : appuyer sur ALT ou sur MAJ avant de cliquer sur le bouton.
C’est presque comme un mot de passe : il suffit de le savoir. :Smiley03:
MerlinMaître des clésBonjour.
Quelle valeur faut-il retenir si l’utilisateur choisi de saisir un nom ?
Ce qui a été saisi ou bien autre chose ?
MerlinMaître des clésBonjour.
– L’accusé de réception des emails c’est un vieux truc des années 90 qui ne fonctionne qu’avec Outlook/Entourage et qui est superbement ignoré par ailleurs : ça n’est pas fiable.
– À ma connaissance il n’est pas possible de faire ça avec JavaScript.
– Il n’y a peut être pas besoin de réinventer la roue car il existe déjà une « vraie » fonction d’accusé de réception des PDF envoyés par email via Adobe Send dans Acrobat DC (Reader ou Pro) > menu Fichier > Envoyer le fichier > Envoyer et effectuer le suivi > Créer un lien anonyme/Envoyer des invitations personnalisées.
.
2 juin 2017 à 11:24 en réponse à : Création d’un champ de recherche avec mise en évidence du résultat #62667
MerlinMaître des clésBonjour.
en utilisant un « Ctrl F » et en tapant le nombre à 6 chiffre ça peut le faire. Mais… ça n’a rien de très visuel.
Normalement le résultat d’une recherche est surligné… :doute:
Je ne connais rien de concret à proposer, j’ai quelque part au fond d’un vieux grimoire un script qui permet de poser un commentaire (surlignage, cadre, etc.) sur le résultat d’une recherche.
Mais l’inconvénient c’est qu’une fois créé, ledit commentaire restera à demeure, il faudrait que l’utilisateur clique dessus pour le supprimer.:joker:
MerlinMaître des clésBonjour.
Est-ce que par « fichier » il faut comprendre « page » ?
:Euuuh: :doute:
MerlinMaître des clésSauf si c’est une erreur qui empêche le script de continuer à s’exécuter. :geek:
MerlinMaître des clésLa Console JavaScript devrait s’afficher automatiquement en cas d’erreur si les options sont cochées comme dans la capture ci-dessous. Ça vaut aussi pour Reader.
MerlinMaître des clésA priori on dirait un bug, mais tels que je les connais ils* vont répondre que cette précaution est prise pour « raisons de sécurité ».
Ce qui peut avoir du sens si on veut éviter le remplissage programmatique…
:doute:* Les ingénieurs
MerlinMaître des clésta liste semble fonctionné
Chez moi ça donne :
« ReferenceError: dgfdg is not defined
1:AcroForm:Button5:Annot1:MouseUp:Action1″
:doute:Ca doit se faire en LiveCycle
Je ne connais pas du tout ce logiciel. :joker:
31 mai 2017 à 12:54 en réponse à : Comment rendre un formulaire non enregistrable, seulement imprimable #62628
MerlinMaître des clésSinon il y a l’astuce d’Alex : placer « this.resetForm » en évènement « quand le document sera enregistré ».
Pour ne pas être trop brutal avec l’utilisateur on peut le prévenir en utilisant une alerte.
MerlinMaître des clésQuel logiciel utilises tu ?
Acrobat ou Designer ?
MerlinMaître des clésBonjour.
Tout dépend de ce qu’on entend par « classement par index »…
Quel genre d’index ??? :Euuuh:Je suis positivement impressionné par l’exemple « DialogSample.pdf » que je ne connaissait pas, mais on est en plein dans ce qui fait la différence entre Acrobat Pro et LiveCycle Designer : Designer à des outils intégrés pour aider à construire ce type de boite de dialogue alors qu’avec Acrobat Pro il faut tout Javascripter en lignes de code.
Mais il y a d’autres différences plus importantes, il faut absolument commencer par lire cet article : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/acroforms-ou-xfa/
MerlinMaître des clés:Smiley15:
MerlinMaître des clésBonjour.
Incorporer un SWF dans un PDF est effectivement plutôt has-been, mais actuellement c’est encore le seul moyen d’obtenir de genre d’effet pour une image ou document formaté dans un PDF (pour du texte ce n’est pas un souci).
Mais l’avenir se débouche, après 9 ans d’attente le PDF 2.0 pointe enfin le bout de son nez : https://indesignsecrets.com/whats-next-for-pdf.php
:Smiley15:
MerlinMaître des clésParfois, à trop vouloir simplifier on fini par se compliquer la vie :geek: :Smiley03:
MerlinMaître des clésEssaye en remplaçant dans les 4 dernières lignes du script :
event.value =
par
event.target.value =
MerlinMaître des clés– Ce script est exécuté par le champ cible, donc il n’y a pas besoin d’indiquer son nom. Ce qui rendra le script plus facilement recyclable.
– Quand on utilise « value » le logiciel essaye de différencier la nature de la valeur (nombre, chaine de caractères, etc.). Dans ce cas on ne veut pas additionner des nombres mais concaténer des chaines de caractères. Donc il vaut mieux utiliser « valueAsString » qui indique qu’il s’agit d’une chaine de caractères.
– Pour « vider » le champ il faut ajouter une autre condition.
Code:var cC1S = event.valueAsString;
if (cC1S == « ») {event.value = « »;}
else if (cC1S < 10) {event.value = "000" + cC1S;}
else if (cC1S > 9 && cC1S < 100 ) { event.value = "00" + cC1S;}
else if (cC1S > 99 && cC1S < 1000) { event.value = "0" + cC1S;}
MerlinMaître des clésIl n’y a que 3 conditions à tester pour ajouter le nombre de zéros nécessaires à la valeur saisie :
– si n (event.value) < 10 ==> ajout de trois zéros
– si n > 9 et n < 100 ==> ajout de deux zéros
– si n > 99 et n < 1000 ==> ajout de un zéro
MerlinMaître des clésSi on utilise le Format « Nombre » ça tronque systématiquement les zéros directeurs (à gauche), le plus simple est de mettre le Format sur « Aucun », et dans Options de limiter à 4 caractères.
MerlinMaître des clésLe folio affiché sur les pages ne compte pas, car dans l’absolu rien ne garanti qu’il soit exact.
C’est le numéro d’ordre de la page dans le document qui compte, sachant que la numérotation commence à zéro.imprimer la 3ème et la 5ème et pas la 4ème?
1- Il faut absolument que tu lises ce court article : http://www.academie-francaise.fr/abreviations-des-adjectifs-numeraux
:Smiley03:2- Si la séquence de pages à imprimer n’est pas continue il faut répéter l’instruction.
this.print({bUI: true, bShrinkToFit: true, nStart: 2, nEnd: 2}); // page 3
this.print({bUI: true, bShrinkToFit: true, nStart: 4, nEnd: 4}); // page 5:Smiley15:
22 mai 2017 à 16:01 en réponse à : Extraction de pages d’un lot pdf avec renommage des noms de fichiers #62649
MerlinMaître des clésIci c’est déjà une bonne adresse : https://www.abracadabrapdf.net/contact/ :Smiley03:
Sinon, pour me mettre en concurrence, c’est plutôt par là : https://forums.adobe.com/community/acrobat/places
:Smiley15:
MerlinMaître des cléscomment fait-on pour n’imprimer que 2 pages sur 3?
Cette question n’a pas de réponse. Il faut impérativement connaitre le numéro des pages à imprimer, ou le numéro de la page à ne pas imprimer.
Pour imprimer toutes les pages sauf la première :
Code:this.print({bUI: true, bShrinkToFit: true, nStart: 1, nEnd: this.numPages-1});22 mai 2017 à 11:39 en réponse à : Extraction de pages d’un lot pdf avec renommage des noms de fichiers #62647
MerlinMaître des clésBonjour et bienvenue.
Je ne connais pas de script ni de logiciel existant capable de faire ça.
Par-contre il est possible de développer un script JavaScript pour Acrobat si c’est un travail fréquent ou récurrent.
MerlinMaître des clésBonjour.
Il est possible de masquer des pages-modèles et de remplir leurs champs depuis la page d’accueil.
Pour imprimer les pages masquées il faut les dé-masquer, les imprimer, et les remasquer.Le mieux est de commencer par ce tuto : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/dupliquer-dynamiquement-des-pages-dans-un-pdf/
Quand le document tiendra la route il ne restera plus qu’à créer le script d’impression.
22 mai 2017 à 08:08 en réponse à : Comment rendre un formulaire non enregistrable, seulement imprimable #62626
MerlinMaître des clésCet article ne conseille pas du tout l’utilisation de Designer !
Quelle est l’option que tu cherches ?19 mai 2017 à 07:42 en réponse à : Comment rendre un formulaire non enregistrable, seulement imprimable #62624
MerlinMaître des clésBonjour et bienvenue.
Il n’est pas possible d’empêcher l’utilisateur d’enregistrer un formulaire qu’il vient de remplir, avec ou sans mot de passe.
Le formulaire que tu donnes en lien n’est pas protégé, par-contre il est fait avec Designer et non pas avec Acrobat.
Bien que masquée par l’utilisation du suffixe PDF dans les deux cas, ces deux logiciels utilisent des formats incompatibles entre-eux, voir : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/acroforms-ou-xfa/
MerlinMaître des clésSupprimer toutes les pages sauf la première :
Code:this.deletePages({nStart: 1, nEnd: this.numPages-1});Attention : Acrobat Reader ne peut supprimer QUE des pages générées depuis un modèle, il ne peut pas supprimer des pages statiques normales (contrairement à Acrobat Pro et Standard).
MerlinMaître des clésBonjour.
Ce tuto a été écrit pour toi : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/dupliquer-dynamiquement-des-pages-dans-un-pdf/
:Smiley15:
MerlinMaître des clésBonjour et bienvenue.
Je ne suis pas l’auteur de ce script et je ne saurais pas t’aider car je n’y connais pas grand-chose en gestion des signets avec JavaScript.
:joker:
MerlinMaître des clésDésolé c’est une erreur basique et un cas typique d’utilisation de « valueAsString » au lieu de « value » tout court. :geek:
Remplace le premier script ci-dessus par celui-ci :
Code:// script de calcul
if (this.getField(« Text4 »).valueAsString.length > 0) {var cChamp1 = 1;}
else {var cChamp1 = 0;}
//
if (this.getField(« Text5 »).valueAsString.length > 0) {var cChamp2 = 1;}
else {var cChamp2 = 0;}
//
if (this.getField(« Text6 »).valueAsString.length > 0) {var cChamp3 = 1;}
else {var cChamp3 = 0;}
//
if (this.getField(« Text7 »).valueAsString.length > 0) {var cChamp4 = 1;}
else {var cChamp4 = 0;}
//
event.target.value = (cChamp1 + cChamp2 + cChamp3 + cChamp4) * 1;
//
MerlinMaître des clésJe voulais le modifier, mais il doit être intégré au document sans pouvoir le récupérer.
Le seul moyen, c’est d’en mettre un autre par-dessus.C’est exactement ça, il n’y a pas d’autre possibilité.
MerlinMaître des clésBonjour.
Ça tient en 3 scripts :
Code:// script de calcul
if (this.getField(« Text4 »).value.length > 0) {var cChamp1 = 1;}
else {var cChamp1 = 0;}
//
if (this.getField(« Text5 »).value.length > 0) {var cChamp2 = 1;}
else {var cChamp2 = 0;}
//
if (this.getField(« Text6 »).value.length > 0) {var cChamp3 = 1;}
else {var cChamp3 = 0;}
//
if (this.getField(« Text7 »).value.length > 0) {var cChamp4 = 1;}
else {var cChamp4 = 0;}
//
event.target.value = (cChamp1 + cChamp2 + cChamp3 + cChamp4) * 1;
//Code:// script de validation
if (event.value) {
// on découpe la date au format dd/mm/yyyy
var cJour = event.value.split(« / »)[0];
var cMois = event.value.split(« / »)[1];
var cAnnee = event.value.split(« / »)[2];
// et on la replace dans le champ concerné
this.getField(« Text2 »).value = cAnnee + « _ » + cMois + « _ » + cJour;
}Code:// script de calcul
var oChampD = this.getField(« Text9 »);
var oChampDate = this.getField(« Text2 »);
var oChampE = this.getField(« Text10 »);
if (oChampD.value.length > 0 && oChampDate.value.length > 0 && oChampE.value.length > 0) {
event.value = oChampD.value + « _ » + oChampDate.value + « _ » + oChampE.value;
} else {
event.value = « »;
}
MerlinMaître des clésBonjour et bienvenue.
Bonne nouvelle, il n’y a pas besoin de JavaScript :
– il faut afficher le panneau des Pages (vignettes) sur la gauche du document,
– clic-droit sur l’icône de la première page : Propriétés : Sélectionner l’action : Lire un son.Attention, pour cette fonction Acrobat ne reconnait que les sons aux formats WAV non compressé ou AIFF non compressé.
Par-contre, sauf cas particulier, on réservera cet usage aux documents monopages, sinon ça devient vite saoulant… :Smiley03:
MerlinMaître des clésDans ce cas laisse comme c’est tant que ça fonctionne, sinon il faudrait modifier les scripts. :joker:
MerlinMaître des clésVoilà le script pour le premier total (A), je te laisse l’adapter pour les autres totaux :
Code:if (this.getField(« Check1E »).value == « X » && this.getField(« Dropdown01 »).value == « A ») {
var nCheck1E = this.getField(« Text1 »).value;
} else {
var nCheck1E = 0;
}
//
if (this.getField(« Check2E »).value == « X » && this.getField(« Dropdown02 »).value == « A ») {
var nCheck2E = this.getField(« Text2 »).value;
} else {
var nCheck2E = 0;
}
//
if (this.getField(« Check3E »).value == « X » && this.getField(« Dropdown03 »).value == « A ») {
var nCheck3E = this.getField(« Text3 »).value;
} else {
var nCheck3E = 0;
}
//
if (this.getField(« Check4E »).value == « X » && this.getField(« Dropdown04 »).value == « A ») {
var nCheck4E = this.getField(« Text4 »).value;
} else {
var nCheck4E = 0;
}
//
if (this.getField(« Check5E »).value == « X » && this.getField(« Dropdown05 »).value == « A ») {
var nCheck5E = this.getField(« Text5 »).value;
} else {
var nCheck5E = 0;
}
//
event.target.value = (nCheck1E + nCheck2E + nCheck3E + nCheck4E + nCheck5E) * 1;Pour le 2e total (B, C, D) il faut ajouter deux conditions OU aux lignes if :
Code:if (this.getField(« Check1P »).value == « X » && this.getField(« Dropdown01 »).value == « B » || this.getField(« Dropdown01 »).value == « C » || this.getField(« Dropdown01 »).value == « D »)Par ailleurs, le script des listes déroulantes devrait se trouver en script de validation plutôt qu’en script de format.
:Smiley15:
MerlinMaître des clésBonjour.
« Faire des sommes avec des conditions » c’est assez court comme explication…
Tout comme : « faire la somme des valeurs saisies des poids correspondants »… :Euuuh:
Par ailleurs il est question « d’activer des cases » mais elles sont en « Lecture seule ». :mur:Est-ce qu’il faut juste comprendre que tu voudrais faire la somme des cases cochées pour chaque colonne ou bien est-ce plus compliqué que ça ? :doute:
MerlinMaître des clésCode:var cTexte = this.getField(« Date »).valueAsString;Le vrai nom du champ Date c’est : Date_af_date
Oui je sais… C’est une nouveauté d’Acrobat DC… Les noms des nouveaux champs Date ne sont pas indiqués en entier dans la fenêtre des Propriétés, c’est un cauchemar avec JavaScript. :oh: :mur:var cLes4derniers = parseInt(cTexte.substr(cTexte.length – 4));
Dans mon exemple on récupérait la valeur dans une variable, là il faut en plus la placer dans le champ concerné.
Mais si on fait ça directement et que le champ Date est vide, le 2e champ affiche NaN (Not a Number), donc il ne faut exécuter le script que si la valeur du champ Date n’est pas nulle.
Ce qui nous donne :Code:// mise en variable de la chaine de caractères
var cTexte = this.getField(« Date_af_date »).valueAsString;
if (cTexte != « ») {
// récupération des 4 derniers caractères
var cLes4derniers = parseInt(cTexte.substr(cTexte.length – 4));
// importation dans le champ
event.value = cLes4derniers;
} else {
event.value = « »;
}.
MerlinMaître des clésil ne marche pas.
C’est un peu court comme explication… :Euuuh:
Peux tu partager tout ou partie de ce formulaire ? Au moins une page avec les deux champs concernés.
( Voir : http://abracadabrapdf.net/forum/index.php/topic,2974.msg16849.html#msg16849 )
MerlinMaître des clésBonjour.
Code:// mise en variable de la chaine de caractères
var cTexte = this.getField(« NomDuChamp »).valueAsString;
// récupération des 4 derniers caractères
var cLes4derniers = parseInt(cTexte.substr(cTexte.length – 4));
MerlinMaître des clésLe meilleur endroit pour poser cette question c’est sur le forum d’Adobe.
En français (forum généraliste) : https://forums.adobe.com/community/international_forums/francais
En anglais (forum consacré à ADE) : https://forums.adobe.com/community/adobe_digital_editions:Smiley15:
MerlinMaître des clésBonjour et bienvenue.
J’espère que je suis au bon endroit.
Hélas non, nous sommes sur un forum consacré au format PDF et aux logiciels qui servent à exploiter ce format.
On est donc bien loin d’ADE, des ePUB et du format .ascm.
:joker:
MerlinMaître des clésBonjour et bienvenue.
Il faut sélectionner le bouton-radio coché par défaut, aller dans Propriétés : Options et déselectionner la coche « Bouton activé par défaut ».
Sans oublier de réinitialiser le formulaire ensuite.
:Smiley15:
MerlinMaître des clésBonjour et bienvenue.
Le fichier joint n’est qu’une image, cependant on voit que c’est un formulaire XFA créé avec LiveCycle Designer.
C’est faisable dans un formulaire XFA créé avec Designer, mais pas dans un formulaire AcroForms créé avec Acrobat Pro.Avant d’opter pour l’un ou pour l’autre il faut absolument lire cet article : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/acroforms-ou-xfa/
.
MerlinMaître des clésLes champs de la page modèle ne doivent pas avoir de préfixe.
C’est au moment de la duplication qu’Acrobat ajoute automatiquement (ou non, selon ce qu’on demande) les préfixe dans les noms de champs.Le problème dans ton document c’est que dans son état initial il content déjà des pages avec des champs préfixés (P2 sur la page 2, P4 sur la page 3 et P6 sur la page 3).
Le préfixage se fait en aveugle lors de la duplication : Acrobat ne vérifie pas si le préfixe qu’il va utiliser existe déjà dans le document*, et si c’est le cas il y a des collisions entre champs homonymes.Donc, dans le cas qui nous intéresse, l’état initial du document ne doit contenir aucune page avec des champs préfixés.
* Les choses sont bien faites parce-que le plus souvent c’est ce qu’on veut.
MerlinMaître des clésBonjour.
Les champs se renomment correctement lors de la génération de nouvelles pages à partir d’un modèle. On le voit parce-qu’ils prennent tous le préffixe P1.xxxxxxxxxx, P2.xxxxxxxxx, etc.
Le problème c’est qu’au départ ce document contient déjà des pages dupliquées à partir d’un modèle, donc quand on en duplique encore d’autres il arrive un moment où il y a doublon entre pages dont les champs ont des préfixes identiques.
Voir : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/dupliquer-dynamiquement-des-pages-dans-un-pdf/
MerlinMaître des clésJ’ai une case (à cocher) en moins… :geek:
Je l’avais oubliée.Comme les cases-à-cocher n’ont pas d’évènement Calcul il va falloir faire l’inverse : ce ne sont pas les champs concernés qui vont aller « tirer » l’info, c’est la liste déroulante qui va la « pousser ».
À placer en script de validation perso dans la liste déroulante :
Code:if (event.value != « Interlocuteur 1 » && event.value != « Interlocuteur 2 ») {
this.getField(« champTexte »).display = display.visible;
this.getField(« caseAcocher »).display = display.visible;
} else {
this.getField(« champTexte »).display = display.hidden;
this.getField(« caseAcocher »).display = display.hidden;
}Sans oublier de supprimer le script de calcul dans le champ texte.
.
MerlinMaître des clésJe voulais donc savoir si on pouvait faire en sorte qu’au moins un champ de texte apparaîsse quand Interlocuteur 1 et 2 ne sont PAS choisi.
Place ce JavaScript en script de calcul dans le champ texte a faire apparaitre-disparaitre :
Code:if (this.getField(« liste-deroulante »).value != « Interlocuteur 1 » && this.getField(« liste-deroulante »).value != « Interlocuteur 2 ») {
event.target.display = display.visible;
} else {
event.target.display = display.hidden;
}.
MerlinMaître des clésMagicien peut être, mais pas devin. :merlin:
Comment savoir de quoi il est question et quel est le comportement attendu ?
D’autant qu’il n’y a pas non plus de question…
:Smiley15:
MerlinMaître des clés
MerlinMaître des clésBonjour.
Le support des fonctionnalités du format PDF dépend du logiciel utilisé, si ça ne fonctionne pas avec PDF Expert il faut essayer avec Acrobat Mobile, ou avec un autre logiciel…
Quand on veux utiliser des formulaires PDF (vraiment) interactifs sur tablettes, le mieux est d’utiliser des tablettes qui fonctionnent sur Windows car on a exactement le même Acrobat Reader que sur PC, contrairement à Android ou iOS, et c’est donc sans mauvaise surprise au niveau du fonctionnement.
:Smiley03:
MerlinMaître des clésPour le coup c’est simplissime, il suffit de concaténer les deux scripts. :Smiley15:
Code:event.target.value = this.getField(« CHAMP1 »).valueAsString;
if (event.target.value == « Noms et prénoms ») {event.target.value = « »;}
MerlinMaître des clésJe viens d’essayer le truc de geek et ça fonctionne.
Il faut coller ce script dans la Console JavaScript (ctrl-J ou cmd-J) et l’exécuter* :this.getField(« Dropdown1« ).insertItemAt(« Il était une foisrdans la ville de Foix« , « Foix« , 0);
En vert le nom du champ liste déroulante.
En orange le texte du label, et en rouge le métacaractère r qui représente le saut de ligne.
En bleu la valeur d’exportation.
En turquoise le numéro d’ordre du label (en JavaScript le compte commence à zéro, zéro indique donc le premier label, en tête de liste).* Il faut sélectionner tout le script après l’avoir collé dans la Console et appuyer sur la touche Entrée (à ne pas confondre avec la touche Retour).
MerlinMaître des clésBonjour.
Je suppose que par « décupler » tu veux dire « dédoubler »… :Smiley03:
Deux champs de même nom ne peuvent pas être l’un en lecture seule et l’autre non.
Il faut 2 champs avec des noms différents + un petit script de calcul placé dans le champ en lecture seule :Code:event.target.value = this.getField(« CHAMP1 »).valueAsString;Où « CHAMP1 » est le nom du champ qui n’est pas en lecture seule.
:Smiley15:
MerlinMaître des clésJe suis malheureusement que l’exécutant de ce que l’on me demande de faire
Il faut savoir être force de proposition pour passer chef ! :Smiley03:
En attendant, ce choix entre 2 polices ou 2 couleurs n’est pas indiqué clairement et je donc pas évident à appréhender pour l’utilisateur final.
Par ailleurs, la Console renvoie des messages d’erreurs à chaque clic sur une case-à-cocher. :geek:
MerlinMaître des clésTu en avais rêvé, Merlin l’a fait ! :extra:
En fait il suffisait de réfléchir deux minutes avec un esprit frais.Les scripts de calcul sont dans les listes déroulantes, j’ai renommé* les cases-à-cocher et les deux valeurs d’exportation* utilisées.
==> https://framadrop.org/r/HE_Jsc_GPP#4mbHkL0K4PHXRvd/HKk2Of7MAszyj4G08pc8DvrWQD4=* Jamais d’espaces ni d’accents…
MerlinMaître des clésMon Acrobat Pro X est une version 10.1.3
Tu devrais commencer par faire la mise-à-jour, il n’est pas impossible que ça vienne de là car Acrobat X pour Mac OS a eu beaucoup de problèmes avec cette fonction (qui ne fonctionnait pas du tout dans la X.0).
Sinon j’ai essayé avec ton document : pas de problème.
MerlinMaître des clésLa bonne nouvelle c’est que pour la troisième variable il n’y a que deux cas à gérer.
Dans le cas Polices + Couleurs je trouve que l’ensemble des conditions est difficilement gérable, ou alors il faudrait y réfléchir plus longtemps. :geek:
Il serait beaucoup plus simple d’utiliser deux cases, ou une autre liste déroulante, pour donner à l’utilisateur le choix entre 2 polices – 1 couleur et 1 police – 2 couleurs.
Ces deux cases, ou cette liste, gérerais directement l’affichage des quatre listes de choix.
MerlinMaître des cléset j’enregistre le PDF
PS
Le processus exact c’est :
1- Dans Acrobat Pro avec l’outil de modification : clic-droit sur l’image : Modifier Avec…
2- Une fois l’image modifiée dans Photoshop : Enregistrer (cmd-S) et Fermer (cmd-W) (et surtout pas l’inverse parce-que ça provoque parfois des dysfonctionnements)
3- La modification doit se reporter instantanément dans le PDF. Enregistrer ou non le PDF ne change rien.
MerlinMaître des clésBonjour et bienvenue.
Quand j’ouvre les images dans le PDF avec Photoshop CS6 (Outils->Modifier objet->Alt+double clic)
C’est une des fonctions les plus capricieuses d’Acrobat…
Utilises tu bien la version X.1.16 d’Acrobat ?
Voir : https://www.abracadabrapdf.net/ressources-et-tutos/acrobat-reader/acrobat-x-fin-de-vie/Si je change la résolution (de 231dpi à 260 dpi)
C’est typiquement le genre de processus qui dégrade inutilement les images sans forcément servir à grand-chose sinon à contenter un contrôleur automatique et aveugle.
Voir : https://www.abracadabrapdf.net/ressources-et-tutos/creation/en-finir-avec-la-resolution-des-images/Ceci étant dit ça ne règle pas le problème… Dont je vois pas du tout ce qui pourrait en être à l’origine… :Euuuh:
Peux-tu partager tout ou partie d’un des fichiers concernés ?
(Acrobat > menu Fichier > Envoyer le fichier > Envoyer et effectuer le suivi > Créer un lien anonyme)
MerlinMaître des clésJe n’ai pas trouvé le texte explicatif, mais c’est une bonne idée de rédiger ou de schématiser le comportement attendu. C’est toujours plus clair.
Ce que j’en comprend c’est que ces listes apparaissent-disparaissent en fonction de deux variables (l’état des autres listes) alors qu’il en faudrait trois, puisqu’il faut tenir compte de la sélection effectuée (cases-à-cocher) sur la page précédente.
Donc a priori je verrais plutôt une structure de ce type :
– Si (Décalque bonbon est coché) ==> {Conditions de gestion des listes)
– Sinon si( Feuille oblique est coché) ==> {Conditions de gestion des listes)
– Sinon si( Feuille miroir est coché) ==> {Conditions de gestion des listes)
– Etc.
MerlinMaître des clésBonjour.
Oui et non.
C’est possible avec Acrobat Pro ou Standard mais pas avec Acrobat Reader (hélas).
MerlinMaître des clésBonjour.
Quand tu saisis le label dans la champ de saisie de la liste déroulante, essaye ALT + Retour pour passer à la ligne… :priere:
Sinon il existe un truc tordu avec JavaScript qui fonctionne dans les boutons, on pourrait peut être essayer.
MerlinMaître des clésC’est un problème de ET et de OU.
Dans la première ligne du script de calcul du champ « Police2 » il faut remplacer :
if (this.getField(« Couleur1 »).value != « Choisissez » && this.getField(« Couleur2 »).value != « Choisissez »)Par :
if (this.getField(« Couleur1 »).value != « Choisissez » || this.getField(« Couleur2 »).value != « Choisissez »)
:Smiley15:Par ailleurs, le bouton « Réinitialiser » ne supprime pas la pièce jointe éventuellement importée.
MerlinMaître des clésBonjour.
Quand on réinitialise il y a 4 listes déroulantes, dont 2 disparaissent en fonction des choix et de l’ordre dans lequel on les fait, mais je n’en vois aucune apparaitre.
Et comme je ne sais pas ce qui est censé se passer… :Euuuh:Par-contre, pour le choix des polices de caractère, j’utiliserais plutôt des cases-à-cocher placées en regard de chaque ligne. Ce serait plus sexy.
:Smiley15: -
AuteurRéponses
