Toutes mes réponses sur les forums
-
AuteurRéponses
-
brumbiesMembre
Bonjour,
Pour que cela soit plus parlant, peux-tu joindre ton fichier ? :Smiley08:brumbiesMembreBonjour,
le problème est que tu vas devoir soit :
1) passer par un bouton pour tester si une des cases sous les mois est cochée… pas terrible autant de suite la dernière case…
2) soit dupliquer le code (qui n’est qu’un exemple adapté à ton fichier) ci-dessous dans chacune des cases mois…Code:var compteur = 0;
for(var i = 0 ; i <5; i++)
if(this.getField(“Check Box1.”+i).value != “Off”)
compteur ++;if(compteur == 0)
this.getField(“Check Box1.2a”).value = “Off”;
else
this.getField(“Check Box1.2a”).value = “Oui”;
[code]Car un champs “case à cocher” ne permet pas de lui afgecter des calculs comme sur un champs texte (ce qui aurait permis de regrouper le code son le dernier champs)
brumbiesMembrePas de soucis… :Smiley03:
donc tu as 2 problèmes :
1) tu n’initialises pas la fonction INITIALISATION(), à l’ouverture de la page comme sur le doc d’Alex…
accessible dans les propriétés des vignettes => actions => à l’ouverture + javascript => mettre “Initialisation();”2) l’ajout de l’Item “” n’est pas reconnu au niveau de la listeN1 de la fonction initialisation() => remplace le par ” “
Code:ListeN1=[” “,”Europe”,”Amérique du Nord”,”Amérique du Sud”,”Asie”,”Moyen Orient”];:Smiley01:
brumbiesMembreBonsoir,
tu devrais commencer par poster ton fichier…
:Smiley01:3 juillet 2015 à 13:34 en réponse à : Saisie dans un champs obligatoire où les obligations ne sont plus efficaces #59292brumbiesMembreBonjour,
C’est bien ce que Merlin de dit… :geek:
Obligatoire :
Exige que l’utilisateur remplisse le champ de formulaire sélectionné. Si l’utilisateur tente d’envoyer le formulaire avant de remplir un champ obligatoire, un message d’erreur s’affiche et le champ de formulaire obligatoire vide est mis en surbrillance.Ensuite, tu peux passer par un script si tu ne veux pas qu’un champ obligatoire soit vide… Mais c’est plutôt contraignant au niveau de la conception du PDF et aussi d’un point de vue utilisateur…
Ce que tu peux faire c’est ajouter un bouton libellé “Testez le remplissage de cette fiche” et y placer un code qui testera si tout tes champs “obligatoires” sont renseignés et sinon qui les fera ressortir
:Smiley01:brumbiesMembreJe ne peux pas visualiser tes champs puisque tu as utilisé LiveCycle pour créer ton fichier…
Sinon, ton idée de concatener l’ensemble des valeurs d’exportation de tes boutons radios est bonne!
Maintenant, tu peux utiliser un tableau de 2 colonnes avec autant de lignes que de combinaisons possibles ou dans la premiere colonne tu indiques le numéro concatener et dans la 2eme le texte y afférent.
Puis par le biais d’une recherche de la valeur trouvé tu viens afficher dans ton champs la valeur en colonne 2 associée à ton numéro…
=> A condition que tu n’ais que du texte… sinon tu peux aussi utiliser des calques
:Smiley01:brumbiesMembreBonjour,
la question est de savoir si le nom d’une ville peut être repris pour plusieurs noms différents…
Ensuite tu as plusieurs possibilités, soit tu passes par un script avec par exemple une instruction switch et tu listes dans ton instruction chaque cas possible de nom…
Soit tu peux associer à chaque nom une ville dans ta 2eme liste (quitte à ce que tu ait plusieurs fois une même ville… et ensuite tu as une simple affectation à faire du type :
this.getField(“ville”).value = this.getField(“nom”).value; => attention, la contrainte étant de bien associer les valeurs d’exportation entre elle (ville-nom)La 2eme solution est sans doute la plus simple du point de vue code,
car sinon tu peux aussi :
soit définir en code un tableau associant nom et ville que tu utiliseras pour faire afficher dans un champs texte la ville
soit en passant par l’ajout d’Item à ta liste déroulante suivant le nom sélectionné
=> c’est 2 solutions comportent davantage de code
etc…
:Smiley01:brumbiesMembreBonjour,
Tu utilises quel outils pour la réalisation de ton formulaire?
:Smiley01:brumbiesMembreBonjour,
Le fichier que tu as trouvé a été réalisé avec LiveCycle Designer que je ne maitrise pas.
Par contre pour faire apparaitre/disparaitre des champs c’est tout a fait possible via adobe acrobat standard ou pro.Ensuite pour ce qui est de la réalisation, soit tu fais une recherche sur le forum car ce sujet a déjà été évoqué (recherche avec le mot display)
soit tu peux nous joindre une maquette de ton fichier…
:Smiley01:brumbiesMembreOk je n’avais pas vu la ligne this.event.value=””;
qui réinitialise à “vide” la valeur de ton champs Date2 => donc dans ton script si la condition était vrai alors la valeur disparaissait.De plus la fonction filColor modifie la couleur de fond et non la couleur du texte, donc inutile dans ton cas…
donc si la condition est vrai => alors la couleur de fond se met en rouge
sinon => elle se met de la même couleur que celle de ton champ “c_dateinter” ………. qui n’existe pas !donc je modifierai le code suivant
Code:if(ecartJ<0)
{
this.event.value=””;
this.event.target.fillColor=color.transparent;
}
else
{
this.event.target.fillColor=this.getField(“Date1”).fillColor;
}par
Code:if(ecartJ<-365) // pour prendre en compte la différence d'un an en moins du champs Date2 par rapport à Date1
{
this.event.target.textColor = color.red;
}
else
{
this.event.target.textColor = color.black;
}:Smiley01:
30 juin 2015 à 12:51 en réponse à : Rendre non modifiable les commentaires dans un formulaire PDF #59247brumbiesMembreBonjour,
Essaie avec le code ci-dessous …
Code:var myDoc = event.target.doc;
var commentList;if(!myDoc)
app.alert(“Impossible d’accéder au document”);
else
{
commentList = myDoc.getAnnots();if(commentList != null)
{
for each(comment in commentList)
comment.lock = true;
app.alert(“blocage effectué”);
}
else
app.alert(“Ce document ne présente aucun commentaire ni aucune signature”);
}:Smiley01:
brumbiesMembreC’est effectivement le cas… mais tu aurais eu la même problématique avec une liste déroulante… et tu ne nous l’avais pas précisé…
A chaud, je passerai par une case à cocher située à côté de ton champs texte avec un texte en dur à côté du style : “saisie manuelle”
et je testerai ensuite la valeur d’exportation de cette case à cocher avant d’exécuter le script affichant la popup menu.:Smiley01:
brumbiesMembreJe ne visualise pas ta formule javascript…
j’ai adapté ton fichier.
Le problème venait du fait que ton champs observateur est une liste déroulante…
Hors pour une liste déroulante le “.value” correspond à la valeur d’exportation et comme tu n’en as pas de liste de définit ca ne pouvait pas fonctionner…
je l’ai donc remplacé par un champs texte.
:Smiley01:brumbiesMembreC’est tout de suite plus facile … :geek:
donc ton problème est que tu as définit en script de document une fonction Controle() que tu n’appelles pas … donc rien ne peut s’exécuter !
L’astuce est de mettre au niveau de ton champs “c_dateverifdff” => Propriétés => Validation => Exécuter un script de validation personnalisé
et tu y places l’instrcution :
Controle();Ensuite attention, car si la date est supérieure à 1 an alors le texte “s’effacera” car tu as mis :
this.event.target.fillColor=color.transparent;:Smiley01:
brumbiesMembreLe plus simple serait de poster ton fichier, car chez moi cela fonctionne bien…
:Smiley01:brumbiesMembreBonjour,
Le plus simple serait que tu post un exemple actualisé de ton fichier…
:Smiley01:brumbiesMembreBonjour,
Il faut que tu ajustes ta comparaison en remplacant > (supérieur strictement à 41 ou 30 => donc ils sont exclus) par >= (supérieur ou égale)
:Smiley01:brumbiesMembreBonjour,
Merlin t’a tout dit…
En plaçant le script ci-dessous (à adapter selon tes noms) dans un champs de formulaire via les propriétés de ce champs => actions => Action : Souris Enfoncée. => exécuter un script javascriptCode:var monMenu = app.popUpMenu(“Riri”,”Fifi”,”Loulou”,”Donald”,”Daisy”,”Picsou”);
if (monMenu!=null) {event.target.value = monMenu;}:Smiley01:
26 juin 2015 à 15:10 en réponse à : Comment ajouter DES NOUVELLES PAGES à un endroit précis du document ? #59225brumbiesMembreBonjour,
page_froid est une variable, tu peux donc l’appeler comme tu veux du moment que tu l’appelles du même nom lorsque tu veux faire appel à elle…
Ensuite, pour que ton fichier fonctionne, il faut que tu ajoutes à cette variable le numéro de page -1.
donc : var page_froid = x + this.getField(“FR”).value; //ou x correspond au numéro de page de ta page “initiale” -1si je comprend bien ton cas tu t’attendais à ce que ta page FROID dupliquée soit insérer en page 12. donc ta page “initiale” est en 11 positions…
donc x = 10… et ainsi de suite pour les 2 pages que tu souhaites dupliquer…Attention : lors de la 1ere utilisation ou quand tu as reproduit le bouton il faut bien que le champ FR (et les autres identiques) soit bien à 0… sinon tu aura 1 décalage supplémentaire
:Smiley01:26 juin 2015 à 14:30 en réponse à : Programmation afficher/masquer plusieurs calques de façon rapide #57987brumbiesMembreDe plus,
il faut savoir que tu as bien mis tes calques en page 2 mais d’un point de vue script ton document commence au numéro de page 0… donc la page 2 à laquelle tu veux faire appel porte le numéro 1 et ainsi de suite… => raison pour laquelle tu as une erreur, puisqu’il n’y a pas de calque sur la page 3 de ton doc…
Il en va de même avec les calques…
:Smiley01:brumbiesMembreBonjour,
As tu regardé le topic suivant?
http://abracadabrapdf.net/forum/index.php/topic,2662.msg14500.html#msg14500
Avec l’exemple d’Alex et en l’adaptant légèrement tu devrais pouvoir réussir à faire ce que tu veux…ensuite pour modifier la couleur du texte d’un champs on peut utiliser:
Code:var f = this.getField(“myField”);
f.textColor = color.red;ensuite pour le remettre en noir: color.black
:Smiley01:brumbiesMembreBonjour,
La solution de Merlin est la plus rapide…
Avec de la programmation, on peut récupérer la liste de tes noms placés dans un fichier en PJ de ton PDF et les intégrer dans une liste déroulante via la fonction “insertItemAt”
C’est un peu plus complexe. ça dépendra de ce que tu veux en faire ensuite…
:Smiley01:25 juin 2015 à 14:14 en réponse à : Comment ajouter DES NOUVELLES PAGES à un endroit précis du document ? #59223brumbiesMembreBonjour,
Ci-joint ta maquette dont j’ai modifié les codes sur tes pages visibles et sur tes modèles…
:Smiley01:brumbiesMembreBonsoir,
ATTENTION : java et javascript sont 2 langages différent… http://abracadabrapdf.net/forum/index.php/topic,2160.msg10980.html#msg10980
Maintenant, perso par principe de codage je mets les fonctions au niveau des scripts de document et ensuite je les appelle au niveau des champs de formulaire (soit via un bouton au niveau des actions par exemple.
Ensuite pour le code que tu as trouvé… tu parles de java et on lit javascript dans les commentaires du programme… Est ce que tu peux nous donner une maquette de ton doc et l’url ou tu as trouvé ce code…
:Smiley01:24 juin 2015 à 20:47 en réponse à : Comment ajouter DES NOUVELLES PAGES à un endroit précis du document ? #59221brumbiesMembreBonjour,
Tu aurais une maquette?
C’est faisable, perso j’ajouterai un champs texte invisible à l’écran et à l’impression dont je me servirai pour définir la page à laquelle insérer ton modèle de document… ce chiffre serait incrémenté de 1 à chaque fois que tu insères un modèle.
tout en sachant que tu peux choisir la page à laquelle tu souhaites insérer ton modèle…
:Smiley01:brumbiesMembreBonjour,
1) Dans ton cas, il n’y a pas de différence entre les 2 méthodes au niveau du résultat recherché.
Celui d’Alex s’exécute à l’ouverture du document. Tandis que le mien ne s’exécute qu’à l’ouverture de la page.
Donc si la page que tu ouvres à l’ouverture contient le script il s’ouvrira à l’ouverture, alors que si ce n’est pas le cas il ne s’exécutera qu’après coup.
De plus, la méthode d’Alex est prioritaire sur les scripts de page dans l’ordre d’exécution des scripts….Donc pour résumer, ça va dépendre de ce que tu souhaites faire…
2) Il faut tester…
:Smiley01:24 juin 2015 à 09:17 en réponse à : Comment faire apparaitre des calques par sélection dans une liste déroulante ? #58845brumbiesMembreBonjour,
Oui ce que tu veux faire est tout à fait possible…
Il faudra juste faire attention à bien associer le numéro du calque avec celui de la combinaison valexport1 et valexport2… (il faut aussi avoir le bon nombre de calque…)Par contre pour te faire un script, sans modèle (avec + de calques) que celui que tu as transmis, ça va être compliqué…
:Smiley01:brumbiesMembreBonjour,
Donc tu peux procéder ainsi :
- Cliquez sur le bouton Vignettes de page, à gauche.
- Sélectionnez la vignette associée à la page qui vous intéresse, puis choisissez Propriétés de la page dans le menu Options .
- Cliquez sur l’onglet Actions.
- Dans le menu Sélectionner le déclencheur, choisissez Ouverture de la page pour définir une action à l’ouverture de la page ou choisissez Fermeture de la page pour définir une action à la fermeture de la page.
- Choisissez “Exécuter un script javascript” dans le menu Sélectionner l’action, puis cliquez sur Ajouter.
[/list] :Smiley01:
brumbiesMembreBonsoir,
Tu l’as peut être déjà indiqué mais tu utilises quelle logiciel pour créer ton PDF? et quelle version?
:Smiley01:brumbiesMembre:Ooops: dsl mais il est vrai que je ne me suis pas encore penché sur LiveCycle designer…
brumbiesMembreBonjour,
la fonction getDay() permet de savoir quel est le jour de la semaine…
Dimanche : 0
Lundi : 1
…
Donc avec une instruction if en testant que xxx.getDay == 1
tu dois pouvoir soustraire 3 jours au lieu de 1 dans les autres cas:Smiley01:
22 juin 2015 à 09:44 en réponse à : Comment faire apparaitre des calques par sélection dans une liste déroulante ? #58843brumbiesMembre:Smiley08: Merci Merlin…
22 juin 2015 à 09:37 en réponse à : Comment faire apparaitre des calques par sélection dans une liste déroulante ? #58841brumbiesMembreBonjour,
1) Tu fais appel à un champs nommé “dimdalle1” qui n’existe pas…
2) pour gérer les calques, tu peux utiliser le script d’Alex, sinon perso j’utilise un de ce style :Code:for (var i = 2 ; i <= this.getField("dr2").numItems; i++) // on commence à 2 pour prendre en compte la valeur d'exportation 0 de ton champs dr2
{
if((i-1) == this.getField(“dr2”).value)
this.getOCGs(this.pageNum)[i-2].state = true;
else
this.getOCGs(this.pageNum)[i-2].state = false;
}je l’ai adapté à ton document, je le place en action champs désactivé sur “dr2”.
Attention, pour le tester il faut que tu es le même nombre de calque que d’Item de ton champs “dr2″ (sans compte ” ” – valeur d’exportation 0, puisque je l’ai déjà pris en compte dans le script):Smiley01:
brumbiesMembreBonjour,
Tu peux utiliser un script de calcul personnalisé du type :
Code:if(this.getField(“Kilométrage parcouru”).value>41)
this.getField(“Frais kilométrique”).value = this.getField(“Kilométrage parcouru”).value * 0.399;
else
if(this.getField(“Kilométrage parcouru”).value>30)
this.getField(“Frais kilométrique”).value = 15;
else
this.getField(“Frais kilométrique”).value = 11.5;:Smiley01:
brumbiesMembreBonjour,
Quelques Pistes…
1) tu dois Initialiser tes listes à l’ouverture du document… Met en script d’ouverture ta fonction “Initialisation();”
2) ta fonction initialisation comporte une ligne qui a 1 élément de trop et qui ne permet donc pas l’insertion d’Item sur tes listes…
Ton code : this.getField(“ld_ff1”).insertItemAt(ListeN1[indexTypeFF],ListeN1[indexTypeFF],ListeN1[indexTypeFF],indexTypeFF)
Celui qui est correct : this.getField(“ld_ff1”).insertItemAt(ListeN1[indexTypeFF],ListeN1[indexTypeFF],indexTypeFF)Essai ce devrait mieux fonctionner…
:Smiley01:
22 juin 2015 à 08:10 en réponse à : Programmation afficher/masquer plusieurs calques de façon rapide #57984brumbiesMembreBonjour,
Désolé du délais de réponse, j’ai été pas mal pris ces derniers temps…
Donc le message d’erreur qui est généré laisse supposer, comme tu l’indiquais, un problème au niveau de la reconnaissance soit de la page soit du calque.
J’ai besoin de savoir :
– quel est le numéro de page ou se situe les calques que tu veux faire apparaitre/masquer?
– quel est ton nombre de calque à gérer?:Smiley01:
brumbiesMembreBonjour,
Une autre solution passe aussi par un script, du style :
Code:var pp = this.getPrintParams();
pp.printRange=[[0, 2], [4, 6]]; // permet de choisir les pages à imprimer
pp.NumCopies = 3; // permet de choisir le nombre de copies
this.print(pp);:Smiley01:
brumbiesMembre:Smiley03:
brumbiesMembreBonjour,
est-il possible dans ce code d’insérer la quantité à imprimer, genre nQty:x ?
C’est possible, mais il faut passer par getPrintParams()…
voici le code pour ton exemple :
Code:var pp = this.getPrintParams();
pp.firstPage = this.numPages – 1;
pp.lastPage = this.numPages – 1;
pp.pageHandling = pp.constants.handling.fit; // permet d’ajuster la taille de ton doc au format du papier de l’imprimante
pp.NumCopies = 4; // tu indiques le nombre de copies que tu souhaites
this.print(pp);:Smiley01:
brumbiesMembreBonjour,
regarde les exemples que l’on met à jour…Code:this.getField(“P”+this.pageNum+”.liste.Stotal.0″).value = this.getField(“P”+this.pageNum+”.liste.quant.0″).value * this.getField(“P”+this.pageNum+”.liste.prix.0″).value;ce code est à intégrer au niveau de ton champs Stotal.0 présent dans ton modèle de page (template).
=> propriétés du champs / onglet Calcul / Script de calcul personnalisé
Ensuite il faut le dupliquer sur les autres champs Stotal (en modifiant le .0 par .1, .2, .3 …)Pour faire la somme de tous tes champs totaux Stotal.x tu peux utiliser le code ci-dessous appliqué au champs SStotal:
Code:var total = 0;
for (var i = 0; i<= 2; i++) // 2 étant à adapter en fonction du nombre de champs Stotal.x
total = total + this.getField(“P”+this.pageNum+”.liste.Stotal.”+i).value;this.getField(“P”+this.pageNum+”.liste.SStotal”).value = total;
Pour faire la somme de tous les SStotal tu peux utiliser le code ci-dessous, appliqué sur le champs Total :
Code:var global = 0;if((this.numPages – 1) != 0)
for(var i = 1; i <= (this.numPages - 1); i++)
global = global + this.getField(“P”+i+”.liste.SStotal”).value;
this.getField(“Total”).value = global;Attention à l’ordre de calcul de tes champs sinon les différents totaux peuvent avoir un temps de décalage…
J’ai mis à jour ta maquette.
A toi de jouer…
:Smiley01:23 mars 2015 à 15:13 en réponse à : Lancement impression après validation d’une boite de dialogue #58672brumbiesMembreExact, je suis parti d’un fichier existant chez moi…
En fait, de manière général quand tu veux gérer des pages avec Javascript, la première page commence par 0 et non pas par 1…
donc si tu remplaces 1 en nStart et nEnd par 0 (faisant donc bien référence à la 1ere page…) ca devrait fonctionner beaucoup mieux
:Smiley01:23 mars 2015 à 13:11 en réponse à : Lancement impression après validation d’une boite de dialogue #58670brumbiesMembreC’est toujours plus facile de trouver ce qui cloche avec un exemple… merci
donc, le problème vient du fait que tu associes un script (pour la dialogue box) à une action qui va chercher une commande de menu.
LES 2 S EXECUTENT DE MANIERE DISTINCTES….pour résoudre ton problème :
1) tu supprimes toutes les actions que tu as placé sur ton bouton Imprimer (script + commande de menu).
2) tu crées une nouvelle action (souris relachée + exécuter un script javascript)
3) tu colles le code ci-dessous (le nombre de page de la ligne print est à adapter en fonction de ton doc)Code:var nButton = 4; // permet de gérer le cas ou l’utilisateur coche la croix pour fermer sans avoir répondu.
nButton = app.alert({
cMsg: “xxxxxxxxxxxxxxxxxxxxxxx”,
cTitle: “Impression”,
nIcon: 2, nType: 2});
if(nButton == 4)
this.print({nStart: 1, nEnd: 1});:Smiley01:
23 mars 2015 à 11:04 en réponse à : Lancement impression après validation d’une boite de dialogue #58668brumbiesMembreBonjour,
J’utilise souvent un script approchant du tiens et qui fonctionne très bien…
Code:var nButton = 4; // permet de gérer le cas ou l’utilisateur coche la croix pour fermer sans avoir répondu.
nButton = app.alert({
cMsg: “xxxxxxxxxxxxxxxxxxxxxxx”,
cTitle: “Impression”,
nIcon: 2, nType: 2});
if(nButton == 4)
this.print({nStart: 1, nEnd: 4});n’hésite pas à poster une maquette de ton doc si besoin
:Smiley01:brumbiesMembreBonjour,
Et enfin quand je duplique la page, j’ai encore le souci au niveau des calculs, qui restent bloqués sur le modèle prix*quantité sans tenir compte des préfixes…
En fait, comme tu as pu le constater seul les champs peuvent changer de nom en fonction des différentes pages dupliquées…
du coup, il faut le prévoir au niveau d’un script de calcul personnalisé du type :Code:this.getField(“P”+this.pageNum+”.liste.Stotal.0″).value = this.getField(“P”+this.pageNum+”.liste.quant.0″).value * this.getField(“P”+this.pageNum+”.liste.prix.0″).value;le script va chercher le numéro de page de la page dupliquée, ce qui permet de gérer le préfixe
cela nécessite que lorsque tu dupliques ton template cela soit toujours en fin de document, que tu ne supprimes pas entre temps une page.je te joins ton fichier auquel j’ai ajouté cette ligne uniquement au niveau du champs Stotal.0 (on peut l’adapter aux autres sommes)
De plus, j’ai modifié ton bouton “Nouvelle” ou j’ai changé ton script en préférant :Code:this.spawnPageFromTemplate(“liste”,this.numPages, true, false);:Smiley01:
26 février 2015 à 10:38 en réponse à : Exportation d’un formulaire en PDF non modifiable. – RÉSOLU #55756brumbiesMembreBonjour,
De mon côté j’ai tester avec Arcobat pro XI => ça fonctionne
avec adobe Reader XI => ça ne fonctionne pas, quand tu rouvres le fichier (puisqu’il est censé ce fermer automatiquement) les popup menu accessibles via les champs “Désignation” sont disponibles.Une alternative est d’utiliser un champs text non visible (Text6 dans l’exemple joint) à l’écran et de lui affecter la valeur 0 initialement.
Une fois les champs mis en lecture seul, on affecte la valeur 1 au champs “Text6” (je l’ai mis au niveau du bouton Save As).
J’ai modifié légèrement les scripts présents dans les champs “Désignation” pour que le popup menu ne s’affiche que si la valeur de “text6” est 0.L’erreur en ligne 20 du bouton Sauvegarder vient du fait que l’on appelle une pièce jointe mais qu’aucune pièce jointe n’est présente, ce qui vient surement du fait que le fichier a été retravaillé pour être posté ….
:Smiley01:
23 février 2015 à 14:53 en réponse à : Limite de l’éditeur de code interne, besoin de conseil :) #58501brumbiesMembreOk, est ce que tu aurais une maquette à me transmettre pour que je regarde…
:Smiley01:brumbiesMembreBonjour,
Je viens de me pencher sur ta demande, et j’ai oublier de te demander si tu seras le seul utilisateur ou non?
J’ai modifié ta maquette, elle ouvre fichier2 à partir de fichier1 qui s’ouvre également (tu peux intégrer un calque à fichier1 pour faire revenir l’utilisateur sur fichier0).
Par contre, j’utilise une variable globale persistante dans mon script qui n’est utilisable que si tu modifies les paramètres de sécurités (depuis la version 9):
le plus simple étant manuellement Edition => Préférences => JavaScript => décocher “activer la stratégie de protection globale des objets” (à reproduire sur chaque poste utilisateur):Smiley01:
23 février 2015 à 13:48 en réponse à : Limite de l’éditeur de code interne, besoin de conseil :) #58499brumbiesMembreBonjour,
Je n’ai jamais été confronté à ce type de police, par contre j’utilise PSPad (open source et possibilité de l’avoir en version portable) et en y regardant de plus près il semble possible de modifier la police et d’y intégrer des caractères arabes…
Sinon tu as la possibilité de diviser ton script en plusieurs fonctions que tu appelles les une à la suite des autres, mais tu peux t’y perdre si tu en as beaucoup…
:Smiley01:brumbiesMembreBonjour,
Dsl pour le délais de réponse mais cette semaine je ne capte pas la 3g et n’est pas de wifi…OK j’étais parti sur 2 fichiers pdf. ..
une piste serait de mettre ta vidéo en pj de fichier1 et d’initialiser une variable globale en fichier0 associer à un script d’ouverture en fichier1
Tu ouvrirais fichier1 à partir de fichier0 pour que ça ouvre automatiquement ta vidéo. .. et voir ensuite comment revenir à fichier0 pour que ce soit le plus transparent pour l’utilisateur
Je ne pourrais le tester pas avant ce week end…
as tu une maquette à nous donner?
:Smiley01:brumbiesMembreBonjour,
Tu as 2 possibilités.
j’appelerai :
fichier0 => ton fichier “parent”
fichier1 => ton fichier en PJ que tu ouvres en 1er
fichier2 => celui que tu cherches à ouvrir à partir de fichier11) Si tu ne fais pas appel à fichier2 via fichier0, alors le plus simple c’est de mettre ton fichier2 en PJ de ton fichier1
ainsi tu auras une imbrication de fichier en pièce jointe2) Si tu fais appel à fichier 2 via fichier0, alors tu peux passer par un bouton en y associant l’action “atteindre une page de vue”.
techniquement tu ouvres ton fichier0, tu le laisses ouvert et tu ouvres fichier1, tu crées ton bouton et tu crées l’action “atteindre une page de vue” => tu vas ensuite ouvrir ton fichier2 (à partir de fichier0) et une fois fichier2 ouvert tu peux cliquer sur “définir le lien”.
Tu enregistres via la disquette fichier1 et tu enregistres via la disquette fichier0.
Et ca devrait fonctionner.
=> l’inconvénient ou l’avantage à toi de voir :
– fichier2 s’ouvre à la place de fichier1
– s’agissant de pièces jointes, tu ne peux pas enregistrer de formulaire si tu en as un.:Smiley01:
brumbiesMembreBonjour,
Je ne connais pas particulièrement Filemaker Pro, mais dans ce que j’ai pu voir sur le net, j’ai 2-3 questions :
1) Veux tu créer un nouveau fichier Filemaker ou veux tu en implémenter un existant?
ton message d’erreur me laisse penser que ton problème vient du fait que tu souhaites implémenter un fichier existant et qu’il y a une différence entre le nombre de donnée (ex: pas le même nombre de colonne) du fichier Filemaker et de celui que tu cherches à intégrer.2) As tu essayé d’autre format d’exportation de données? Perso avec Acrobat Pro XI je peux aussi faire une extraction en csv.
Et comme j’ai vu que le format excel est supporté par Filemaker (une conversion csv en xlsx, est très rapide).brumbiesMembreBonsoir,
Sujet qui m’est inconnu, mais très intéressant.
Malheureusement, je n’ai pas trop le temps en ce moment de me pencher sur la question… dsl
:Smiley01:4 février 2015 à 19:07 en réponse à : Script pour calcul d’intervalles dans un formulaire PDF #58329brumbiesMembreBonsoir,
Le document de Merlin permet de te donner le script pour additionner les 4 notes à renseigner. En le combinant au miens on obtient le doc ci-joint.
C’est sans doute ce que tu as fait mais attention à bien vérifier l’ordre de calcul de tes champs de formulaires, sinon effectivement ça ne fonctionne pas… ou plutot avec un décalage de 1 saisie (donc inutile)
accessible dans la acrobat pro XI : formulaire / modifier / autres taches / définir l’ordre de calcul:Smiley01:
PS: j’ai mis les champs de calcul en lecture seul3 février 2015 à 22:34 en réponse à : Script pour calcul d’intervalles dans un formulaire PDF #58324brumbiesMembreBonsoir,
Il y plusieurs solutions possibles. Par exemple, par le biais d’une imbrication d’instructions de contrôle comme if(){}else{if(){}else{if(){}else{}…}}.
Le problème dans ton cas c’est le fait qu’il n’y ait pas de suite logique entre ton nombre de point, ton numéro de transfert et ton pourcentage.
Du coup, j’ai opté pour l’utilisation d’un tableau que je définis en script de document. Il suffit de modifier le résultat (32).
:Smiley01:brumbiesMembreBonsoir,
Qu’elle est ta formule de calcul du pourcentage d’usure?
A partir de ça, nous pourrons te proposer un script
:Smiley01:1 février 2015 à 22:44 en réponse à : Script pour calcul d’intervalles dans un formulaire PDF #58322brumbiesMembreBonjour,
Il est possible de faire exécuter un script de calcul pour faire ce que tu veux, par contre, aurais tu une maquette à poster, ce qui serait plus simple…
:Smiley01:brumbiesMembreBonsoir,
En fait, tu avais déjà la réponse sous les yeux… avec la réponse de Merlin juste après mon post.
J’ai simplement modifier la police de tes champs de formulaire en mettant Helvetica.Cela montre que en utilisant une police des 3 police de bases, c’est toujours plus simple…
Et que tu as effectivement un problème de police sur ton mac
:Smiley03:brumbiesMembre:bravo:
brumbiesMembreBonjour,
J’ai besoin d’avoir un peu plus de précisions…
Le fichier est commun à tous les utilisateurs (ex: déposé sur un serveur commun), comment y as tu accès (retour de mail, …)
Tu recherches quoi? pouvoir identifier les utilisateurs ou juste pouvoir les compter?
Identifier les utilisateurs, à chaud je dirai pas possible, mais je vais m’y pencher.
pouvoir compter le nombre de visite et à quelle date, ok mais via une action de chaque utilisateur à minima pour enregistrer le fichier à la fermeture:Smiley01:
brumbiesMembreBonjour,
De mon côté je suis sous PC, et je ne reproduis pas ce problème avec adobe reader XI…
Peux tu tester le fichier joint et me dire si tu rencontres les même problèmes?
:Smiley01:brumbiesMembreBonjour,
J’ai modifié ton fichier et ca devrait répondre à ton besoin.
j’ai supprimé le code présent sur ton champ “numeropage1” car this.pageNum revoit systématiquement le numéro de la page ou le focus est présent, raison pour laquelle tous tes champs indiquaient le même chiffre.
pour palier ça j’ai modifier le code présent dans ton bouton comme suit :
Code:this.getField(“numeropage1”).value = this.numPages + 1; // affecte au champ “numeropage1” le numéro de la page
this.spawnPageFromTemplate(“annexe”, this.numPages, true); // duplique le modèle de page “annexe” en renommant tous les champs de formulaire
// + insère la page systématiquement en fin de document
this.pageNum = 0; // remet le focus sur la 1ère pagel’ensemble des champs sur tes différentes pages ont un nom différent grace au paramètre “true” de spawnPageFromTemplate
associer au fait de venir affecter à ton champs initial “numeropage1” le nombre total de page +1 permet de conserver le numéro de page distinctement sur l’ensemble des pages ajoutées.:Smiley01:
brumbiesMembreBonjour,
Le problème semble lié aux caractères accentués.
As tu essayé de changer la police de caractère de ton champs de formulaire?
:Smiley01:brumbiesMembreBonjour,
le script est
Code:event.target.value = this.numPages;:Smiley01:
17 décembre 2014 à 14:12 en réponse à : Cherche comment remplir un champ automatiquement après choix dans liste #58093brumbiesMembreBonjour et Bienvenu,
Une solution est effectivement de passer par des listes déroulantes…
Mais pour cela il faut que leur affecte pour chaque élément une valeur d’exportation (paramétrable au niveau des paramètres du champs => options / saisir l’éléments et la valeur d’exportation)
=> il faut faire de même sur tes 2 listes déroulantes …Ensuite tu peux placer un script de ce type au niveau du script de calcul personnalisé de ton champs “P1 – Liste déroulante 7” (onglet Calcul)
Code:switch(this.getField(“P1 – Liste déroulante 6”).value)
{
case 1: // correspond à la valeur d’exportattion du champs P1 – Liste déroulante 6
this.getField(“P1 – Liste déroulante 7”).value = 1; // correspond à la valeur d’exportation du champs P1 – Liste déroulante 7
break;
case 2:
this.getField(“P1 – Liste déroulante 7”).value = 1;
break;
case 3:
this.getField(“P1 – Liste déroulante 7”).value = 2;
break;
case 4:
this.getField(“P1 – Liste déroulante 7”).value = 3;
break;
case 5:
this.getField(“P1 – Liste déroulante 7”).value = 3;
break;
case 6:
this.getField(“P1 – Liste déroulante 7”).value = 3;
break;
case 7:
this.getField(“P1 – Liste déroulante 7”).value = 4;
break;
//…
}:Smiley01:
brumbiesMembreBonjour,
Es tu aller voir ici : http://abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/notation-simplifiee-astuces/
ou ici : http://abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/calculs-en-javascript-et-en-notation-simplifiee/je pense que tu trouveras des confirmations à tes questions…
:Smiley01:15 décembre 2014 à 13:44 en réponse à : Comment barrer sous condition le résultat d’un champ de texte #58089brumbiesMembreSinon, il faut savoir que l’attribut “barré” est disponible dans la barre des Propriétés (ctrl-E ou cmd-E) du texte quand l’option “Autoriser le format RTF”
:bravo: Bravo Merlin, je ne connaissais pas cette possibilité.
Du coup, comme il s’agit d’un paramètre de champs de formulaire, c’est paramétrable via un script :
Code:var spans = new Array();
spans[0] = new Object();
spans[0].text = “texte à affecter à ton champs”;
spans[0].strikethrough = true; //true : barré / false : non barré
this.getField(“Ton champs”).richValue = spans;Attention : “ton champs” doit avoir la fonction “Autoriser le format RTF” d’activé
j’ai modifié le fichier avec cette nouveauté,
Donc, zebulon59 a toi de choisir…
:Smiley01:15 décembre 2014 à 09:57 en réponse à : Comment barrer sous condition le résultat d’un champ de texte #58087brumbiesMembreBonjour et bienvenu,
Une méthode pour “barré” un texte (ou un champs de formulaire) peut être d’utiliser un champs texte en lecture seule avec un caractère windings ou autre (police de caractère) que tu viens faire apparaitre/disparaitre de la même manière que ce que tu as fait sur la 1ère partie.
Je t’ai fait un exemple
:Smiley01:
PS: un conseil, écrit ton script en colonne plutot quand ligne tu gagneras en lisibilité12 décembre 2014 à 09:15 en réponse à : Programmation afficher/masquer plusieurs calques de façon rapide #57982brumbiesMembreBonjour et bienvenu,
1) je ne vois pas de script d’ouverture pour venir affecter aux calques P1 et P2 les valeurs des champs OFFRE_0a et OFFRE_1a.
Je mettrais le script suivant en script d’ouverture de la page d’ouverture de ton document (ici la page 1):Code:this.getOCGs(2)[1].state = this.getField(“OFFRE_0a”).value;
this.getOCGs(2)[2].state = this.getField(“OFFRE_1a”).value;2) ensuite tu as fait une inversion d’une inversion au niveau des scripts en OFFRE_0 et OFFRE_1 (déclencheur souris relachée) => pile je gagne, face tu perds
tu as écrit les même codes, même ce n’était pas ton souhait:Code:// code en OFFRE_0
this.getField(“OFFRE_0a”).value = true;
this.getField(“OFFRE_1a”).value = false;
// code en OFFRE_1
this.getField(“OFFRE_1a”).value = false;
this.getField(“OFFRE_0a”).value = true;j’ai modifié ton fichier avec les éléments que je viens de te décrire
dis moi si ca te va?
:Smiley01:9 décembre 2014 à 21:47 en réponse à : Enregistrement avec Adobe Reader pour rendre des éléments non éditables #58071brumbiesMembreBonsoir,
la convention de dénomination!!! :priere:
ainsi et avec l’aide d’une simple boucle for tu peux rendre en 2 lignes de codes tous tes champs non modifiable…sinon pour le bouton avec mdp, regarde le fichier de ce poste :
http://abracadabrapdf.net/forum/index.php/topic,2038.msg10399.html#msg10399:Smiley01:
9 décembre 2014 à 10:02 en réponse à : Enregistrement avec Adobe Reader pour rendre des éléments non éditables #58068brumbiesMembreBonjour,
le code que tu cherches d’après ma compréhension et celle de Merlin est :
this.getField(“xxx”).readonly = true; => champs non modifiable
this.getField(“xxx”).readonly = false; => champs modifiable
et comme le dit Merlin, il te faut un bouton pour y mettre ce code.un conseil, prévoit un bouton pour “remettre” tes champs modifiables, que tu peux “sécuriser” via un mdp connue uniquement de l’utilisateur “maitre”.
Sinon il faudra bien lui préciser d’enregistrer le pdf avec ces prix sous un autre nom…4 décembre 2014 à 21:20 en réponse à : Programmation afficher/masquer plusieurs calques de façon rapide #57979brumbiesMembreJe viens de regarder et ta fonction saveLayerConfig remplie bien ca fonction chez moi… testé sous acrobat pro XI et adobe reader 11…
Sinon, il y a plus simple pour enregistrer/récupérer le statut des calques.
tu peux ajouter la boucle for en script d’ouverture de document…Code:for (var i = 0 ; i <= 3; i++)
this.getOCGs(this.pageNum).state = this.getField(“OFFRE_”+(i)+”a”).value;d’ou l’utilisation des champs OFFRE_na pour “sauvegarder” le statut de chaque calque et dans ce cas la liste déroulante LayerConfig est inutile.
Et le code est plus simple…cf exemple joint…
:Smiley01:4 décembre 2014 à 18:12 en réponse à : Programmation afficher/masquer plusieurs calques de façon rapide #57976brumbiesMembreoups!!! je n’ai pas tester les autres boutons…
donc le problème vient de la numérotation de tes calques:
this.getOCGs(this.pageNum)[0].state => BASE
this.getOCGs(this.pageNum)[1].state => P4
this.getOCGs(this.pageNum)[2].state => P3
this.getOCGs(this.pageNum)[3].state => P2
this.getOCGs(this.pageNum)[4].state => P1du coup avec la boucle for tu affectes la valeur de “OFFRE_0a” à BASE
=> pour résoudre ton problème il suffit de mettre
this.getField(“OFFRE_0a”).value = true;
dans chacun des scripts des boutonsSinon, P1 ne sert à rien, et pour ne pas avoir à gérer un calque pour qu’il soit visible tout le temps, met le en fond de page. => cad utilses le pdf BASE comme pdf principal et vient y ajouter les calques dessus, comme cela tu n’as besoin d’en gérer que 3…
:Smiley01:
PS: il faut bien conserver la boucle for ainsi :Code:for (var i = 0 ; i <= 3; i++)
this.getOCGs(this.pageNum).state = this.getField(“OFFRE_”+(i)+”a”).value;car le tiens ne fais pas référence au numéro de calque
4 décembre 2014 à 16:26 en réponse à : Programmation afficher/masquer plusieurs calques de façon rapide #57974brumbiesMembreBonjour,
Je remplacerai ta boucle for par :
Code:for (var i = 0 ; i <= 3; i++)
this.getOCGs(this.pageNum).state = this.getField(“OFFRE_”+(i)+”a”).value;si tu utilises la console avec ton code, elle te signale que this.getField(“OFFRE”+(i+1)+”a”).value n’est pas définit…
=> attention à la casse il manque “_”
=> dans ce cas tu ne couvres pas les 4 calques mais seulement 1 (i = 0 + 1) et 2 (i = 1 + 1) et s’arrête à i < à 2 ... il manque donc le calque correspondant à OFFRE_0a et OFFRE_3a et perso, j’ajouterai un bouton qui réactiverai l’ensemble des boutons OFFRE_n visible et faisant disparaitre l’ensemble des calques car sinon l’utilisateur ne peut pas revenir en arrière une fois son choix fait… :Smiley01:brumbiesMembreBonjour,
Ça va m’être très utile
:Smiley03:
Edit : Je suppose qu’il n’existe pas de fonction magique permettant de savoir si tous les champs ont fini de s’afficher dans le doc ?
Je ne cerne pas bien l’utilité… car si tu utilises l’objet thermometre, le script compris à l’intérieur sera entièrement exécuté avant fermeture du thermomètre.
Cependant, tu peux ajouter en bas de script un message d’alert app.alert(“xxx”); (ou d’info…) une fois l’ensemble de ton code exécuté (et donc que tes champs sont chargés).
Sinon, tu peux également intégrer un compteur qui vient s’incrémenter de 1 à chaque fois q’un champs est chargé. Et en fin de script il suffira de contrôler que le nombre de champs chargés est = aux nombres de champs attendus…Je ne peux pas te donner plus de détails sans avoir un exemple succinct…
:Smiley01:
brumbiesMembreBonjour,
Quelle est la version d’adobe Reader que tu utilises sur Mac ? et sur PC ? Est ce bien la même ?
Pour que ton pdf intégre les champs de formulaires remplis, il faut penser, pour les versions d’Adobe Reader inférieures à la version XI, à étendre l’enregistrement et le remplissage des formulaires.:Smiley01:
brumbiesMembreBonjour,
Essaie ceci :
Code:var t = app.thermometer;// Acquire a thermometer object
t.duration = this.numPages;
t.text = “Chargement en cours”;
t.begin();//… place ton script permettant de remplir tes champs
t.end();
Dis moi si ca te va…
:Smiley01:
brumbiesMembreBonsoir,
c’est bien cela, tu ne peux importer qu’un pdf dans adobe reader
il y a aussi des posts abordants ce sujet…
ex: http://abracadabrapdf.net/forum/index.php/topic,2471.msg13237.html#msg13237:Smiley01:
brumbiesMembreBonsoir,
Oui le code est à placer au niveau des actions de la checkbox avec le déclencheur “souris relachée”.
Ensuite, pour la question de surbrillance, quel est ton but?
Il est possible de paramétrer à l’ouverture la surbrillance comme “inactive” via le code :
app.runtimeHighlight = false;
Mais cela n’empêchera pas à l’utilisateur de la “réativer” via le bandeau violet présent en haut du document “Selec. les champs existants”…
et autre point cela s’applique à l’ensemble des champs …Sinon tu as la possibilité de changer la couleur de fonds de la surbrillance et de la mettre en blanc par exemple… avec les même effets que ci-dessus
app.runtimeHighlightColor = color.white;Et regarde ici : http://abracadabrapdf.net/forum/index.php?topic=1685.0 cela peut être une alternative… selon ton besoin
:Smiley01:
brumbiesMembreBonsoir,
Merlin a raison, la checkBox doit être visible de l’utilisateur à minima à l’ouverture…
ensuite si l’utilisateur la coche alors tu peux placer ce script au niveau du script de calcul personnalisé du champs B:Code:if(this.getField(“checkbox”).isBoxChecked(0))
this.getField(“B”).value = 0;
else
this.getField(“B”).value = 20 * this.getField(“A”).value / 100;afin de ne pas faire apparaitre la checkBox à l’impression ou autre
place un script (actions – souris relachée) au niveau de ta checkBox pour le rendre invisible (display.xxx – nous l’avons vu dans quelques post très récemment)A adapter selon le besoin : pour finir, je placerai un “display.visible” sur la checkBox en script d’ouverture pour la faire apparaitre à chaque ouverture.
Et j’y ajouterai une ligne pour décocher la checkBox (ex; this.getField(“checkbox”).value = “Off”:Smiley01:
brumbiesMembreBonsoir,
Tu es sur la bonne voie… Attention à respecter la casse… new Date()
Ensuite je modifierai ton script légèrement de la sorte:Code:if (this.getField(“datedebut”).value != “” && this.getField(“nbjour”).value != “”)
{
var dated= util.scand(“dd/mm/yyyy”, this.getField(“datedebut”).value);
var jour = this.getField(“nbjour”).value;
var datef = new Date(dated.getTime()+(jour * 24 * 60 * 60 * 1000));
this.getField(“datefin”).value = datef;
}
else
{
this.getField(“datefin”).value = “”;
}Tu peux définir le format que tu veux pour le champ “datefin”…
:Smiley01:brumbiesMembre:bonjour:
exact Merlin, j’ai de temps en temps tendance à considérer comme acquis ce qui me parait le plus simple….brumbiesMembreBonjour,
De ce que je comprends, ce qu’il te reste à faire c’est d’associer le nom du choisi en « communication » à un mail en « mailcom »…
La question est de savoir si tu laisses la possibilité à l’utilisateur de modifier le mail ?
Si oui alors il faut rester sur un champs texte
Si non tu peux utiliser une liste déroulante
Tu as 2 possibilités repris dans le code ci-dessous à placer à la suite de ton code présent dans communication:switch(reply)
{
case «null» :
app.alert(«merci de choisir un participant»);
break;
case «Denis LAZZAROTTO» :
this.getField(«mailcom»).value = 1; // si mailcom est un menu déroulant ou 1 est la valeur d’exportation du mail correspondant au nom
//ou this.getField(«mailcom»).value = xxx@xx.xx; //s’il s’agit d’un champ texte
break;
// … et ainsi de suite
}:Smiley01:
brumbiesMembreBonsoir,
J’ai tester ton fichier et il fonctionne de mon côté sur Acrobat XI et sur adobe reader XI…
Si tu veux que les utilisateurs le remplissent sur adobe reader (autre que la version XI) pense à étendre les fonctionnalités d’enregistrement sinon de toutes les manières la pièce jointe sera vierge…
Maintenant, j’ai l’impression que ton problème vient toujours du timing d’exécution des différentes lignes…
donc, je modifierai ton script ainsi :Code:this.dirty = false;
function DoIt() {this.closeDoc();}
app.setInterval(“DoIt()”, 500);
parCode:app.alert(“Merci d’avoir renseigné ce formulaire.nA bientôt”);
this.dirty = false;
this.closeDoc();
Cela permettra de stopper le déroulement du script après l’envoi du mail…Sinon une autre approche pour empecher les modifications, serait de mettre l’ensemble des champs de ton formulaire en lecture seule (this.getField(XXXX).readonly = true;) juste avant l’envoi et de le coupler à un script d’ouverture de document pour réinitialiser les champs et les rendre de nouveaux visibles
:Smiley01:brumbiesMembreOk je regarde ça ce soir… :Smiley01:
brumbiesMembreBonjour,
tu es proches d’une solution opérationnelle…
le problème vient de this.numFields que tu as placé au niveau de ta boucle for.
this.numFields renvoi le nombre total de champs présents… soit dans ton cas 101.
Alors que le nombre de ligne du pavé A n’est que de 12.
=> remplace this.numFields par 12 et ca devrait marcher (enfin tu n’auras plus l’alerte au niveau de la console)
dans son exemple Alex n’effectuait le calcul de somme que sur les champs ayant la même racine de nom (Montant) d’ou l’utilsation possible de this.numFieldsensuite pour pouvoir calculer la somme des subtot, il faut ajouter
total = total + subTot; à l’intérieur de ta boucle for (après le calcul de subTot)
et il faut ajouter aussi une ligne en début de script pour réinitialiser total = 0;
ta ligne en fin de script total = this.getField(“aSubTot”).value est donc à retirer…:Smiley01:
A noter que les variables masterSubTot, masterQty et masterPrice ne sont pas utiles, tu peux directement mettre leur valeur (“aSubTot”, “aQty” et “aPrix”) dans les this.getField de la boucle for…13 novembre 2014 à 22:33 en réponse à : Un bouton radio peut-il activer un autre bouton radio (d’une autre série) ? #57967brumbiesMembreBonsoir,
pour le point 2 c’est un bon début…
par contre il faut différencier les cases à cocher pour la TVA à 10% des cases à cocher pour la TVA à 20%.
Car si tu les grises comme tu veux le faire alors l’ensemble des cases d’un même “groupe” seront grisée.Il n’est pas utile de désactiver le bouton radio puisque que tu en as 2… et que l’utilisateur a donc 2 choix.
je modifierai ton script ainsi:Code:this.getField(“ACH10”).fillColor = color.white;
this.getField(“ACH10”).strokeColor = color.black;
this.getField(“ACH10”).readonly = false;
this.getField(“ACH20”).fillColor = [“RGB”,0.93,0.93,0.93];
this.getField(“ACH20”).strokeColor = color.ltGray;
this.getField(“ACH20”).readonly = true;ou ACH10 correspond au valeur 779, 1079 et 1379 et ACH20 les autres…
et je supprimerai donc le script sur le déclencheur “souris enfoncée”
:Smiley01:brumbiesMembreBonsoir,
Le problème semble venir du fait que sur tes boutons “Avec ensemble” et “Sans ensemble” tu rends visible/invisible les champs “et ensemble”, “ensemble” et “txt_option” via l’action “prédéfinie” Afficher/masquer un champs.
Essaie de remplacer ces actions par un script javascript comme ceci : http://abracadabrapdf.net/forum/index.php/topic,2574.0.htmlCa devrait fonctionner…
Ce qui me laisse à penser qu’acrobat ne reconnait pas de la même manière les évènements d’action suivant s’ils sont instruis par du script ou s’ils sont instruis via une action “prédéfinie” … interressant!
:Smiley01:brumbiesMembreBonsoir,
Ton code pour fermer sans interrogation de l’utilisateur doit de toutes les façons être éxécuté après l’action d’envoi du mail.
Ensuite, pour l’envoi du mail tu utilises une action via une action “prédéfinie” (envoyer un formulaire) ou via un script de type :
this.mailDoc({
bUI: false,
cTo: “xxxx@xxx.xx“,
cCC: “xxxx@xxx.xx“,
cSubject: “Essai”,
cMsg: “cool ca marche”
});
Et tu as mis les 2 actions sur le même déclencheur?Joint ton fichier si possible…
:Smiley01:13 novembre 2014 à 09:55 en réponse à : Programmation afficher/masquer plusieurs calques de façon rapide #57968brumbiesMembreBonjour,
C’est proche d’une de tes demandes précédentes : http://abracadabrapdf.net/forum/index.php/topic,2550.0.html
sinon le post évoqué par Merlin avec le script d’Alex est celui-ci je pense :http://abracadabrapdf.net/forum/index.php/topic,1284.msg5829.html#msg5829Enfin, j’ai modifié légèrement la maquette que je t’avais faite en intégrant la visibilité des 2 boutons présents
:Smiley01:
13 novembre 2014 à 09:21 en réponse à : À l’ouverture, est il possible d’imposer un enregistrement sous ? #57889brumbiesMembreBonjour,
Un post récent en fait mention : http://abracadabrapdf.net/forum/index.php/topic,2574.0.html
:Smiley01:
Suivant ton besoin, tu peux ajouter un script inverse lors de la fermeture du document afin de faire réapparaitre le bouton lors de l’ouverture suivante…12 novembre 2014 à 21:10 en réponse à : Un bouton radio peut-il activer un autre bouton radio (d’une autre série) ? #57965brumbiesMembreAutant pour moi, je n’avais pas vu que tu avais deja joint ton fichier…
1)
a) je ne comprend pas pourquoi tu réinitialises “MES” lorsque tu sélectionnes “FORMULE” (Pack 1) alors que ton but est de le cocher…
b) pour activer automatiquement MES avec FORMULE tu peux utiliser :Code:if (this.getField(“FORMULE”).isBoxChecked(0))
{this.getField(“MES”).checkThisBox(0,true);}
else
{this.getField(“MES”).checkThisBox(0,false);}=> ce code est à mettre sur le déclencheur souris relachée
en fait si tu veux utiliser le choix du bouton radio alors tu dois te servir de la valeur du champs this.getField(xxx).value, et si tu utilises isBoxChecked ou checkThisBox alors tu dois prendre en compte le numéro du champs parmis l’ensemble des champs portant le même non2) on a déjà vu récemment comment griser un bouton radio il y a peu de temps, associé à un code similaire à celui de 1 et en y ajoutant celui permettant de griser un bouton radio, tu devrais obtenir ce que tu veux
3) pour rendre visible et invisible un champs, ca aussi on l’a vu très récemment
sinon pour ton test, tu peux utiliser :Code:if(this.getField(“MATCOMP”).value == “FIN” && this.getField(“FORMULE”).value == “19.9”)
{
…}dupliques ce code sur FORMULE et sur MATCOMP afin de prendre en compte les 2 actions
=> ce code est à mettre sur le déclencheur souris relachéeet pour le reste tu fais exactement la même chose…
:Smiley01:brumbiesMembreBonsoir,
Petite précision sur ton script :
var i = 1;
var prix = this.getField(“prix_” + i);
var qte = this.getField(“qte_” + i);
var subTot = this.getField(“subTot_” + i);for (var i=0; i < 150; i++) {
subTot.value = qte.value * prix.value;
}il ne peut pas fonctionner de la sorte, car la boucle “for” n’exécute que les lignes situées entre ses accolades…
ton script se traduit ainsi:
tu affectes à prix la valeur prix_1; qte la valeur de qte_1 et subTot la valeur subTot_1, et avec la boucle for tu effectues 150 fois le calcul
subTot_1 = qte_1 * prix_1je modifierai ton script de la sorte:
for (var i=0; i < 150; i++)
{
this.getField(“subTot_” + i).value = this.getField(“prix_” + i).value * this.getField(“qte_” + i).value;
}:Smiley01:
12 novembre 2014 à 19:06 en réponse à : Un bouton radio peut-il activer un autre bouton radio (d’une autre série) ? #57963brumbiesMembreBonsoir,
Le plus simple serait de poster ton fichier ou une partie de celui-ci avec le code que tu as tenté…
:Smiley01:10 novembre 2014 à 09:27 en réponse à : Garder les calques sélectionnés ouverts lorsqu’on sauvegarde un PDF #57766brumbiesMembreBonjour,
J’ai maquetté un exemple d’une solution que j’utilise pour gérer l’affichage des calques à l’ouverture du document.
l’exemple correspond à ce que précisait Merlin…J’utilise ici 2 boutons pour faire apparaitre l’un ou l’autre calque, et j’ai 2 champs texte qui sont invisible à l’écran qui me servent à stocker la valeur d’affichage de chacun des calques (true ou false).
il y a 1 script au niveau de chaque bouton qui permet de changer le calque visible “immédiatement” et un qui affecte la visibilité du calque au champ texte associé.
il y a 1 autre script à l’ouverture du document qui affecte la valeur contenu dans les champs texte à chacun des calques.
d’autre combinaisons pour passer d’un calque à l’autre sont possible…Il faut bien entendu que l’utilisateur enregistre le doc à la fermeture.
Ce modèle fonctionne aussi bien sur acrobat que sur reader (j’ai étendu l’enregistrement…):Smiley01:
brumbiesMembreBonjour
si ton souhait est d’obtenir à l’écran la date au format “dd:mm” alors il faut bien utilisé ce que dit merlin => option de date personnalisée, par contre lors de la saisie tu devras quand même indiquer d/m ou d-m, car “:” sont reconnus pour indiquer une heure.
=> ce qui n’est pas très pratique selon moi… sinon utilise un format “dd/mm” ou “dd-mm” si tu peux.
:Smiley01:30 octobre 2014 à 15:05 en réponse à : Cocher plusieurs cases si l’une d’entre elles est cochée, et inversement. #57604brumbiesMembreBonjour,
Tu devrais aller regarder sur le web des cours d’initiation à JavaScript ainsi tu auras une meilleur vu de la syntaxe à utiliser.
http://javascript.developpez.com/cours/
https://developer.mozilla.org/fr/docs/Web/JavaScript/Une_r%C3%A9introduction_%C3%A0_JavaScript
Ainsi, tu apprendras les variables, les opérateurs, les structures de contrôle, les fonctions … (ex : &&, ||, == ou =, if(), for(), …) dans quel cas et surtout comment les utiliser.
La boucle for() est un standard au même titres que la condition if(), et une fois que tu l’auras maitrisé, tu te rendras compte qu’elle peut être très utile dans ton cas.
Regarde de plus près la duplication rapide des champs et à la Convention de dénomination des champs de formulaire (recherche sur le site déjà évoqué plusieurs fois) et associé à la boucle for tu verras que ton script sera « raccourci ». Dans l’exemple j’ai mis une boucle for allant de i = 1 jusqu’à i <= 2 avec un pas de 1 (i++ s’écrit aussi i = i + 1), mais on aurait pu aussi faire aller i jusqu’à 100…
Le but d’avoir un script le plus minimaliste possible n’est pas toujours une bonne solution, car souvent perte de temps par rapport à la recherche de l’optimisation.Dernier point sur (0), il ne signifie rien tout seul, ce qui importe c’est la fonction isBoxChecked, cette fonction doit recevoir une variable pour être exploitable. Variable correspondant au numéro de la Checkbox.
Tu peux voir l’utilisation des fonctions JavaScript propres à Acrobat ici :http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/js_api_reference.pdf
Merci Merlin pour la correspondance entre version anglaise et française.
:Smiley01:30 octobre 2014 à 10:35 en réponse à : Validation JavaScript et Contrôle sur Signature Manuscrite #57834brumbiesMembreBonjour,
Précision sur le point 2, il existe différents types d’annotations
Commentaire : “Text”
Surlignage : “Highlight”
onglet signer d’Adobe reader XI
ajout de texte : “FreeText”
ajout d’une coche : “Stamp”
apposer des initiales : “Stamp”
apposer une signature : “Stamp”donc tu ne peux pas identifier une signature, ni la vérifier, tu peux juste vérifier la présence d’une annotation de type “Stamp” (qui correspond à trois type d’annotations)
le code ci-dessous, placer sur un bouton, affiche le nombre de type “Stamp” détecté
Code:var myDoc = event.target.doc;
var commentList;
var compteur = 0;
if(!myDoc)
app.alert(“Impossible d’accéder au document”);
else
{
commentList = myDoc.getAnnots();
if(commentList != null)
{
for each(comment in commentList)
{
switch(comment.type)
{
case “Stamp”:
{
compteur ++;
break;
}
}
}
}
if(compteur != 0)
if(compteur == 1)
app.alert(compteur + ” signature de renseigné sur ce document”);
else
app.alert(compteur + ” signatures de renseigné sur ce document”);
else
app.alert(“aucune signature de renseigné sur ce document”)
}:Smiley01:
29 octobre 2014 à 14:59 en réponse à : Cocher plusieurs cases si l’une d’entre elles est cochée, et inversement. #57601brumbiesMembreBonjour,
Quelques pistes pour tes diverses interrogations :
1) tu étais proche d’un script opérationnel, tu as simplement ajouté trop de {}
Code:if (event.target.isBoxChecked(0))
{
this.getField(“CheckBox1”).checkThisBox(0,true);
this.getField(“CheckBox2”).checkThisBox(0,true);
}
else
{
this.getField(“CheckBox1”).checkThisBox(0,false);
this.getField(“CheckBox2”).checkThisBox(0,false);
}sinon tu peux aussi simplifier le code de la façon suivante :
Code:if (event.target.isBoxChecked(0))
{
for(var i = 1; i <=2; i++)
this.getField(“CheckBox”+i).checkThisBox(0,true);
}
else
{
for(var i = 1; i <=2; i++)
this.getField(“CheckBox”+i).checkThisBox(0,false);
}2) en reprenant l’arborescence en 3) alors tu peux utiliser un scrip comme celui-ci, que tu dupliques sur les CheckBox3 et CheckBox4
Code:if (this.getField(“CheckBox3”).isBoxChecked(0) && this.getField(“CheckBox4”).isBoxChecked(0))
{
this.getField(“CheckBox1”).checkThisBox(0,true)
}
else
{
this.getField(“CheckBox1”).checkThisBox(0,false)
}3) je ne comprends pas ta logique de ne vouloir activer que CheckBox1 et CheckBox2 via un script en CheckBox0 parce que la finalité est d’activer CheckBox3 et CheckBox4.
Pour moi il suffit d’activer C3 et C4 dans le même script que C1 et C2 soit en C0.
Enfin une piste pour répondre à ta demande serait d’ajouter en C0 la ligne
this.getField(“CheckBox1”).setFocus();
le tout en dupliquant le code en C1 aussi bien avec le déclencheur “souris relachée” et le déclencheur “Champ activé”.:Smiley01:
29 octobre 2014 à 12:33 en réponse à : Remplissage automatique d’ un champs en fonction d’ un autre #57826brumbiesMembreBonjour,
Le fait que 2 valeurs soient des fractions complique effectivement le script à mettre en place. Il est possible de convertir un nombre en fraction indivisible via javascript. Ce qui est important c’est de savoir si les équivalences sont bien proportionnelles pour toutes les autres valeurs (de DN par exemple) …
Donc le plus simple pour toi est d’utiliser ton idée 2.
Pour cela, il suffit de reprendre les codes indiqués dans la réponse précédente et de bien affecter la même valeur d’exportation à chacune des valeurs à associer.
Je m’explique :
DN => Eléments = 8 & valeur d’export = 1
Pouces => Eléments = 1/4 & valeur d’export = 1
Diametre => Eléments = 5×10 & valeur d’export = 1
Diametre ext => Eléments = 13.5 & valeur d’export = 1
et ainsi de suite…
Ainsi lorsque l’utilisateur choisira dans le menu déroulant un Elément (par ex), l’ensemble des Eléments ayant la même valeur d’exportation s’afficheront.Ce qui te permettra d’avoir un résultat plus esthétique.
:Smiley01: -
AuteurRéponses