Donnez vie à vos documents numériques !
 

Compatibilité formulaire OSX et IOS

abracadabraPDF Forums PDF – Mobile Compatibilité formulaire OSX et IOS

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #45175
    max68
    Membre

    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.

Affichage de 31 réponses de 1 à 31 (sur un total de 31)
  • Auteur
    Réponses
  • #59112
    Merlin
    Maî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:

    #59113
    max68
    Membre

    Merci 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.

    #59114
    Merlin
    Maître des clés

    Enjoy.

    :Smiley15:

    #59115
    Merlin
    Maître des clés

    PS : 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:

    #59116
    max68
    Membre

    Merci 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.

    #59117
    Merlin
    Maître des clés

    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…

    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:

    #59118
    max68
    Membre

    OK 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:

    #59119
    Merlin
    Maître des clés

    Tu 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:

    #59120
    Merlin
    Maître des clés

    Est-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:

    #59121
    max68
    Membre

    OOHH 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:

    #59122
    max68
    Membre

    Je 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 ?

    #59123
    Merlin
    Maître des clés

    Je 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:

    #59124
    max68
    Membre

    Bon 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.

    #59125
    Merlin
    Maître des clés

    Rien 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 ligne

    Je 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;
    #59126
    max68
    Membre

    Vraiment 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.

    #59127
    Merlin
    Maître des clés

    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

    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.

    #59128
    max68
    Membre

    Mais 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).

    #59129
    max68
    Membre

    Je 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:

    #59130
    Merlin
    Maître des clés

    Mais 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;
    #59131
    max68
    Membre

    Merci 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) ?

    #59132
    Merlin
    Maître des clés

    Je 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.shtml

    Il 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.html

    Par-contre Elephorm etc. proposent d’excellentes vidéo-formations à l’anglais…
    :Smiley03:

    #59133
    Merlin
    Maître des clés

    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) ?

    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:

    #59134
    max68
    Membre

    Je 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: .

    #59135
    max68
    Membre

    Merci 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:

    #59136
    Merlin
    Maître des clés

    Je 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;
    #59137
    max68
    Membre

    Je 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.

    #59138
    Merlin
    Maître des clés

    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.

    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:

    #59139
    max68
    Membre

    J’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.
    Merci

    #59140
    Merlin
    Maître des clés

    En 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:

    #59141
    max68
    Membre

    Je vais laisser les choses en l’état. C’est pas la fin du monde. Merci pour ton aide Merlin  :Smiley03:

    #59142
    Merlin
    Maître des clés

    :bonjour:

Affichage de 31 réponses de 1 à 31 (sur un total de 31)
  • Vous devez être connecté pour répondre à ce sujet.