Donnez vie à vos documents numériques !
 

Remplissage de champs en fonction d’un choix dans une liste déroulante

abracadabraPDF Forums PDF – Général Remplissage de champs en fonction d’un choix dans une liste déroulante

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #46459
    ARKED
    Participant

    Bonjour,

    Je tente de créer une fonction de remplissage d’adresse automatique en fonction d’un choix fait dans une liste déroulante.
    Mon fichier comporte en pièce jointe un doc Excel type CSV avec en-têtes de colonnes.
    (pour faire simple j’ai mis une photo de ma base de données sur le PDF)

    A l’ouverture de mon fichier, un petit script d’initialisation:

    Code:
    //function init()
    //{
    var donneesCSV=this.getDataObjectContents(“data.csv”);
    var lesDonnees=util.stringFromStream(donneesCSV);
    var laChaine=lesDonnees.split(“;”);
    //}

    Une liste déroulante contient le nom des sites (ici L1,L2,L3…)
    Et je souhaite que mes 5 champs se remplissent en fonction du choix fait dans la liste précédente…
    Ça fonctionne presque…..  J’ai l’impression qu’il y a un problème de séparation par le “;” à chaque fin de ligne de donnée.

    Si quelqu’un comprend pourquoi je suis preneur.

Affichage de 10 réponses de 1 à 10 (sur un total de 10)
  • Auteur
    Réponses
  • #68351
    Merlin
    Maître des clés

    Bonjour

    Le problème de base c’est que tu utilises un script de calcul dans chaque champ cible pour “tirer” chaque valeur dans chaque champ.
    La bonne méthode c’est d’utiliser un seul script de format dans la liste déroulante pour “pousser” les valeurs dans tous les champs cibles.

    #68352
    ARKED
    Participant

    :Euuuh: Je ne comprends pas vraiment la différence mais j’ai testé…..
    Suppression des calculs dans chaque champs et ajout du script “format” de la liste:

    var choix = this.getField(“MYLIST”).currentValueIndices;

    this.getField(“Champ.0”).value = laChaine[(choix * 5)];
    this.getField(“Champ.1”).value = laChaine[(choix * 5)+1];
    this.getField(“Champ.2”).value = laChaine[(choix * 5)+2];
    this.getField(“Champ.3”).value = laChaine[(choix * 5)+3];
    this.getField(“Champ.4”).value = laChaine[(choix * 5)+4]

    Et j’obtiens le même résultat… :oh:
    Le truc c’est que quand j’examine la chine issue de mon tableau de données, je remarque bien qu’entre la dernière donnée d’une ligne et la première donnée de la ligne suivante je n’ai pas le “;” donc pour le système, ces deux données n’en font qu’une…..

    Ci dessous ma chaîne de données telle qu’extraite du fichier csv:
    Nom;Prenom;adresse;telephone;e-mail 1NO;1P;1A;1T;1E 2N;2P;2A;2T;2E 3N;3P;3A;3T;3E 4N;4P;4A;4T;4E

    #68353
    Merlin
    Maître des clés

    bebarth est bien plus fort que moi en tableau, array, split, etc. Il t’expliquera surement mieux que moi, parce-que ce que je ne comprend pas c’est pourquoi le script (init) découpe les colonnes (sur le point-virgule) avant de découper les rangées (sur le saut de ligne). Ou alors j’ai raté quelque chose.
    Le script init devrait plutôt ressembler à ça, et ensuite il faudrait découper les rangées :

    var donneesCSV=this.getDataObjectContents(“data.csv”);
    var lesDonnees=util.stringFromStream(donneesCSV);
    var laChaine=lesDonnees.split(“n“);

    #68354
    bebarth
    Maître des clés

    bonjour,


    var laChaine=lesDonnees.split(“n
    “);

    Ça change en fonction des options d’enregistrement du fichier .csv, ici les sauts de lignes sont interprétés par “rn”.
    Lorsque le script ne fonctionne pas, il faut vérifier les caractères des 2 premières lignes et on trouve le/les caractères de saut de ligne (r -> code ascii 13 ou n -> code ascii 10 ou rn).
    Dans ton exemple, si tu rajoutes une ligne de script :

    Code:
    for (var i=0; i<40; i++) console.println(i+" : "+donnees.charCodeAt(i)); // pour vérifier les 41 premiers caractères de la chaine "donnees"

    Tu trouves :
    35 : 13
    36 : 10
    Le retour lignes est donc “rn”.
    @+
    :bonjour:

    #68355
    ARKED
    Participant

    Bonjour,
    Je vais regarder et essayer ça… j’avais solutionné mon problème en ajoutant un espace dans la dernière cellule de chaque ligne, mais ça fait un peu bricolage… :jerisjaune:
    Par contre je ne comprends pas pourquoi, dans mon fichier final, les mots comportant des lettres accentuées dans le fichier CSV sont importés dans mon formulaire mais sans la lettre accentuée… ex: “12 Allée des fougères” dans le CSV devient “12 Alle des Fougres” dans le formulaire….? :Euuuh:

    Autre question, est il possible d’importer des données depuis un fichier CSV qui ne serait pas en pièce jointe de mon PDF, mais stocké sur le disque dur de l’ordi….?

    #68356
    ARKED
    Participant

    Bonjour,

    Est il possible d’importer des données depuis un fichier CSV qui ne serait pas en pièce jointe de mon PDF, mais stocké sur le disque dur de l’ordi….?
    J’ai beau chercher je ne suis pas sur que ce soit possible….

    #68357
    Merlin
    Maître des clés

    C’est possible à condition d’utiliser un script d’application et à condition que le fichier CSV ne soit jamais déplacé ni renommé, sinon on ne peut qu’ouvrir la boite de dialogue de sélection du fichier à importer.

    #68358
    bebarth
    Maître des clés

    bonjour,

    Par contre je ne comprends pas pourquoi, dans mon fichier final, les mots comportant des lettres accentuées dans le fichier CSV sont importés dans mon formulaire mais sans la lettre accentuée… ex: “12 Allée des fougères” dans le CSV devient “12 Alle des Fougres” dans le formulaire….? :Euuuh:

    Pour conserver les caractères accentués, il faut que ton fichier soit codé en UTF-8.
    Si tu utilises Excel, il vaut mieux utiliser le format proposé “CSV UTF-8 (délimité par des virgules) (.csv)”. Par contre, dans ton script il faudra couper les chaînes de caractères aux virgules et non aux points-virgules !
    @+
    :bonjour:

    #68359
    ARKED
    Participant

    Bonjour,
    Merci pour l’info Bebarth… J’ai voulu faire un essai, sauf que je n’ai pas ce format de fichier sous Excel (2016) Voir fichier joint…
    En attendant j’ai remplacé les lettres avec accent par des lettres sans accent dans mon fichier CVS…..  ça me laisse le temps de chercher….. :Euuuh:

    #68360
    Merlin
    Maître des clés

    Sur Windows Excel et Acrobat utilisent le même encodage.
    Excel permet d’exporter directement un fichier texte avec des TAB comme séparateurs, l’intitulé change selon les versions mais ça se trouve.
    Ensuite on peut utiliser le suffixe qu’on veut (.txt ou .csv ou .tsv ou .toto) de toute façon c’est un fichier TXT et Acrobat ne tient pas compte du suffixe, le contenu attendu étant réputé être au format TXT.

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