abracadabraPDF › Forums › PDF – Mobile › Compatibilité formulaire OSX et IOS
- Ce sujet est vide.
-
CréateurSujet
-
11 juin 2015 à 14:17 #45175max68Membre
Bonjour à tous
J’ai un formulaire multipages à concevoir.
ce formulaire sera presque exclusivement utilisé sur mobile.L’une de ses principales fonctions consisterait à récupérer dans un champs le résultat de la sélection d’une liste déroulante.
Une autre fonction serait de renseigner ma liste déroulante via un fichier .csv ou txt.
J’ai téléchargé des exemple de PDF avec des listes déroulantes mère/filles et des fichiers joints en .csv et txt alimentant des listes déroulantes sur ce forum.
Résultat aucun javascript de ces exemples, pourtant simples, ne fonctionnent sur mobile (contrairement à mon mac où tout fonctionne très bien)
Ma question est la suivante :
Ce que je cherche, en particulier la première fonction (tant pis pour les listes en .csv) peut-elle être fonctionnelle sur un mobile sachant qu’elle semble être relativement simple ?Merci pour votre aide.
Cordialement.
-
CréateurSujet
-
AuteurRéponses
-
11 juin 2015 à 18:04 #59112MerlinMaître des clés
Bonjour et bienvenue.
Sur mobile il faut tester avec PDF Expert (iOS) ou avec ezPDF Reader (Android), ce sont les logiciels les plus performants sur mobiles, mais pas gratuits…
:idee:
11 juin 2015 à 19:01 #59113max68MembreMerci Merlin pour ta réponse.
J’ai PDF Expert et les fichiers (créés par Alex, entre autre, donc plutôt optimisés) ne fonctionnent pas.
Je voudrais tester ma fonction évoquée ici mais je n’ai aucune notion de Javascript.
En fait, si je sélectionne dans une liste déroulante le mot hêtre j’aimerais qu’il vienne se mettre dans un champ spécifique sur une autre page.
Quelqu’un peut-il m’aider en me proposant un exemple simple de ce type pour que je le teste voir si sa fonctionne afin que je sache si j’abandonne ou pas ce projet.
Merci à tous pour votre aide.
13 juin 2015 à 09:36 #59114MerlinMaître des clésEnjoy.
:Smiley15:
13 juin 2015 à 09:39 #59115MerlinMaître des clésPS : merci de saisir les messages directement dans le champ de saisie du forum, ou bien de faire des copier-coller “texte seul”, pour m’éviter d’avoir à nettoyer toutes ces balises inutiles.
:Smiley03:14 juin 2015 à 10:06 #59116max68MembreMerci beaucoup Merlin pour le coup de main : très appréciable :Smiley01: et désolé pour les balises.
Je constate que ça fonctionne très bien avec PDF expert mais pas sur reader ce qui est un comble.
Sans trop de surprises d’ailleurs car j’ai lu ça et là cette invraisemblance de la par d’Adobe…Pour revenir à mon projet :
Est-ce que d’après toi il est possible de faire la même chose (récupérer la valeur d’un champ dans un autre champ) mais en remplissant ces champs dans un ordre précis : je m’explique.J’ai X listes déroulantes. Dans mon flux de travail toutes ne seront pas utilisées. Je souhaite donc faire une synthèse, dans une autre page, des infos qui ont été sélectionnées dans ces listes (plus pratique à consulter que de vérifier 50 listes par exemple).
Ma première idée était de laisser des champs vides qui viendront se remplir en fonction des sélections des listes.
Problème : j’aurai une succession de champs alternativement vides et remplis, donc pas lisible et pratique du tout (je viens de m’en rendre compte :Smiley11: )
D’où mon idée : Ma première liste déroulante (LR, plus simple) est validée > elle va remplir le premier champ libre.
Ma Xième LR est validée, le script comprend que le premier champ est plein et va reporter la valeur de la liste dans le champ suivant qui est libre, etc.• Peut-être qu’une autre solution serrait de concaténer les différentes sélection de listes dans un champ texte ?
J’espère avoir été clair.
Si j’arrive à faire avaler ça au moins à PDF expert, je serai un homme heureux et mon projet pourra aboutir. :geek:
Merci de votre soutien.
14 juin 2015 à 12:52 #59117MerlinMaître des clésJe constate que ça fonctionne très bien avec PDF expert mais pas sur reader ce qui est un comble.
Sans trop de surprises d’ailleurs car j’ai lu ça et là cette invraisemblance de la par d’Adobe…Adobe Reader Mobile n’existe plus, il a été remplacé par Acrobat DC (pour mobile).
==> Mise-à-jour.Adobe est très soucieux de sécurité, contrairement à Apple (iOS) et Google (Android) :
– les fonctions JavaScripts qui peuvent être exploitées via le système ou celles qui peuvent exploiter le système ne sont pas implémentées.
– les fonctions JavaScripts sont implémentées au compte-goutte après avoir été soigneusement testées sur les deux OS.
– Adobe veut pouvoir proposer le même logiciel sur Android et iOS : ce qui ne fonctionne pas sur l’un n’est pas implémenté sur l’autre.Tous les éditeurs ne peuvent pas en dire autant, mais tous n’ont pas la même clientèle ni le même modèle économique.
Peut-être qu’une autre solution serrait de concaténer les différentes sélection de listes dans un champ texte ?
Recherche “concaténation” dans le forum.
:Smiley03:14 juin 2015 à 17:48 #59118max68MembreOK Merlin, j’ignorais quel était l’origine de ce problème javascript sur mobile. Merci pour l’info. (J’ai acrobat DC)
Patience, donc, de notre part.Penses-tu que je puisse mettre en place ce que j’évoquais avant (détection du champ plein et passage au suivant ) ?
Est-ce que la concaténation est gérée sur iOS ?
Je commence tout juste à mettre les mains dans JS et je transpire beaucoup, beaucoup, beaucoup… :Euuuh: :oh: :priere:14 juin 2015 à 22:37 #59119MerlinMaître des clésTu as de la chance, je viens de recroiser ça par hasard :
Ce script concatène les valeurs de plusieurs champs dans un seul.
Les noms en capitales et entre guillemets doivent être remplacés par les noms des champs texte qui contiennent les valeurs (ne pas supprimer les guillemets).Code:// initialisation des variables
var nom=this.getField(“NOM”);
var prenom=this.getField(“PRENOM”);
var adress=this.getField(“RUE”);
var CP=this.getField(“CODEPOSTAL”);
var comune=this.getField(“COMMUNE”);
var adressFinale=this.getField(“ADRESSE-COMPLÈTE”);
// vérifie si les champs sont vides (facultatif)
if (nom.value == “”)
{
app.beep(0);
app.alert(“Le champ «nom» est vide!”);
}
else if (adress.value == “”)
{
app.beep(0);
app.alert(“Le champ «adresse» est vide!”);
}
else if (CP.value == “”)
{
app.beep(0);
app.alert(“Le champ «code postal» est vide!”);
}
else if (comune.value == “”)
{
app.beep(0);
app.alert(“Le champ «commune» est vide!”);
}
// concaténation dans le champ d’accueil
// antislash-r sert à sauter une ligne
adressFinale.value = “rr” + nom.value + ” ” + prenom.value + “r” + adress.value + “r” + CP.value + ” ” + comune.value;:Smiley15:
14 juin 2015 à 22:38 #59120MerlinMaître des clésEst-ce que la concaténation est gérée sur iOS ?
Aucune idée.
:joker:Mais on compte sur toi pour la réponse. :Smiley03:
15 juin 2015 à 09:15 #59121max68MembreOOHH qu’il est beau le code :Smiley08:
Quand je vois ça, j’ai l’impression d’être tout nu dans une rue de Pekin aux heures de pointe… :priere: :bonjour:Bon, je teste pour vérifier si ça fonctionne sur IOS et je reviens vers toi
Merci :Smiley01:15 juin 2015 à 16:55 #59122max68MembreJe suppose que le code doit venir dans le champ sensé récupérer la concaténation mais dans quelle partie des options dois-je le mettre : format, validation ou calcul ?
15 juin 2015 à 21:54 #59123MerlinMaître des clésJe suppose que le code doit venir dans le champ sensé récupérer la concaténation
Oui.
dans quelle partie des options dois-je le mettre : format, validation ou calcul ?
Réponse longue : http://abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/lordre-dexecution-des-evenements-dans-les-champs-de-formulaire-pdf/
Réponse courte : Calcul
:Smiley15:
16 juin 2015 à 16:33 #59124max68MembreBon ben me revoilà.
Je sèche complètement. J’ai fais un test simple avec 2 listes est un champ de concaténation.
J’ai modifié le code que tu m’as donné Merlin en le simplifiant pour l’adapter à mon test.
Le code est le suivant :
Code:// initialisation des variables
var arbres=this.getField(“arbres”);
var fleurs=this.getField(“fleurs”);
// vérifie si les champs sont vides (facultatif)
if (arbres.value == “”)
{
app.beep(0);
app.alert(“Le champ «arbres» est vide!”);
}
else if (fleurs.value == “”)
{
app.beep(0);
app.alert(“Le champ «fleurs» est vide!”);
}
// concaténation dans le champ d’accueil
// antislash-r sert à sauter une ligne
adressFinale.value = “rr” + nom.value + ” ” + prenom.value + “r” + adress.value + “r” + CP.value + ” ” + comune.value;Rien ne s’ajoute dans mon champ texte.
Si je trouve la solution il faudrait que je puisse mettre les mots séparés par des retours paragraphes, je ne sais pas si c’est faisable.
Je joins le fichier si ça peut être utile. Merci de votre aide.
16 juin 2015 à 22:28 #59125MerlinMaître des clésRien ne s’ajoute dans mon champ texte.
Forcément, si tu changes le nom des variables au début et pas à la fin… :tutut:
Si je trouve la solution il faudrait que je puisse mettre les mots séparés par des retours paragraphes, je ne sais pas si c’est faisable.
A quoi sert il que je commente les scripts ? :Smiley03:
// antislash-r sert à sauter une ligneJe joins le fichier si ça peut être utile.
Ci-joint la preuve que oui. :geek:
Code:// initialisation des variables
var arbres=this.getField(“arbres”).value;
var fleurs=this.getField(“fleurs”).value;
// concaténation dans le champ d’accueil
// antislash-r sert à sauter une ligne
this.getField(“Text1”).value = arbres + “r” + fleurs;17 juin 2015 à 09:04 #59126max68MembreVraiment merci Merlin pour ton aide, j’apprécie beaucoup
Je te confirme donc que la concaténation fonctionne sur IOS mais uniquement avec PDF expert.
J’ai une autre question qui découle de je que je constate :
Je vais avoir environ une trentaine de LD réparties sur plusieurs pages. A priori l’ordre dans lequel le nom des LD est écrit dans le script défini l’ordre d’inscription dans le champ de concaténation.
Mon souci est que je vais avoir des lignes vides car toutes mes LD ne seront pas forcément renseignées (tout dépend de ce que j’observerai sur le terrain).
Existe-t-il un moyen de ne concaténer que les champs renseignés et qu’ils viennent se mettre les uns au dessous des autres (qqsoit le nombre de LD vides entre chaque).D’ailleurs à ce sujet comment rendre un champ vide autrement qu’avec un espace ? Acrobat considère t-il l’espace comme rien (je ne pense pas).
Peut-être une case à cocher devant la LD qui rendrait la LD “active” et donc prise en compte par le script de concaténation ? j’avoue que je n’ai aucune idée de la faisabilité de la chose.
17 juin 2015 à 09:28 #59127MerlinMaître des clésA priori l’ordre dans lequel le nom des LD est écrit dans le script défini l’ordre d’inscription dans le champ de concaténation
C’est l’ordre dans lequel on les place avec le script (dernière ligne) qui détermine leur position dans le champ de concaténation.
Mon souci est que je vais avoir des lignes vides car toutes mes LD ne seront pas forcément renseignées
C’est simple, au lieu d’ajouter les sauts de ligne en dur dans le script, on ne les ajoute à la valeur du champ que si celui-ci contient une valeur.
Ainsi un champ vide = pas de ligne du tout.Par exemple :
Code:// initialisation des variables
if (this.getField(“arbres”).value != null || this.getField(“arbres”).value != “”)
{var ChampArbres = this.getField(“arbres”).value + “r”;}
else {var ChampArbres = “”;}
//
if (this.getField(“fleurs”).value != null || this.getField(“arbres”).value != “”)
{var ChampFleurs = this.getField(“fleurs”).value + “r”;}
else {var ChampFleurs = “”;}
//
// concaténation dans le champ d’accueil
this.getField(“Text1”).value = ChampArbres + ChampFleurs;PS : ce n’est pas une bonne idée d’utiliser les mêmes noms pour des champs, des variables, etc.
17 juin 2015 à 12:17 #59128max68MembreMais comment acrobat considère-t-il un champ vide ? :oh:
je n’ai pas trouvé sur le forum.
Lorsque je crée une liste je n’ai aucun moyen de définir un élément de la liste comme vide sauf en insérant un espace.
Mais avec cette solution le champ semble vide mais il ne l’est pas (sauf si Acrobat ne considère pas les espaces comme des caractères et les ignore).17 juin 2015 à 12:33 #59129max68MembreJe viens de tester le script que tu as modifié mais ça ne fonctionne pas chez moi. :doute:
J’ai vu que tu as changé le nom des variables, ce que je ferai désormais.
Mais lorsque je supprime les données de la première liste, la valeur concaténée de la seconde reste à sa place et ne remonte pas ce qui devrait être le cas. :Smiley11:17 juin 2015 à 16:19 #59130MerlinMaître des clésMais comment acrobat considère-t-il un champ vide ?
Lorsque je crée une liste je n’ai aucun moyen de définir un élément de la liste comme vide sauf en insérant un espace.C’est effectivement le seul moyen pour les listes déroulantes.
Depuis le début je pensais “champ texte”, qui peuvent être vraiment vides.Mais avec cette solution le champ semble vide mais il ne l’est pas
Oui, vider l’intitulé d’une liste de modifie pas (forcément) sa valeur.
Le mieux est d’interdire la saisie utilisateur et de prévoir un intitulé vide.Exemple ci-joint.
Code:// initialisation des variables
if (this.getField(“arbres”).value != ” “)
{var ChampArbres = this.getField(“arbres”).value + “r”;}
else {var ChampArbres = “”;}
//
if (this.getField(“fleurs”).value != ” “)
{var ChampFleurs = this.getField(“fleurs”).value + “r”;}
else {var ChampFleurs = “”;}
//
if (this.getField(“couleurs”).value != ” “)
{var ChampCouleurs = this.getField(“couleurs”).value + “r”;}
else {var ChampCouleurs = “”;}
//
// concaténation dans le champ d’accueil
this.getField(“Text1”).value = ChampArbres + ChampFleurs + ChampCouleurs;19 juin 2015 à 08:59 #59131max68MembreMerci encore pour ton aide précieuse Merlin. En effet tout fonctionne comme je le souhaitais. :soleil:
Ceci m’amène à demander si vous connaissez une formation video très didactique pour débutant autour du javascript et qui serait particulièrement adaptée à Acrobat. J’ai cru comprendre que le JS d’Acrobat comporte des particularités qui le rend légèrement différent du standard. Il y en as pas mal sur le marché (elephorm, tuto.com, videobrain, etc). et je ne sais pas laquelle serait le plus adaptée. Vu mon niveau ce ne serait pas du luxe.
Sinon dernier point qui me pose problème :
J’ai un certain nombre de cases à cocher réparties sur plusieurs pages de mon PDF et qui signalent un même évènement.
Toujours dans ma page de synthèse, je souhaite cocher automatiquement la case TULIPE si au moins une autre case TULIPE est cochée dans mon PDF.
Si aucune case n’est cochée, rien ne se passe mais si au moins une case est cochée la case se trouvant en page synthèse se coche.
Sur le site j’ai trouvé une piste qui s’en approche mais je n’ai aucune idée de la syntaxe exact comme de l’endroit où insérer le code. :Ooops:
ex.:
La formule magique c’est :
this.getField(“MaCaseAcocher”).checkThisBox(0,true);Merci encore de votre aide (mention spéciale pour Merlin :Smiley01: )
PS : Juste un détail. J’ai besoin de laisser la possibilité de saisir des infos par l’utilisateur final. Est-il possible d’insérer automatiquement un espace si l’utilisateur supprime tout dans le champ (y compris l’espace indispensable pour que le texte concaténé remonte correctement) ?
19 juin 2015 à 14:23 #59132MerlinMaître des clésJe ne connais pas de formation en vidéo bien adaptée, à part celles de Thom Parker : http://www.pdfscripting.com/
Son Livre All About Stamps in Acrobat® and Paperless Workflows est LA référence en matière de tampons dynamiques.
Ses ressources et tutos gratuits valent le détour : http://www.pdfscripting.com/public/Free-Content.cfm
Sans oublier tout ce qu’il propose sur le site de sa société (beaucoup de gratuit) : http://www.windjack.com/resources/rsc_javascript.shtmlIl y a aussi les œuvres de John Deuber, à commencer par Beginning JavaScript for Adobe Acrobat : http://www.acumentraining.com/QEDGuides/index.html
Et aussi ses ressources gratuites : http://www.acumentraining.com/resources.html
Sans oublier son Acumen journal : http://www.acumentraining.com/acumenjournal.htmlPar-contre Elephorm etc. proposent d’excellentes vidéo-formations à l’anglais…
:Smiley03:19 juin 2015 à 14:52 #59133MerlinMaître des clésPS : Juste un détail. J’ai besoin de laisser la possibilité de saisir des infos par l’utilisateur final. Est-il possible d’insérer automatiquement un espace si l’utilisateur supprime tout dans le champ (y compris l’espace indispensable pour que le texte concaténé remonte correctement) ?
Il serait plus simple de laisser vide et de détecter “espace” ou “vide”, en modifiant les conditions “if” :
Code:// initialisation des variables
if (this.getField(“arbres”).value != ” ” || this.getField(“arbres”).value != “”)
{var ChampArbres = this.getField(“arbres”).value + “r”;}
else {var ChampArbres = “”;}
//
if (this.getField(“fleurs”).value != ” ” || this.getField(“fleurs”).value != “”)
{var ChampFleurs = this.getField(“fleurs”).value + “r”;}
else {var ChampFleurs = “”;}
//
if (this.getField(“couleurs”).value != ” ” || this.getField(“couleurs”).value != “”)
{var ChampCouleurs = this.getField(“couleurs”).value + “r”;}
else {var ChampCouleurs = “”;}
//
// concaténation dans le champ d’accueil
this.getField(“Text1”).value = ChampArbres + ChampFleurs + ChampCouleurs;:Smiley01:
20 juin 2015 à 06:16 #59134max68MembreJe viens d’insérer le script en lieu et place du précédent et ça ne fonctionne plus. la concaténation génère à nouveau des espaces au lieu de remonter le texte (voir exemple fichier ci-joint) :Smiley05: .
22 juin 2015 à 06:51 #59135max68MembreMerci pour les réf. vidéo Merlin. Comme mon anglais est approximatif je vais regarder vers ce qui existe en français.
Si toi ou quelqu’un d’autre peux m’aider sur mes dernières questions je suis preneur. :priere:
22 juin 2015 à 09:25 #59136MerlinMaître des clésJe viens d’insérer le script en lieu et place du précédent et ça ne fonctionne plus. la concaténation génère à nouveau des espaces au lieu de remonter le texte (voir exemple fichier ci-joint) :Smiley05: .
Quelques petits changements dans la formule magique et on n’y pense plus.
:Smiley15:Code:// initialisation des variables
if (this.getField(“arbres”).value == “”) {this.getField(“arbres”).value = ” “;}
if (this.getField(“arbres”).value != ” “)
{var ChampArbres = this.getField(“arbres”).value + “r”;}
else {var ChampArbres = “”;}
//
if (this.getField(“fleurs”).value == “”) {this.getField(“fleurs”).value = ” “;}
if (this.getField(“fleurs”).value != ” “)
{var ChampFleurs = this.getField(“fleurs”).value + “r”;}
else {var ChampFleurs = “”;}
//
if (this.getField(“couleurs”).value == “”) {this.getField(“couleurs”).value = ” “;}
if (this.getField(“couleurs”).value != ” “)
{var ChampCouleurs = this.getField(“couleurs”).value + “r”;}
else {var ChampCouleurs = “”;}
//
// concaténation dans le champ d’accueil
this.getField(“Text1”).value = ChampArbres + ChampFleurs + ChampCouleurs;22 juin 2015 à 09:43 #59137max68MembreJe pense ne pas avoir été clair dans ma demande. Désolé, car ça ne marche toujours pas :Smiley11:
Par sécurité, je voulais que, si j’autorise l’utilisateur à saisir du texte dans ma LD et que celui-ci supprime pour X raisons, même l’espace (donc strictement plus rien dans le champ) mon texte concaténé devra se comporter toujours de la même façon : que le champ totalement vide ne soit pas pris en compte et que les résultats s’ajoutent les uns aux autres comme dans le fichier ci-joint (doc-test-formulaire-concatenation-okv3.pdf).
Dans le second fichier joint (doc-test-formulaire-concatenation-okv6.pdf) j’ai insérer ton dernier code Merlin, sans succès. J’ai dû rater qq chose.
22 juin 2015 à 11:02 #59138MerlinMaître des clésDans le second fichier joint (doc-test-formulaire-concatenation-okv6.pdf) j’ai insérer ton dernier code Merlin, sans succès. J’ai dû rater qq chose.
Pourquoi n’utilises tu pas le fichier doc-test-formulaire-concatenation-okv6.pdf que j’ai fourni ci-dessus et qui fonctionne très bien ?
Le script de ton document n’est pas le même.
:Euuuh: :idee:22 juin 2015 à 13:57 #59139max68MembreJ’ai pas vu le fichier :siffle: Suis confus :Ooops:
Sur ton fichier v6, chez moi, je n’ai pas la possibilité de saisir du texte dans un champ liste.
Or c’est précisément ce que je veux pouvoir faire en permettant à acrobat de concaténer proprement comme sur la version 3 du fichier.
Mon souci est de prévenir la suppression accidentelle de la totalité du champ liste (y compris l’espace qui laisse apparaitre le champ comme vide).
Dans ton fichier v6, si j’active la saisie par l’utilisateur et que je supprime tout le contenu du champ, la dernière valeur de ce champ reste concaténée, ce que je ne veux pas. Ci-joint le v6 avec l’activation de la saisie. Peut être que son comportement sera différent chez toi.
Merci22 juin 2015 à 16:23 #59140MerlinMaître des clésEn fait ça doit fonctionner chez toi aussi, mais quand on change la valeur d’un item dans une liste déroulante la valeur n’est pas validée instantanément, il faut activer un autre menu pour que ça le fasse.
Je t’accorde que c’est un fonctionnement un peu déconcertant mais je ne vois pas le moyen de forcer encore plus la validation immédiate d’une saisie utilisateur dans la mesure où la case correspondante est déjà cochée dans Propriétés : Options.
:joker:
23 juin 2015 à 15:26 #59141max68MembreJe vais laisser les choses en l’état. C’est pas la fin du monde. Merci pour ton aide Merlin :Smiley03:
23 juin 2015 à 16:24 #59142MerlinMaître des clés:bonjour:
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.