Toutes mes réponses sur les forums
-
AuteurRéponses
-
micka92
MembreMerci à vous pour votre aide. :bonjour: C’est vraiment “surprenant” que l’on ne puisse pas mieux protéger nos “créations”. Alors oui, le mot de passe d’ouverture permet de mieux bloquer le piratage, mais ce n’est pas concevable pour les supports que je crée de demander un mot de passe à chaque ouverture. Il y a trop d’interlocuteurs différents.
micka92
MembreBonjour bebarth et merci pour tout. C’est très intéressant. Cela me permettra effectivement de brouiller les pistes pour des novices, même si bien souvent le “vol” de mes documents se fait simplement pour modifier le logo et le nom de l’entreprise, tout en gardant l’intelligence que j’y ai mise.
micka92
MembreBonjour,
J’ai fait le test et effectivement, n’importe quel mot de passe de restrictions d’utilisateurs se fait sauter, même très complexes. C’est dingue ! Le mot de passe d’ouverture du fichier le protège bien contre ces sites, mais ce n’est pas possible dans mon cas. Les formulaires sont renseignés plusieurs fois par jour, transmis à des clients, collègues etc, et il n’est donc pas concevable d’y mettre un mot de passe d’ouverture. :oh:
micka92
MembreBonsoir Merlin,
Je veux principalement protéger mes scripts. En effet, dans le cadre de mon travail, je me suis fait voler un long travail de plusieurs mois par des entreprises concurrentes. A l’avenir, j’aimerais pouvoir protéger, si possible, mes scripts. Qu’on me vole le modèle, tant pis, mais pas l’intelligence mise dans les formulaires.
micka92
MembreDans mon script réel, il n’y a pas de redondance avec “numero”. C’était juste pour mon exemple. Et j’ai également supprimé les caractères spéciaux dans mon message pour voir si cela changeait quelque chose.
micka92
MembreSavez-vous s’il est possible d’écrire le code ci-après d’une autre manière ? En effet, celui-ci fonctionne bien sur PC mais pas sur tablette (PDF Expert). Je sais qu’il existe une section dédiée à la mobilité mais comme elle est peu utilisée… Mon but est simplement de savoir si ce script peut être codé différemment. Sinon, j’en déduirai que la fonction n’est pas supportée sur PDF Expert.
Code:var Numero=app.response({
cQuestion: “Indiquez ici le numero souhaite.”,
cTitle: “Numero souhaite”,
cLabel: “Numero souhaite :”,
cDefault: “”,
});this.getField(“numero”).value=Numero;
micka92
MembreMerci à vous deux pour votre aide précieuse ! :bonjour:
micka92
MembreA force d’abnégation et avec une tête un tant soit peu reposée, j’ai trouvé la solution à mon problème :
Code:for (var i = 0; i < this.numFields; i++)
{
var f = this.getNthFieldName(i);
if ((f.substring(0,7) == “facture”))
{this.getField(f).readonly = false;}
}micka92
MembreUn génie ce Merlin je vous dis, un gééénie ! :bravo:
Mille mercis, comme d’habitude, tu es très serviable, compétent, et réactif ! :bonjour:
micka92
MembreMerci bebarth ! Toujours au top comme d’habitude ! :bonjour:
micka92
MembreMerci à vous deux.
micka92
Membrebonjour,
…et tu ne peux vraiment pas partager un semblant de fichier qu’on pourrait étudier pour mieux comprendre ? parce que je pense déjà avoir répondu à ça !!!
@+
:bonjour:En gros, j’aimerais remplacer ma partie du script où je déclare ma table par quelques lignes qui iraient chercher les valeurs dans le champ c_liste.
micka92
Membrebonsoir,Comment est généré le script et comment est-il lancé ??? Si la table est uniquement dans le script et qu’elle n’est pas affichée dans un champ, il n’est pas possible de la récupérer. Pour des raison de sécurité il n’est pas possible de modifier un script via un autre script. Par contre, on peut supprimer un script et en re-créer un autre !
Je ne sais pas si cela répond à ta question…
@+
:bonjour:Le script est lancé à l’ouverture du fichier. Mon but serait de la remplacer par quelques lignes qui iraient chercher les valeurs dans un champ. En fait, sur ma précédente demande, j’ai bien compris le concept de découper des chaînes grâce au saut à la ligne, puis sur chaque chaîne de récupérer des valeurs grâce à la fonction split. Là en gros, je pense que le principe est le même, sauf que ma table ListeVoiture a ses variables qui s’appellent “marque”, “modele” et “vente”. En gros, j’essaie de récupérer avec une boucle les valeurs 0, 1 et 2 de mon champ texte, pour qu’elles prennent place dans les valeurs précitées.
micka92
MembreBonsoir,
Je vais essayer d’être clair. Toute la partie récupération des données dans une liste déroulante, affichage des valeurs correspondantes dans des champs texte et tout est déjà géré.
Le seul point que j’aimerais améliorer, est le fait que mon tableau de valeurs est actuellement déclaré dans mon script en dur, donc non modifiable par le commun des mortels :
Code:ListeVoiture[0]={marque:”RENAULT”,modele:”Clio”,vente:1500};
ListeVoiture[1]={marque:”PEUGEOT”,modele:”208″,vente:500};
ListeVoiture[2]={marque:”CITROEN”,modele:”C3″,vente:800};
ListeVoiture[3]={marque:”TOYOTA”,modele:”Yaris”,vente:150};
ListeVoiture[4]={marque:”MAZDA”,modele:”2″,vente:80};Je me demandais simplement s’il était possible de remplacer cette partie du script, par quelques lignes qui iraient chercher les données dans un champ texte de la forme :
RENAULT|Clio|1500
PEUGEOT|208|500
CITROEN|C3|800
TOYOTA|Yaris|150
MAZDA|2|80En gros, il faudrait que je puisse récréer mon tableau de valeurs ListeVoiture, mais d’après un champ texte. Ainsi, si la liste évolue, elle peut être mise à jour via un simple copier-coller, par un quelconque utilisateur, sans avoir à rentrer dans le code.
Pour des raisons de confidentialité, je ne peux pas malheureusement pas déposer de fichier ici.
Désolé pour les incompréhensions. :Smiley11:
Bon, j’ai dû manquer de clarté ! :jerisjaune:
micka92
MembreBonsoir,
Je vais essayer d’être clair. Toute la partie récupération des données dans une liste déroulante, affichage des valeurs correspondantes dans des champs texte et tout est déjà géré.
Le seul point que j’aimerais améliorer, est le fait que mon tableau de valeurs est actuellement déclaré dans mon script en dur, donc non modifiable par le commun des mortels :
Code:ListeVoiture[0]={marque:”RENAULT”,modele:”Clio”,vente:1500};
ListeVoiture[1]={marque:”PEUGEOT”,modele:”208″,vente:500};
ListeVoiture[2]={marque:”CITROEN”,modele:”C3″,vente:800};
ListeVoiture[3]={marque:”TOYOTA”,modele:”Yaris”,vente:150};
ListeVoiture[4]={marque:”MAZDA”,modele:”2″,vente:80};Je me demandais simplement s’il était possible de remplacer cette partie du script, par quelques lignes qui iraient chercher les données dans un champ texte de la forme :
RENAULT|Clio|1500
PEUGEOT|208|500
CITROEN|C3|800
TOYOTA|Yaris|150
MAZDA|2|80En gros, il faudrait que je puisse récréer mon tableau de valeurs ListeVoiture, mais d’après un champ texte. Ainsi, si la liste évolue, elle peut être mise à jour via un simple copier-coller, par un quelconque utilisateur, sans avoir à rentrer dans le code.
Pour des raisons de confidentialité, je ne peux pas malheureusement pas déposer de fichier ici.
Désolé pour les incompréhensions. :Smiley11:
micka92
MembreJ’ai essayé de remplacer mon script :
Code:ListeVoiture[0]={marque:”RENAULT”,modele:”Clio”,vente:1500};
ListeVoiture[1]={marque:”PEUGEOT”,modele:”208″,vente:500};
ListeVoiture[2]={marque:”CITROEN”,modele:”C3″,vente:800};
ListeVoiture[3]={marque:”TOYOTA”,modele:”Yaris”,vente:150};
ListeVoiture[4]={marque:”MAZDA”,modele:”2″,vente:80};par
Code:var lesValeurs = this.getField(“Liste”).value;
var laChaine = lesValeurs.split(“u000D”);
for (var i=0; i{
var laValeur=laChaine.split(“|”);
ListeVoiture={marque:laChaine.laValeur[0],modele:laChaine.laValeur[1],vente:laChaine.laValeur[2]}
}Mais ça ne fonctionne pas.
micka92
Membrebonsoir,
Il y avait plusieurs façons d’envisager le problème. Celle que j’utilise est certainement la plus simple :Code:var lesValeurs=this.getField(“listeOriginale”).value;
var laChaine=lesValeurs.split(“u000D”);
var Resultat=””;
for (var i=0; ivar laLigne=laChaine;
var n1=laLigne.indexOf(“[“);
var n2=laLigne.indexOf(“]={marque:””);
var n3=laLigne.indexOf(“”,modele:””);
var n4=laLigne.indexOf(“”,vente:””);
var Indice=laLigne.slice(n1+1,n2);
var Marque=laLigne.slice(n2+11,n3);
var Modele=laLigne.slice(n3+10,n4);
var Vente=laLigne.slice(n4+9,laLigne.length-2);
var Resultat=Resultat+Indice+”|”+Marque+”|”+Modele+”|”+Vente;
if (i!=laChaine.length-1) var Resultat=Resultat+”u000D”;
}
this.getField(“listeFinale”).value=Resultat;Je te laisse étudier ce script et si tu ne le comprends pas, tu demandes !
Dans le fichier joint je t’ai mis l’action dans un bouton qui affiche le résulat si le champ est vide ou qui vide le champ s’il y a déjà un résultat…
Je ne sais pas comment tu veux déclencher le script.
@+
:bonjour:Super bebarth, ton script va déjà beaucoup m’aider pour retranscrire mon morceau de script qui fait une centaine de lignes vers le format que je veux, et pour plus tard aussi. :bravo:
Par contre, du coup, comment est-ce que je peux récupérer ces données Valeur1|Valeur2|Valeur3 pour qu’elles prennent la place de ListeVoiture={marque,modele,vente} ? En gros, j’aimerais supprimer ma partie fixe de mon script, pour qu’il vienne plutôt récupérer les valeurs dans un champ texte Valeur1|Valeur2|Valeur3. Plutôt que de créer un tableau de valeur en dur dans mon script, donc non modifiable par les utilisateurs, j’aimerais pouvoir leur donner la possibilité d’initialiser eux-mêmes leur propre tableau de valeur, simplement en renseignant un champ sous la forme Valeur1|Valeur2|Valeur3 (Désolé si je ne m’exprime pas bien… :priere: )
micka92
Membrebonsoir,
A mettre en script d’action champ désactivé :Code:var lesValeurs = this.event.target.value;
var laChaine = lesValeurs.split(“u000D”);
eval(laChaine[laChaine.length-1]);
this.getField(“Marque”).value=ListeVoiture.marque;
this.getField(“Modele”).value=ListeVoiture.modele;
this.getField(“Vente”).value=ListeVoiture.vente;Par contre, pour les valeurs “vente” il y a un soucis… il doit y avoir soit 2 guillemets, soit aucun. Comme ce sont des nombre je n’en ai mis aucun dans le fichier.
Si tu récupères les données avec un seul guillemet, il faudrait écrire quelques lignes pour le supprimer !
@+
:bonjour:Merci bebarth et Merlin, grâce à vous, mon formulaire touche presque à sa fin.
Il n’y a vraiment que ma partie script que j’aimerais rendre personnalisable que je n’arrive à pas mettre en oeuvre. Il est en dur sous la forme :
Code:ListeVoiture[0]={marque:”RENAULT”,modele:”Clio”,vente:”1500};
ListeVoiture[1]={marque:”PEUGEOT”,modele:”208″,vente:”500};
ListeVoiture[2]={marque:”CITROEN”,modele:”C3″,vente:”800};
ListeVoiture[3]={marque:”TOYOTA”,modele:”Yaris”,vente:”150};
ListeVoiture[4]={marque:”MAZDA”,modele:”2″,vente:”80};La liste s’initialise à l’ouverture du PDF, les valeurs marque alimentent une liste déroulante, et les valeurs modèles et ventes des champs textes
J’aimerais mettre dans un champ texte les variables comme ci-après :
0|RENAULT|Clio|1500
1|PEUGEOT|208|500
2|CITROEN|C3|800
3|TOYOTA|Yaris|150
4|MAZDA|2|80Et donc remplacer mon script en dur par un code qui viendrait récupérer les variables dans ce champ texte tant qu’il y a des lignes plutôt que de les avoir en dur dans mon script.
micka92
MembreDu coup, j’ai ptet mal compris.
Je déclare ma variable grâce à mon champ texte contenant mon de script ? Mais ensuite, comment je code pour qu’elle s’exécute ?
micka92
Membrebonjour,
Tes questions sont certainement très claires dans ta tête, mais personnellement je ne vois pas quel est ton problème… le fichier Doc 1.pdf que tu as partagé me parait correct et je ne vois pas pourquoi tu as besoin que la valeur d’exportation soit identique à la valeur sélectionnée. Si tu as besoin de cette valeur, tu peux la récupérer comme tu l’as justement fait dans ton champ “Fournisseur”.
En ce qui concerne ta dernière demande, c’est plus simple :Code:// Liste en souris enfoncée
this.getField(“Liste”).clearItems();
var lesValeurs = this.getField(“champTexte”).value;
var laChaine = lesValeurs.split(“u000D”);
for (var i=0; ivar laValeur=laChaine.split(“|”);
this.getField(“Liste”).insertItemAt(laValeur[0],laValeur[0],i);
}// Nom
var indice =this.getField(“Liste”).currentValueIndices;
var laValeur=laChaine[indice].split(“|”);
this.event.target.value=laValeur[0];// Prenom
this.event.target.value=laValeur[1];// Age
this.event.target.value=laValeur[2];@+
:bonjour:Merci pour le retour. Oui, effectivement, cela me semble clair dans ma tête, mais c’est difficile à exprimer.
En fait, j’ai besoin que mes valeurs d’exportation soient identiques aux valeurs des éléments de mes listes déroulantes car derrière, il y a tout un process qui travaille d’après ces valeurs, et le nom des champs. Et ces process ne peuvent pas être modifiés. Voilà pourquoi.
micka92
MembreBonjour.
Oui.
En JavaScript c’est le dernier qui a parlé qui a raison.
Du coup, il suffit de re-déclarer la variable ListeVoiture à la suite du script existant et le tour est joué.
:Smiley15:Du coup,
Code:var ListeVoiture = this.getField(“script”).value;?
micka92
MembreDu coup, comment écrire un script pour qu’à partir de ma liste déroulante, je peux afficher une donnée dans un champ texte ?
Mon champ de données :
Nom1|Prénom1|Age1
Nom2|Prénom2|Age2Ma liste déroulante s’incrémente grâce au script de bebarth, mais avec en valeur élément et valeur d’exportation Nom1, Nom2…
Je ne sais pas comment écrire un script pour récupérer sur un champ texte la valeur Prénomx ou Agex en fonction du choix de ma liste déroulante. J’ai bien compris le script qui découpe le champ de données ligne par ligne, puis dans chaque ligne par chaque séparateur | mais je n’arrive pas à mettre la donnée souhaitée dans un champ texte directement depuis le champ de données, et non depuis la valeur d’exportation de la liste déroulante proposée par bebarth.
micka92
Membre…et ça ne te serait pas possible de mettre tes données dans un fichier attaché ?
@+
:bonjour:Non pas possible car utilisé sur des tablettes.
micka92
Membrebonjour,
Désolé, mais je ne comprends plus bien ce que tu veux faire exactement !
Les valeurs d’exportations de ta liste alimentent ton champ “Valeur” donc elles ne peuvent pas correspondre aux valeurs de la liste.
Il faut peut-être traiter le problème différemment si c’est ça.
@+
:bonjour:Je m’explique : quand je crée une simple liste déroulante, avec des valeurs Fournisseur1, Fournisseur2, Fournisseur3 etc, je mets également ces données comme valeurs d’exportation (cf. PJ).
Dans ta macro, tu mets en valeur d’exportation toutes mes données séparées par les #. Du coup, si je dois traiter un export de données plus tard, je verrai apparaître Adresse1#CP1#VILLE1… et non Fournisseur1.
micka92
MembreGrâce à notre ami bebarth, j’ai ENFIN réussi à produire ce que je voulais (cf. ci-joint).
Bon, le seul “problème”, c’est que je n’ai pas réussi à modifier les scripts pour ne pas avoir à travailler depuis les valeurs d’exportation de ma liste déroulante. Je m’explique, le script affiche ma chaîne de caractères avant “|” en valeur élément de ma liste déroulante, et la chaîne de caractères complète après “|” s’incrémente en valeur d’exportation. Du coup, tous les autres scripts récupère les données depuis la valeur d’exportation. C’est super, et cela fonctionne, mais il m’aurait fallu avoir pour valeur d’exportation la valeur élément (exemple : Fournisseur1/Fournisseur1). Mais n’arrivant pas à modifier le script en conséquence, j’ai abandonné l’idée.
Néanmoins, je reste preneur d’une solution…
micka92
Membre…je regarde demain, désolé !
@+
:bonjour:Pas de soucis, j’ai eu du mal à exprimer mon besoin. Je dois rendre mon projet ce soir, donc je vais le laisser en l’état (je voulais juste apporter la possibilité de pouvoir offrir un champ de personnalisation plutôt que de refournir un nouveau formulaire à chaque fois). L’avantage c’est que les données en question sont plutôt… “stables”, et ne devraient donc pas changer tous les 4 matins.
Néanmoins, je suis preneur de la solution pour une prochaine fois !
micka92
MembreC’est une réflexion d’ordre général.
J’ai vu plus haut que tu galérais avec les sauts de ligne dans le champ texte, alors qu’une zone de liste se remplit obligatoirement ligne par ligne (item par item), comme les listes déroulantes.Faute de voir le document il est difficile d’être plus précis.
Ci-joint le fichier fourni par bebarth sur lequel j’ai tenté de travailler.
La liste déroulante s’alimente bien, sauf que les valeurs d’exportation devraient être les mêmes que celles des éléments. Pour cela, je sais qu’il faut juste modifier 1 par 0 dans le script, mais du coup, comme la suite utilise la valeur d’exportation, ça ne fonctionne plus.
Pour le reste, je n’arrive pas à saucissonner mes lignes, puis les valeurs ligne par ligne séparées par “|”, puis enfin le bloc valeur 2 découpé par des #.
micka92
MembreJe me dois d’insister : il est beaucoup plus simple de remplir les lignes d’une zone de liste que de réinventer la roue dans un champ de texte multiligne.
:geek:Bonjour ami Merlin,
En quoi une zone de liste pourrait m’être utile ?
En effet, mon besoin est le suivant :
Je veux un champ texte que je masquerais via un bouton (ça je sais faire :p).
Dedans, il y aura des données comme ci-après :Titre1|Adresse1#CP1#Ville1|Mail1
Titre2|Adresse2#ComplémentAdresse2#CP2#Ville2|Mail2
Titre3|Adresse3#CP3#Ville3|Mail3Ma liste déroulante “Liste” doit s’incrémenter avec les valeurs Titre1, Titre2, Titre3… aussi bien en libellé qu’en élément qu’en valeur d’exportation.
Mon champ texte “Adresse” doit s’incrémenter avec les valeurs Adresse, Complément d’adresse (si existant), CP et Ville, avec un affichage ligne par ligne à chaque séparateur #.
Enfin, mon champ texte “Mail” doit s’incrémenter avec les valeurs Mail1, Mail2, Mail3…
Du coup, je ne vois pas en quoi la zone de liste pourrait m’être utile.
micka92
MembreBon, bah je n’arrive pas au résultat escompté par mes propres moyens. :oh:
micka92
MembreJe n’ai pas compris tout de suite ce que tu voulais comme résultat !
Voilà une version qui devrait correspondre.
Ne pas oublier de mettre le champ texte en lignes multiples;
@+
:bonjour:Merci beaucoup, c’est exactement ce que je cherchais. Si ce n’est que dans “this.getField(“Liste”).insertItemAt(laValeur[0],laValeur[1],i);”, cela m’incrémente la liste de choix avec pour pour libellé laValeur[0], et pour valeur d’exportation laValeur[1]. Du coup, comme il me fallait comme valeur d’exportation la même chose que le libellé, j’ai remplacé 1 par 0. Cela fonctionne.
Par contre pour la suite, je n’arrive plus à suivre. En effet, dans mon script de calcul du champ “Adresse”, quelque chose coince. En effet, je pense que ton script prenait la valeur d’exportation, soit laValeur[1] (je ne sais pas comment d’ailleurs), pour la découper grâce au séparateur n, que je vais remplacer par # d’ailleurs car j’avais pris n pensant que ça me ferait des sauts de ligne. Du coup, comme ma valeur d’exportation ne contient plus que le libellé, les lignes 2 et 3 sont “undefined”.
Du coup, mon besoin est :
Champ texte avec
Libellé1|Adresse1#CP1#VILLE1|Adresse_mail1
Libellé2|Adresse2#CP2#VILLE2|Adresse_mail2
Libellé3|Adresse3#CP3#VILLE3|Adresse_mail3Ma liste déroulante doit s’incrémenter avec pour libellé et valeur d’exportation “Libellé1”, “Libellé2”, “Libellé3″…
Un champ texte “Adresse” doit suivant le choix de la liste déroulante afficher :
Adresse
CP
VILLEUn champ texte “Mail” doit suivant le choix de la liste déroulante afficher :
MailJe continue d’essayer de mon côté car même si je n’y arrive pas avant que tu puisses m’aider, cela m’aide à comprendre tes macros !
micka92
MembreJe pense, sauf erreur de ma part, qu’il est impossible de renseigner un code quelconque représentant un saut de ligne, pour qu’il apparaisse comme un saut de ligne dans un autre. Pour autant, je me dis qu’il est possible pour moi de renseigner mes données de la façon suivante :
Titre1||Valeur1||Valeur2||Valeur3…Du coup, je renseignerais ma liste déroulante avec Titre1, et il faudrait que je renseigne mon champ texte avec :
Valeur1
Valeur2
Valeur3Mais du coup, comment l’intégrer en script ?
micka92
Membrebonjour,Je ne suis pas certain de comprendre ! Tu écris “Titre 1||Valeur 1nTitre 2||Valeur 2nTitre 3||Valeur 3nTitre 4||Valeur 4nTitre 5||Valeur 5nTitre 6||Valeur 6” dans ton champ texte ???
si c’est ça, tu remplaces “var laChaine = lesValeurs.split(“u000D“);” par “var laChaine = lesValeurs.split(“\n“);”
@+
:bonjour:En fait, c’est au sein même de mes données Valeur 1, Valeur 2 etc que j’ai besoin de faire apparaître des sauts de ligne. Du coup, dans mon champ de données total, j’ai écrit n, mais sur le champ valeur qui s’affiche en fonction de la liste déroulante créée, bah j’ai toujours n qui s’affiche, et pas de saut de ligne.
Exemple :
Magasin Fourre-Tout||AdressenCPnVILLE
Magasin Tartampion||AdressenCPnVILLEmicka92
MembreOups,
Je me souviens avoir changé d’avis au dernier moment sans avoir assez vérifié apparemment !
J’avais placé le script en calcul du champ texte au lieu de script de souris enfoncée sur la liste… Je ne me souviens plus pourquoi.
J’ai remis le script sur la liste déroulante.
@+
:bonjour:Super bebarth, t’es un chef ! Dernière petite question : j’ai mis des n dans mon champ pour faire apparaître des sauts de ligne sur les valeurs 1, 2, 3 etc mais ça m’affiche n et ne fait pas de saut de ligne. Existe-t-il une astuce ?
micka92
MembreAlors c’est exactement ça, mais par contre, je ne peux pas choisir de valeur de la liste déroulante ainsi générée. Cela reste automatiquement sur la dernière valeur.
micka92
MembreJe suis en train de le décortiquer pour le comprendre
micka92
MembreBonsoir Merlin,
Non pas tout à fait. Je connais la liste déroulante, et ce n’est pas ce dont j’ai besoin. Dans mon cas, l’utilisateur doit pouvoir modifier les valeurs de la liste depuis le fichier PDF lui-même (sans avoir une version Pro d’Adobe).
micka92
MembreJe vais essayer d’être explicite. J’ai quelques lignes de scripts qui s’exécutent à la signature (blocage de certains champs, déblocage d’autres champs etc). Sur iPad, aucun problème puisque tout est enregistré au fil de l’eau. Hors, sur PC, au moment où l’on veut signer un document, Acrobat propose automatiquement de sauvegarder le fichier. Sauf que je me suis rendu compte qu’après cet enregistrement, si je veux fermer le fichier, Acrobat me propose une nouvelle fois de le sauvegarder. Si on ne le fait pas, et que l’on ouvre une nouvelle fois le fichier, on s’aperçoit que les scripts n’ont pas été sauvegardés (blocages, déblocages, etc). J’ai 3 signatures qui fonctionnent comme ça sur mon document.
micka92
Membrebonjour,
Voici ce que j’ai fait.
Le script retire et ne compte pas les éventuels retours lignes en fin de texte.
@+
:bonjour:Merci bebarth, ça marche du tonnerre ! :bonjour: :priere:
micka92
MembreJe pensais que tu tapais du texte, mais ce n’est apparemment pas le cas !
Comment arrivent les données du QR code dans le champ ???
@+
:bonjour:Par un simple copier-coller dans le fameux champ où je voudrais contrôler qu’il n’y ait pas plus de 10 lignes.
micka92
MembreBonjour,
Il suffit de compter le nombre de retour ligne.
Le plus compliqué c’est peut-être si tu veux le faire à la volée…
@+
:bonjour:Qu’entends-tu par le faire à la volée ?
micka92
MembreBonjour,
Le fonctionnement est ainsi. Il y a des données récupérées par QR code, elles sont au nombre de 10, chacune sur une ligne.
micka92
MembreMerci Merlin, je n’avais pas compris.
Et si jamais je souhaite n’autoriser que les chiffres et deux lettres, comme le D et le J ?
micka92
MembreBonsoir,
Merci pour le retour, mais je pense m’être mal exprimé sur mon besoin.
Je n’ai pas besoin de comptabiliser le nombre de caractères, mais seulement interdire une saisie commençant par un chiffre, ou les lettres A et B.
Dans les scripts communiqués, je ne vois pas où l’on indiquer les caractères autorisés…
micka92
MembreBonsoir Merlin,
Encore une fois, je te remercie pour cette réponse d’une simplicité extrême mais d’une efficacité sans égale
.
Le problème que je tentais d’expliquer est que parfois, je rentre un script par exemple de validation personnalisé, et quand je clique sur OK, je n’ai pas d’erreur (le script est bon), mais pour autant, après avoir cliqué sur OK, le bouton radio de l’onglet “Validation” repasse automatiquement sur le choix “Valeur du champ non validée”. En gros, mon script n’est pas pris en compte…
micka92
MembreBonsoir,
Toujours pas de nouveau concernant la prise en charge du JavaScript sur Android pour les PDF ?
micka92
MembreBonsoir,
J’ai fait tester avec un collègue qui maîtrise bien les macros VBA et pour lui, cela ne vient pas de là. En effet, ça me donne l’impression qu’il y a un processus d’Abode Acrobat qui ne s’exécute pas correctement par moment. Je demandais au cas où un problème similaire serait déjà survenu à quelqu’un.
micka92
Membre:extra: :bravo: :extra: :bravo: :bonjour: :bonjour:
micka92
MembreBonsoir.
Ci-jointe une maquette. Le “bug” se présente par exemple en renseignant le champ 2 puis le 1 en validant avec la tabulation au lieu de la touche “Entrée”. On devrait se retrouver en champ “A renseigner si champ 1 rempli” alors qu’on finit en champ “A renseigner si champ 2 rempli”.
micka92
MembreMerci, je vais regarder cela de plus près. :bonjour:
J’avais déjà fait cela entre temps, mais ce qui est embêtant avec le script de calcul (ou alors j’ai un problème sur mon formulaire), c’est que mon message d’erreur s’affiche à chaque fois que je vais dans un champ quelconque. Effectivement, c’est bien pour saouler la personne et le forcer à changer la valeur, mais comme l’être humain est assez contradictoire, ce serait bien que ce message n’apparaisse qu’à la saisie du champ en question.
Petite question toutefois : je n’ai jamais enlevé 1 aux mois dans mes comparaisons de date, et pourtant, je ne pense pas avoir eu de soucis sur ce point. Est-ce normal ? Faut-il toujours enlever 1 ?
micka92
MembreLien d’Alex : http://abracadabrapdf.net/forum/index.php/topic,1876.msg9501.html#msg9501
Dans son cas, le contrôle se lance à l’ouverture du fichier, donc ça marche nickel ! Dans mon cas, le contrôle doit se faire une fois la valeur saisie. En lançant le script en champ désactivé, cela ne fonctionne pas. Je suppose que c’est normal car la valeur renseignée n’est pas encore “enregistrée” au moment de l’exécution du script et du coup, il considère le champ comme vide. Par contre, si on modifie une nouvelle fois la valeur, là le script d’exécute.
micka92
MembreEn fait, il faut que la valeur soit saisie et que je retourne dans le champ pour que le script s’exécute comme je le souhaite…
micka92
MembreBonjour.
Quelqu’un aurait-il du nouveau concernant une appli Android prenant en charge les scripts Java “un peu” poussés ?
On m’a parlé de Adobe Acrobat Pro CC mais je ne suis pas certain que cela réponde à mon besoin…
micka92
MembreBonjour.
En fait, c’est mon script compliqué sur lequel je n’avais pas vu que je réaffichais plus tard mes cases à cocher :Ooops:.
Toutefois, s’il existe une solution simple pour masquer uniquement une seule d’entre elles (nWidget), je suis preneur ! :jerisjaune:
micka92
MembreBonsoir.
Je remonte un peu le sujet car même si le coup du masque blanc fonctionne très bien, j’ai un cas de figure où je dois absolument pouvoir masquer toutes mes cases à cocher mais je n’y arrive pas :
this.getField(“case1”).display = display.hidden; ne donne rienthis.getField(“case1#0).display = display.hidden; fait bugger mon script.
:doute:
micka92
MembreBonjour Merlin.
Windows 10 Home et Adobe Reader Touch. Je ne trouve pas le DC dans le Windows Store… (Edit : mais je viens de l’installer depuis le site Internet… :Ooops: et ça fonctionne !).
Merci Merlin ! :bonjour:
micka92
MembreIl fallait le trouver. Merci Merlin ! :bravo:
micka92
MembreJ’ai déjà utilisé l’astuce du cache à fond blanc, que tu m’avais suggéré auparavant pour un autre sujet, mais la case à cocher reste visible. Je n’ai pas trouvé le moyen de le passer au premier plan.
micka92
MembreDu nouveau sur une éventuelle application Android qui prendrait en charge le JS ? :priere:
micka92
MembreBonjour.
Je me permets de remonter le sujet car je suis toujours intéressé. :bonjour:
micka92
MembreMerci beaucoup ! :bonjour:
micka92
MembreBonjour Merlin.
Merci pour ton retour. Cela fonctionne effectivement mais pour cela, il faut dans un premier temps valider le contenu avec x caractères, pour ensuite revenir sur le champ et voir la taille de police auto s’activer.
23 décembre 2015 à 17:59 en réponse à : Commande enregistrer sous + nom de fichier personnalisé #60131micka92
MembreDonc pas jouable sur iPad.
Dommage :bonjour:
9 décembre 2015 à 17:16 en réponse à : Uniquement en MAJUSCULES dans un champ de texte ? – RÉSOLU #46877micka92
MembreBonsoir Merlin.
Je suis tout à fait d’accord avec toi et je suis d’ailleurs le premier à écrire en majuscules avec des accents. Cependant, dans mon cas, le contenu du champ écrit avec des accents se retrouve en objet de mail, objet lui-même traité par un script Outlook qui, pour le coup, ne reconnaît pas les accents apparemment (ce n’est pas moi qui l’ait fait). De ce fait, je suis bloqué.
Quelqu’un pour me venir en aide ? :extra:
micka92
MembreUn Editeur de texte (par opposition à un Traitement de texte comme Word) c’est un logiciel qui permet de travailler sur du texte brut, sans formatage.
C’est donc idéal pour manipuler des données ou du code (JavaScript…).
Sur Mac OS les meilleurs sont incontestablement TextWrangler et BBEdit, son grand frère.
Sur Windows je ne sais pas, il faudra demander leur avis aux autres membres.– Donc l’idée c’est d’ouvrir le fichier de données avec un Editeur de texte équipé de la fonction Rechercher-remplacer, et d’utiliser cette fonction pour rendre l’agencement des données compatible avec les besoins du script.
Par exemple : rechercher “saut de paragraphe” et remplacer par “virgule”, ou rechercher “accolade ouvrante + guillemets” et remplacer par “parenthèse ouvrante”, etc.
Avec de la logique et quelques essais on arrive rapidement à faire ce qu’on veut.
:geek:Patience et longueur de temps font mieux que force et que rage.
D’accord ! Si l’un d’entre vous en a un sur Windows, je suis preneur (même si je vais faire quelques recherches de mon côté).
micka92
MembreMerci Merlin.
Quelle forme aurait ce script ?
micka92
MembreBonsoir.
Je suppose que l’application utilisée est PDF Expert sur iPad.
Je ne comprends effectivement pas pourquoi un document envoyé en tant que copie originale dégrade fortement les photos. Dans le cadre d’un formulaire à transmettre, il est plutôt gênant de devoir envoyer une copie aplatie.
micka92
MembreUn petit peu de rechercher-remplacer avec un bon éditeur de texte te permettra d’accorder facilement ta formule avec la syntaxe du script.
:joker:Ce qui donne en français ? :Ooops:
micka92
MembreBonjour.
Merci beaucoup pour ce script qui est fonctionnel dans le modèle, mais pas sur mon support… (je ne peux pas le mettre en ligne).
En effet, j’ai tellement de données à mettre que j’ai écrit mon script de la forme suivante :
Code:ListeN3[“A”]=new Array();
ListeN3[“A”][“A1”]=[“A11”];
ListeN3[“A”][“A1”]=[“A12”];
…et non comme cela
Code:ListeN3[“A”]=new Array();
ListeN3[“A”][“A1”]=[“A11″,”A12”];
…Vous vous doutez bien que cela est dû au fait que je crée mon script grâce à Excel en déroulant ma formule sur toutes mes lignes. Si quelqu’un a une astuce pour cela, je suis preneur.
micka92
MembreBonjour.
Deux solutions pour y remédier :
– Fichier > Enregistrer sous : ce qui permettra de supprimer tout ce qui est en “cache” dans le fichier PDF
– Ficher > Enregistrer sous un autre > Fichier PDF optimisé : ce qui permettra d’optimiser les images et autres paramètresmicka92
MembreSur l’exemple ci-joint, j’ai un doute à partir du 4ème niveau :
– Script Initialisation à partir de la ligne 57Code:ListeN4[“A”]=new Array();– Script RemplissagePetiteFille2
micka92
MembreBonjour.
Je profite de ce topic pour savoir s’il y a une limite aux listes mère-fille ? Dans mon cas, j’ai 5 listes dont les 3 dernières avec plus de 1000 valeurs.
micka92
MembreBonsoir.
C’est parfait ! Toutefois, j’ai contraint l’utilisation de chiffres uniquement en modifiant le format du champ, et non d’après le script. Je ne vois pas où effectuer les modifications nécessaires. :bonjour:
Can somebody help me ? :priere:
micka92
MembreUn truc comme ça ferait-il l’affaire ?
Voir script de validation personnalisé du champs de saisie dans la maquette jointe.
Le nombre de caractères est paramétrable (longueur).Beaucoup de variantes sont possibles à partir de ce script:
8 caractères alphabétiques uniquement.
8 chiffresuniquement.
Avoir un minimum de chiffres, de nombres, de majuscules ou minuscules.
etc…Bonsoir.
C’est parfait ! Toutefois, j’ai contraint l’utilisation de chiffres uniquement en modifiant le format du champ, et non d’après le script. Je ne vois pas où effectuer les modifications nécessaires. :bonjour:
micka92
MembreParfois, je peux enregistrer un fichier PDF sous un format optimisé où l’on me propose de désincorporer des polices de caractères.
Dans mon exemple, les polices concernées sont qualifiées de “(Jeu partiel)” et il s’agit de celles utilisées dans la trame du modèle. Puis-je les désincorporer ?
J’ai fait le test et je ne vois pas la différence en utilisation, hormis la taille du fichier divisé par deux.
micka92
Membrethis.getField(“cc1”).checkThisBox(0,true);
this.getField(“cc2”).checkThisBox(0,true);essaye mieux comme ça, ça marche ! la syntaxe n’est pas la même que IsBoxChecked…
@+
:geek:Au top merci ! :bravo:
micka92
Membrevoilà qui t’expliquera mieux que je ne pourrais le faire !
https://developer.mozilla.org/fr/docs/Web/JavaScript/Guide/Expressions_et_Op%C3%A9rateurs
@+
:geek:Merci ! :bonjour:
Et pour mon problème juste en-dessous avec les 2 cases à cocher dont la 2ème ne se coche pas ? Tu as une idée ? :priere:
micka92
MembreEffectivement Merlin !
Ayant réussi à me creuser les méninges sans être repassé sur le forum et avoir vu ta réponse, je n’ai même pas pris la peine de comprendre que tu me proposais la même chose que j’avais déjà faite… :Ooops:
micka92
Membrebonjour,
voici comment ça devrait se présenter :
if (this.getField(“cc1”).isBoxChecked(0) & this.getField(“cc2”).isBoxChecked(0))
{…script les 2 cases cochées…”}
else
{
if (this.getField(“caseacocher1”).isBoxChecked(0))
{…script case 1 cochée…}
else
{
if (this.getField(“caseacocher2”).isBoxChecked(0))
{…script case 2 cochée…}
else
{} // rien -> aucune case cochée
}
}il n’y a pas de contraire à .isBoxChecked(0), soit = true si la case est cochée sinon = false.
@+
:bonjour:Dans mon script, j’ai utilisé && pour mon “et” au lieu de & comme toi. Y’a-t-il une différence ?
micka92
Membrebonjour,
voici comment ça devrait se présenter :
if (this.getField(“cc1”).isBoxChecked(0) & this.getField(“cc2”).isBoxChecked(0))
{…script les 2 cases cochées…”}
else
{
if (this.getField(“caseacocher1”).isBoxChecked(0))
{…script case 1 cochée…}
else
{
if (this.getField(“caseacocher2”).isBoxChecked(0))
{…script case 2 cochée…}
else
{} // rien -> aucune case cochée
}
}il n’y a pas de contraire à .isBoxChecked(0), soit = true si la case est cochée sinon = false.
@+
:bonjour:Merci !
Je ne me suis pas repassé sur le forum depuis ma question et j’avais réussi le même schéma que tu me proposes en me posant à l’ancienne avec un papier et un stylo ! :bonjour:
Toutefois, je ne comprends pas pourquoi je n’arrive pas à cocher 2 cases dans un script…
micka92
MembreJe me suis débrouillé autrement et cela fonctionne. J’ai utilisé un champ caché que je remplis d’une valeur quelconque lorsque le document est signé. Du coup, je peux gérer mon script en utilisant une condition sur le contenu de ce champ plutôt que sur la signature.
micka92
MembreJe n’arrive pas à trouver une ligne de script me permettant de vérifier si un champ est signé… :oh:
micka92
MembreOui.
micka92
Membremalgré que:Ooops: bien que… Honte à moi !
micka92
MembreÇa va à l’encontre du principe même de la signature…
:doute:Je suis d’accord avec toi Merlin mais dans le cas présent, cela n’affecte que le rédacteur. Une fois que l’approbateur a signé le document, le blocage est irréversible.
Toutefois, sur PC avec Adobe Reader, l’utilisateur peut enlever sa signature… Je ne comprends pas trop pourquoi cela est possible bien que je l’interdise.
micka92
MembreJ’ai suivi tes conseils Merlin et ayant déjà bien verrouillé le système pour que l’utilisateur ne puisse pas envoyer par mail via un bouton le formulaire non signé, j’ai mis le champ signature en lecture seule, ce qui sur PDF Expert bloque bien ce champ.
Toutefois, sur PC, l’utilisateur peut enlever sa signature… Je ne comprends pas trop pourquoi cela est possible malgré que je l’interdise. :oh:Petits bémols supplémentaires :
– PDF Expert ne tient pas compte des balises r pour les sauts à la ligne (est-ce dû au format texte brut de la messagerie iPad ?)
– PDF Expert ne gère pas l’envoi de deux mails malgré un script fonctionnel sur PCmicka92
MembreLà il faut clarifier, ou éclaircir.
Il y a 3 types de signatures utilisables dans les documents PDF, duquel est il question ?Dans tous les cas, sur le principe, un document signé, papier ou numérique, altéré après la signature ne vaut plus rien.
Et si quelqu’un bidouille un document signé, papier ou numérique, il est passible de sanctions pénales.À partir de là, quelle est ta question ?
:geek:Je ne savais pas qu’il existait plusieurs types de signatures.
J’ai simplement utiliser un champ signature pour l’utilisateur qu’il peut effacer si jamais il a une modification à apporter. Toutefois, le champ signature du destinataire final bloque définitivement tous les champs. Je suis d’accord sur le principe qu’une signature est censée être le point final du remplissage d’un formulaire mais tant que le document n’est pas dans les mains du destinataire final, l’utilisateur a la possibilité de revenir en arrière au lieu de tout recommencer.
micka92
MembreEt donc, est-ce que ça fonctionne ?
Je viens à l’instant de mettre ton script et oui cela marche parfaitement !
Merci beaucoup Merlin. :bravo:
micka92
MembreDans mon cas, la signature doit bloquer les champs afin qu’ils ne soient pas modifiés. Cependant, les utilisateurs se sont rendus compte qu’ils pouvaient supprimer leur signature pour modifier le formulaire s’ils avaient une modification à y apporter.
micka92
MembreBonjour.
this.resetForm(“liste”);
Quel script précédent ?
Bonsoir Merlin.
J’entendais par script précédent celui que j’avais écrit une ligne au-dessus :jerisjaune:
micka92
MembreEn gros, mon soucis vient du fait que je dois passer par un script quand le champ est signé au lieu de l’option “Mention lecture seule”. Résultat, il n’y a pas de retour en arrière lorsque la signature est effacé.
micka92
MembreAprès m’être cassé la tête pendant de longs moments, j’ai trouvé la raison du bug… :oh:
En fait, toutes les actions du scripts suivant la ligne
Code:this.getField(“caseacocher”).checkThisBox(0) = true;ne fonctionnaient pas. En passant cette ligne à la fin, tout fonctionne parfaitement.
Aimant comprendre le pourquoi des choses, j’aimerais que quelqu’un m’éclaire :idee:
micka92
Membre:mur:
Code:if (condition1)
{
if (condition2)
{
action1
}
else
{
action2
}
action3
}
else
{
action 4
}Je ne comprends pas pourquoi l’action 3 ne se déclenche plus depuis que j’ai intégré un deuxième “if”… :mur:
micka92
MembreCelui-ci est presque bon, il manque juste le numéro d’ordre de la case et l’égalité :
this.getField(“caseacocher”).checkThisBox(0) = true;
Merci Merlin !
micka92
MembreJe tourne en rond sur un autre point.
Je souhaite qu’un script coche une case à cocher.
J’ai pensé à utiliser
Code:this.getField(“caseacocher”).isBoxChecked(0)ou
Code:this.getField(“caseacocher”).checkThisBox(true)ou encore
Code:this.getField(“caseacocher”).value = “On”
mais rien ne fonctionne !micka92
MembreBonjour,
Effectivement, du moment que ça résout le problème !
…mais pour moi ce n’est quand même pas tout à fait la même chose : une case à cocher peut ou ne pas être obligatoire, sans être ou en étant cochée. Dans ce problème soumis, on n’utilise apparemment pas la valeur d’exportation, on vérifie juste si la case en cochée, je me trompe ??? D’ailleurs, je ne comprend pas très bien la propriété “Obligatoire” pour une case à cocher sans valeur d’exportation : soit elle est cochée, soit elle ne l’est pas !
@+:doute:
Cela a pour moi deux avantages :
– permettre à l’utilisateur du fichier de voir les cases à cocher obligatoires encadrés en rouge
– simplifier le script en contrôlant automatiquement les cases à cocher avec propriété “Obligatoire” plutôt que de créer une ligne par casemicka92
MembreDans ton script, remplace “value” par “valueAsString”, ainsi la valeur est considérée comme une simple chaine de caractères non numérique.
Merci chef ! :bonjour:
micka92
MembreJ’ai réussi à résoudre mon problème en ajoutant une condition qui vérifie si au moins une des cases à cocher a la propriété “Obligatoire”.
Si oui, rien ne se passe et je n’attribue donc aucune propriété “Obligatoire” à mes cases à cocher. Si non, je leur attribue à toutes la propriété “Obligatoire”.
J’espère que vous comprenez mon charabia… :jerisjaune:
Si oui, tant mieux ! :bonjour:
Si non, je sors :fleche:micka92
MembreCombien faire pour concaténer deux champs contenant des nombres mais en les considérant comme du texte ?
Exemple :
champ 1 = 12
champ 2 = 34Mon script actuel m’additionne les deux champs et me donne donc 46 et non 1234 comme je le souhaiterais.
6 octobre 2015 à 19:43 en réponse à : Saisie dans un champs obligatoire où les obligations ne sont plus efficaces #59296micka92
MembreAprès l’avoir utilisée, j’ai l’impression que la fonction submit ne contrôle que les champs texte obligatoires et non pas les cases à cocher…
-
AuteurRéponses