Donnez vie à vos documents numériques !
 

Convertir/exporter les données du formulaire PDF vers CSV

abracadabraPDF Forums PDF – Général Convertir/exporter les données du formulaire PDF vers CSV

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #46013
    iRaJaaa
    Membre

    Bonjour,

    Suite à la consultation de nombreux sujets présents dans ce forum, j’ai réussi à construire un formulaire PDF selon mes besoins, merci à tous.

    Cependant, j’ai un besoin que je n’arrive pas réellement à résoudre. En effet, je souhaite “convertir/exporter” mes données vers un autre format (CSV). Il n’y a aucun problème, j’arrive à le faire de manière manuelle (grâce aux actions dans les menus), et également grâce à un bouton, où j’implémente un script Javascript que j’ai récupéré sur ce forum.

    Mon besoin étant, que je ne souhaite pas passer par un bouton dans le formulaire pour convertir, mais par un script (de manière générale), qui puisse réaliser la même action. L’idée ensuite est de pouvoir appliquer ce script à des formulaires PDF qui seront complétés dans le temps, afin de traiter les données sous un format adapté.

    Bonne journée!

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

    Bonjour et bienvenue.

    Bonne nouvelle, il n’y a pas besoin de script ni d’action ni de bouton.
    Cette fonction existe d’origine dans Acrobat Pro, c’est un jeu d’enfant.
    Un dessin vaut mieux qu’un long discours :
    :Smiley15:

    #65297
    iRaJaaa
    Membre

    Merci pour ta réponse.

    Cependant, lorsque je disais que “j’arrive à le faire de manière manuelle (grâce aux actions dans les menus)” c’était justement cette action que tu as décrite dans l’image, mais également l’action “Autres option de formulaire > Extraire les données “.

    Ce que je souhaite réaliser, c’est un script (peu importe le langage à vrai dire), qui réalise cette action justement, et que cela soit transparent pour l’utilisateur afin que le nouveau fichier sous un nouveau format soit créer automatiquement, afin de pouvoir traiter les données de ce dernier (il est même intéressant que ce nouveau fichier ne soit que temporaire).

    #65298
    Merlin
    Maître des clés

    Je crois que les “Actions” et les “Commandes personnalisées” d’Acrobat ont été faites pour toi.
    Elles permettent d’enchainer un ensemble de commandes, avec à chaque étape la possibilité de laisser l’utilisateur choisir (par exemple des fichiers ou un texte à saisir).
    La différence entre les deux est assez subtile (c’est certainement pour ça que tout est dans le même panneau), tu verras bien à l’usage.

    Une capture d’écran vaut mieux qu’un long discours :

    #65299
    iRaJaaa
    Membre

    Bonjour,

    Je me permet de relancer le post afin de le mettre à jour. En effet, j’ai ajusté le JavaScript présent sur le forum qui permet de convertir le contenu des champs de mon formulaire PDF en un fichier CSV (ce même fichier CSV est joint automatiquement à mon PDF).

    L’objectif de ce fichier CSV est de pouvoir importer le contenu de ses données dans une solution Web. Je me suis arrangé pour que les champs du fichier CSV et de la solution web correspondent. Ceci fonctionne parfaitement avec une ligne de commande propre à la solution web.

    Ma nouvelle problématique est de pouvoir importer dans les champs de mon PDF les données extraient de la solution Web (format CSV). La solution qui me vient à l’esprit, est de joindre le fichier CSV (suite à l’extraction des données) en tant que pièce jointe au formulaire PDF, et grâce à une ligne de commande ou un JavaScript Document, de pouvoir mettre à jour les champs de mon PDF via la pièce jointe.

    Toutes les étapes doivent se faire de manière transparente pour l’utilisateur, il ne devra pas cliquer sur un bouton pour réaliser tel ou tel actions.

    J’ai vu également que les formats d’import de données possible (manuelle dans les menu déroulant) est FDF, XFDF,txt,XML.

    Pour extraire ou attacher une pièce jointe à mon formulaire PDF, j’utilise un outil Linux “xpdf” ou “pdftk”.

    #65300
    Merlin
    Maître des clés

    Je ne suis pas certain de bien suivre.  :Euuuh:

    Pour remplir un PDF avec les données en pièces jointes sans intervention de l’utilisateur il faut utiliser un script qui se déclenche à l’ouverture du document.
    Mais si à l’ouverture il faut remplir toujours le même document avec toujours les mêmes données en pièces jointes, pourquoi ne pas le préremplir directement ? (Ce qui devrait être plus simple)

    #65301
    iRaJaaa
    Membre

    Quel étape as-tu du mal à comprendre ?

    Oui c’est ce à quoi j’ai pensé également, de réaliser un script document à l’ouverture, en spécifiant la pièce jointe dans le code.

    Il ne s’agit pas toujours des mêmes données qui seront extraite via la solution web. Pas exemple, la description, le titre, le numéro de référence changeront en fonction des formulaires…

    Pour travailler sur un formulaire PDF, tu utilises seulement du Javascript, ou bien tu utilises d’autre langages de programmation/outil externe pour manipuler le PDF (comme les outils Linux cité précédemment)?

    #65302
    Merlin
    Maître des clés

    Quel étape as-tu du mal à comprendre ?

    Si à l’ouverture il faut remplir le document avec toujours les mêmes données en pièces jointes (un remplissage automatique ne pourra pas choisir entre plusieurs), pourquoi ne pas le préremplir directement ?

    Je n’utilise que JavaScript dans les PDF.

    #65303
    iRaJaaa
    Membre

    Les données ne seront pas les mêmes en fonction des pièces jointes (les champs seront les mêmes, mais le contenu de celles-ci seront différentes).
    Par exemple :

    PDF 1 -> Pièce jointe 1 (avec données 1)
    PDF 2 -> Pièce jointe 2 (avec données 2)

    Quand tu parles de “pré-remplir directement”, tu parles d’un pré-remplissage manuel de l’utilisateur ou automatique via un script document ? Il s’agit d’un pré-remplissage automatique que je souhaite mettre en place.

    #65304
    Merlin
    Maître des clés

    Quand tu parles de “pré-remplir directement”, tu parles d’un pré-remplissage manuel de l’utilisateur ou automatique via un script document ?

    Ni l’un ni l’autre.
    S’il y a beaucoup de documents à générer il vaut mieux oublier Acrobat.

    Il existe des utilitaires, dont certains gratuits, qui permettent de remplir programmatiquement un document PDF avec des données externes. Avec ou sans champs de formulaire, et dans le 1er cas il est possible de les “aplatir” ce qui évite toute modification ultérieure :
    https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/
    https://itextpdf.com
    Et bien d’autres…

    #65305
    iRaJaaa
    Membre

    En sois, il y aura “beaucoup de document à générer” dans le temps, mais il ne s’agit pas d’une génération en plusieurs exemplaire, mais simplement un par un en fonction des demandes. Il s’agit du même document avec les mêmes champs, seulement les valeurs vont être différentes.

    De plus, si cette solution est mis en place, cela sera transparent par l’utilisateur, il faut donc réaliser “le/les script(s)” qui réalise le besoin, afin que cette solution soit générique.

    Je vais jeter un œil sur les liens que tu as envoyé mais je ne pense pas que je puisse utiliser des solutions/outils externes disponible sur Internet.

    #65306
    Merlin
    Maître des clés

    Il s’agit du même document avec les mêmes champs, seulement les valeurs vont être différentes.

    Dans ce cas il s’agit d’un seul PDF à remplir avec des données variables, comme quoi il important de bien se comprendre…  :geek:

    Et donc ça devient beaucoup plus simple, Acrobat Pro peut importer des données au format CSV (entre autres) dans les champs d’un formulaire (et ensuite éventuellement les “aplatir” pour éviter les manipulations indésirables).
    Et c’est automatisable.

    Mais c’est à toi de le faire avant de livrer le PDF à l’utilisateur.
    Sinon c’est comme tu lui donnais un puzzle qui s’assemblerait automatiquement à l’ouverture : autant l’assembler avant, c’est plus simple et plus surtout beaucoup plus fiable.
    :Smiley15:

    #65307
    iRaJaaa
    Membre

    Oui c’est cela ahah, un tempate au format PDF, avec des données variables.

    J’ai bien compris la philosophie, cependant j’utilise actuellement la version “Acrobat Standard XI” (j’ai déjà lu ton article concernant les différentes appellations/versions).

    Cela n’est pas réalisable à l’aide d’un script de type “Ouverture du document” ?

    Par exemple, j’ai essayé de le faire manuelle avec un fichier “.txt”, cela fonctionne. J’ai essayé d’obtenir le même résultat avec un script : “this.importTextData(“Fiche_données.txt”);”, cela ne fonctionne pas encore (ce fichier .txt est en pièce jointe).

    #65308
    Merlin
    Maître des clés

    Cette fonction existe d’origine dans Acrobat Pro

    j’utilise actuellement la version “Acrobat Standard

    Et c’est seulement maintenant que tu le dis ?  :geek:

    Comme tu as pu le lire ça change tout, l’interface d’Acrobat Standard n’étant pas équipée “JavaScript” ni “importation de données” ni de “l’Assistant d’actions”, la seule solution c’est de créer un “outil supplémentaire” en JavaScript qui apparaitra dans un des menus.

    Un outil qui demanderait de sélectionner le fichier CSV, qui importerait les données dans le PDF actif, et qui l’enregistrerait.
    Ça conviendrait ?

    #65309
    iRaJaaa
    Membre

    Pourtant, j’ai bien les divers menus que tu as cité dans l’interface de ma version d’Adobe Acrobat.

    #65310
    Merlin
    Maître des clés

    Ce sont plutôt des fonctions que des menus à proprement parler.
    Mais ça ne change rien à ma proposition ci-dessus (qui fonctionnerait aussi avec Acrobat Reader).

    Peux-tu poster une capture d’écran de l’interface de ton Acrobat avec un maximum d’outils et de fonctions affichées ?
    Parce-qu’il y a bien longtemps que je n’ai pas vu un Acrobat “Standard”.
    :Smiley15:

    #65311
    iRaJaaa
    Membre

    Je n’ai pas réussi à prendre en capture, mais j’ai mis les sous fonctions qui permettent d’importer, exporter, fusionner. Je n’ai pas regardé les autres fonctionnalité car elles ne me semblent pas intéressante dans le carde de mon besoin.

    Je peux également exécuter du code JavaScript en ouverture etc.

    #65312
    Merlin
    Maître des clés

    Est-ce qu’il y a “l’Assistant d’action” ?

    #65313
    iRaJaaa
    Membre

    Non je n’ai pas “l’Assistant d’action”, ni dans l’onglet “Outil”, ni dans “Modifier l’ensemble des outils”.

    #65314
    Merlin
    Maître des clés

    Merci, je vois qu’Acrobat Standard s’est enrichi au fil des versions.

    #65315
    iRaJaaa
    Membre

    Ahahah  :Smiley03:

    Pour en revenir sur le sujet de départ, est-ce que mon besoin peut être mis en place avec ma version actuelle d’Adobe Acrobat, et si, par quel moyen et fonction Javascript.
    Je souhaite également implémenter les listes déroulantes dites “mère filles” présent dans ce forum, il ne devrait pas y avoir de problème avec ma version également ?

    #65316
    Merlin
    Maître des clés

    Pour en revenir sur le sujet de départ, est-ce que mon besoin peut être mis en place avec ma version actuelle d’Adobe Acrobat, et si, par quel moyen et fonction Javascript.

    Un outil qui demanderait de sélectionner le fichier CSV, qui importerait les données dans le PDF actif, et qui l’enregistrerait. Ça conviendrait ?

    :doute:

    #65317
    Merlin
    Maître des clés

    Je souhaite également implémenter les listes déroulantes dites “mère filles” présent dans ce forum, il ne devrait pas y avoir de problème avec ma version également ?

    Pas de soucis.

    #65318
    iRaJaaa
    Membre

    De quel genre d’outil parles-tu ?

    Mon idée, c’était de pouvoir exporter les données de ma solution web en format csv (aucun problème), de l’attacher en tant que pièce jointe à mon formulaire PDF (avec l’outil pdftk (attach_files), qui crée un PDF supplémentaire pour le output), et de pouvoir importer les données présent dans le fichier csv en pièce jointe, dans mon formulaire PDF.

    Tout cela doit se faire automatiquement sans actions de l’utilisateur.

    #65319
    Merlin
    Maître des clés

    De quel genre d’outil parles-tu ?

    Ben… Du coup je ne sais plus.  :joker:

    Il faudrait que tu expliques le contexte d’utilisation. D’après ce que je comprend ce serait des documents construits programmatiquement sur un serveur et que l’utilisateur téléchargerait déjà remplis avec les données. C’est bien ça ?
    Parce-que jusqu’ici j’avais compris que c’est toi qui devait remplir et distribuer les documents.

    En tout cas je ne comprend pas pourquoi tu veux attacher les données en pièce jointe du formulaire puisqu’il doit déjà être prérempli. Pour moi c’est le point le plus mystérieux.
    :Euuuh:

    #65320
    iRaJaaa
    Membre

    Est-il possible que je t’explique le contexte d’utilisation par mail ou sur une application afin que cela soit beaucoup plus clair pour toi ?

    On pourra revenir sur ce forum afin de donner la solution pour les utilisateurs qui rencontre la même problématique.

    #65321
    Merlin
    Maître des clés

    Est-il possible que je t’explique le contexte d’utilisation par mail

    OK
    ==> https://www.abracadabrapdf.net/contact/

    #65322
    iRaJaaa
    Membre

    Je t’ai envoyé un mail afin de bien expliquer le contexte de mon besoin.

    #65323
    Merlin
    Maître des clés

    Pour l’heure je n’ai toujours rien reçu.
    ?

    #65324
    iRaJaaa
    Membre

    Je viens de revérifier ton adresse mail, et sauf erreur de ma part, je t’ai bien envoyé un mail Mercredi soir.

    #65325
    Merlin
    Maître des clés

    Soit il y a du cafouillage, soit il y a des pièces jointes trop lourdes…  :Euuuh:

    Quoi qu’il en soit, garde le même nom, remplace la fin de l’adresse par @laposte.net et renvoie le moi STP.
    Ça finira bien par passer.
    :priere:

    #65326
    iRaJaaa
    Membre

    On va bien y arriver!

    Je t’ai envoyé un mail Samedi sur ta nouvelle adresse. Si tu n’as rien reçu encore une fois, je t’invite à m’envoyer directement un mail à mon adresse mail que tu trouveras sur mon profil.

    Il n’y aucune pièce jointe dans mon mail.

    #65327
    Merlin
    Maître des clés

    OK, j’ai retrouvé tes emails bien rangés tout au fond de la boite à spams (mais quelle idée aussi d’utiliser hotmail…  :Smiley03: )

    Et je crois que j’ai compris.

    C’est quand le client renvoie le formulaire PDF par email que le processus n’est pas bon. Dans ton cas, l’utilisation de la fonction “submit” (envoi direct des données au serveur) n’aurait que des avantages :

    – sécurité des données transmises (alors qu’aucune protection n’est vraiment possible par email),
    – sécurité du transfert (pas d’email “perdu” en route),
    – récupération et injection directe des données ainsi recueillies dans “l’outil”,
    – confirmation instantanée de bonne réception à l’utilisateur.

    Voir :
    https://acrobatusers.com/tutorials/print/submitting-data
    https://acrobatusers.com/tutorials/form-submit-e-mail-demystified
    https://answers.acrobatusers.com/Submit-and-gDrive-q152400.aspx?tc=8832509113003201479400#postComments152406

    :Smiley15:

    #65328
    iRaJaaa
    Membre

    Heureux que mes mails sont bien arrivé ahah.

    Merci d’avoir pris le temps de lire le mail. Cependant, tu ne réponds pas à la problématique principale, qui est de pouvoir importer les données d’un fichier CSV joint à mon formulaire PDF, afin de compléter certains champs de mon formulaire avant de l’envoyer au client.

    J’ai pris le temps de lire la fonction “submit”, cependant je ne pense pas que cela soit compatible (ou pas aussi simple) pour “récupération et injection directe des données ainsi recueillies dans “l’outil”.

    Mon formulaire PDF ne contiendra aucun bouton (de validation, d’envoi, etc.)

    #65329
    bebarth
    Maître des clés

    bonjour,

    Cependant, tu ne réponds pas à la problématique principale, qui est de pouvoir importer les données d’un fichier CSV joint à mon formulaire PDF, afin de compléter certains champs de mon formulaire avant de l’envoyer au client.

    Je n’ai pas suivi ce post depuis le début, mais pour ce point n’est-il pas possible d’utiliser plutôt un fichiet .txt et d’adapter le script de ce post ?
    https://abracadabrapdf.net/forum/index.php/topic,3498.msg20950.html#msg20950
    @+
    :bonjour:

    #65330
    iRaJaaa
    Membre

    Merci pour ton intervention.
    En effet, j’ai déjà regardé cette discussion, mais je n’arrive pas à faire fonctionner le bout de script qui est important pour moi. C’est la raison pour laquelle je me tourne vers vous.

    En effet, je pense que ces trois lignes de codes devraient pouvoir remplir les champs de mon formulaire à l’aide du fichier joint :
    var p = this.getDataObject(this.dataObjects[0].name)
    // importer le contenu de la pièce jointe
    var fi = this.getDataObjectContents(p.name)
    var fit = util.stringFromStream(fi)

    #65331
    bebarth
    Maître des clés

    Si tu peux me faire parvenir ton/tes fichiers(s), je pourrai regarder demain matin !
    @+
    :bonjour:

    #65332
    iRaJaaa
    Membre

    As-tu une adresse mail afin que je t’explique, comme pour Merlin, le contexte, et par la même occasion joindre les fichiers ?

    #65333
    bebarth
    Maître des clés

    …si tu cliques sur mon pseudo, tu devrais la trouver !!!
    @+
    :bonjour:

    #65334
    Merlin
    Maître des clés

    Merci d’avoir pris le temps de lire le mail. Cependant, tu ne réponds pas à la problématique principale, qui est de pouvoir importer les données d’un fichier CSV joint à mon formulaire PDF, afin de compléter certains champs de mon formulaire avant de l’envoyer au client.

    Extrait de ton email :

    …l’idée c’est de pouvoir envoyé par mail, le formulaire PDF avec les champs obligatoires qui ont été complété précédemment.
    D’où l’intérêt d’avoir une étape “d’export” des données.
    En effet, je suis capable d’exporter les données précises des champs qui m’intéresse de l’outil en un fichier CSV. De plus, afin de les importer dans les champs de mon formulaire PDF, la solution que j’ai trouvé (pour que ça automatique), c’est d’attacher ce fichier CSV à mon formulaire, pour ainsi remplir les champs avec du JavaScript.
    Une fois envoyé par mail, le client rempli, il nous le renvoie par mail…

    J’ai déjà réalisé l’aspect Import qui fonctionne parfaitement, avec les différentes étapes, à l’aide d’un script Bash…“

    Tu dis que tu as trouvé une solution, et ensuite tu dis que tu n’en as pas…
    Comprend que j’aie un peu de mal à te suivre.  :geek:

    #65335
    iRaJaaa
    Membre

    Lorsque que j’indique “l’aspect Import qui fonctionne”, il s’agit de l’import des données de mon PDF vers mon outil, et non l’import des données du fichier CSV (attaché en pièce jointe) vers le formulaire PDF

    #65336
    bebarth
    Maître des clés

    bonjour,
    Si j’ai bien compris, le fichier csv ne comprend qu’une seule ligne à chaque fois, correct ?
    Voici donc un exemple qu’il faudra certainement adapter en fonction du nom des champs à remplir.
    …après, je ne sais pas si le script doit importer le fichier csv, le supprimer après remplissage des champs, enregistrer le fichier sous un nom (lequel), etc.
    @+
    :bonjour:

    #65337
    iRaJaaa
    Membre

    Merci pour ton exemple. Mon fichier CSV comprends deux lignes, une correspondant aux noms des champs, la deuxième pour la valeur de celles-ci. Dans ton cas les champs se suivent, mais supposons que c’est le premier champs, le 5e, et le dernier qui nous intéresse etc.

    Je pensais attaché le fichier CSV avec un outil linux “pdftk” grâce à l’option attach_files. En effet, il serait intéressant de le supprimer (le fichier CSV) une fois remplis et pourquoi pas l’enregistré quelque part sous un autre nom.

    #65338
    bebarth
    Maître des clés

    Voici un nouvel exemple pour un fichier csv avec 2 lignes et qui est supprimé après importation des données.
    Si tu utilises l’action (uniquement si), tu peux en plus enregistré le fichier complété sous un nouveau nom : nomFichier (Nom Prenom).pdf
    @+
    :bonjour:

    #65339
    bebarth
    Maître des clés

    Je n’avais pas vu que tu m’avais envoyé un fichier teste sur ma boite mail.
    J’ai essayé et ça fonctionne mais il va falloir modifier le nom de certains champs pour ne pas avoir de caractères accentués ni de caractères spéciaux (et je crois pas d’espace… en tout cas moi je n’en mets jamais !).
    …et bien sûr indiquer le nom correct du fichier .csv dans le script.
    @+
    :bonjour:

    #65340
    iRaJaaa
    Membre

    J’ai essayé dans le cadre de mes documents et cela fonctionne (également dans le cadre de liste à puces (je n’ai pas essayé avec les mère/fille)). Cependant, comme tu as pu le voir, cela ne fonctionne pas avec les caractères spéciaux tels que les espaces, accents, etc.

    En effet, je ne peux pas changer le nom de mes champs car ce sont les mêmes champs que l’on retrouve dans mon outil, et pour une histoire de compatibilité, je me dois de faire coïncider les champs pour pouvoir exporter/importer “facilement”.

    Avez vous une solution qui permet de contourner cela ?

    #65341
    bebarth
    Maître des clés

    Si les infos du fichier csv sont toujours identiques, on peut ignorer la première ligne :

    Code:
    var laLigne1= lesLignes[0].split(“;”);

    et la remplacer par une table avec les noms corrects des champs renommés dans le pdf, par exemple :

    Code:
    var laLigne1= [“Client”,”Description”,”Reference”,”Titre”,”Site”];

    @+
    :bonjour:

    #65342
    Merlin
    Maître des clés

    Lorsque que j’indique “l’aspect Import qui fonctionne”, il s’agit de l’import des données de mon PDF vers mon outil…

    Oui, du coup j’ai compris mais reconnait que ton explication est un peu confuse.  :oh:

    Avez vous une solution qui permet de contourner cela ?

    Il faut que le fichier CSV soit encodé en Unicode UTF-8.
    L’encodage Windows et l’encodage MacOS ne sont pas supportés par Acrobat.

    #65343
    bebarth
    Maître des clés

    bonjour,
    Voici un script pour une action adaptée spécialement pour ton fichier avec les champs renommés (je ne savais pas si je pouvais poster ton fichier).

    Code:
    var Chemin=this.path;
    var donneesCSV=this.getDataObjectContents(“test.csv”);
    var lesDonnees=util.stringFromStream(donneesCSV);
    var lesLignes=lesDonnees.split(“r”);
    var laLigne1=[“Client”,”Description”,”Reference”,”Titre”,”Site”];
    var laLigne2=lesLignes[1].split(“;”);
    for (var i=0; i    var n=laLigne2.charCodeAt(0);
        if (n==10) laLigne2=laLigne2.substring(1); // Spécialement pour fichier csv fourni ???
        this.getField(laLigne1).value=laLigne2;
    }
    this.removeDataObject(“test.csv”);
    this.saveAs(Chemin.substring(0,Chemin.length-4)+” (“+this.getField(“Client”).value+”).pdf”);

    @+
    :bonjour:

    #65344
    iRaJaaa
    Membre

    Oui en effet mon explication n’est pas forcément clair Merlin, désolé ahah
    bebarth, les éléments de script que tu m’a fourni fonctionne, merci.

    Cependant, j’ai réalisé le test et pour le champ “Référence” cela fonctionne (même avec les accents) y compris si l’on inclue des “espaces” dans les champs. Cependant, pour ce caractère spéciaux “->”, cela ne fonctionne plus. Avez-vous une solution de contournement ?

    #65345
    bebarth
    Maître des clés

    Je comprends que tu ne puisses pas renommer les noms de champs de l’application web, mais pourquoi ne pas renommer les champs du formulaire ???
    Ensuite si le nom du champ récupéré commence par “Site de l’incident” tu renvoies vers le nom de champ “Site” par exemple !
    @+
    :bonjour:

    #65346
    iRaJaaa
    Membre

    Je ne souhaite pas renommer les champs du formulaire, car une fois que le formulaire est remplie complétement par le client, l’idée c’est de pouvoir importer les données présent dans mon formulaire dans la solution web.

    Pour ce faire, un fichier CSV est mis en pièce jointe, et récupère les données de mon formulaire (avec deux lignes), et qui s’actualise lors de l’ouverture du document avec un Javascript. Les champs présent dans mon formulaire sont bien présent dans le fichier CSV en question, même avec les caractères spéciaux. Ensuite, c’est ce fichier CSV que je vais importer dans la solution web. Cette partie “d’import” dans la solution Web fonctionne si et seulement si les champs sont conforme avec la solution web. Ainsi si j’importe un champ qui n’est pas présent dans la solution web, cela ne fonctionne pas.

    C’est la raison pour laquelle je souhaite que les champs ne soit pas renommé.

    #65347
    bebarth
    Maître des clés

    J’ai peut-être une solution mais pour savoir, pourquoi les champs “Site…” et “Client…” sont-ils des listes déroulantes s’il sont remplis via l’application web ?
    @+
    :bonjour:

    #65348
    bebarth
    Maître des clés

    Cependant, j’ai réalisé le test et pour le champ “Référence” cela fonctionne (même avec les accents)…

    Cela m’étonne un peu car lorsque je récupère “Référence” du fichier csv j’obtiens “Rfrence” !
    @+
    :bonjour:

    #65349
    iRaJaaa
    Membre

    Bonne remarque, tu as raison. C’était histoire d’alimenter mon formulaire, à titre d’exemple.

    Cependant, mon formulaire risque d’évoluer dans le temps, et ce genre de situation peux s’avérer. En effet, supposons que l’on export une mauvaise valeur “Client..”/”Site”…”, le client aura la possibilité de la renommer, mais il pourra être libre d’écrire ce qu’il voudra car il n’aura pas les choix de liste déroulante. Sachant que la solution en ligne est stricte niveau syntaxe, c’est la raison pour laquelle j’ai laissé les listes déroulantes.

    Pourtant, le libellé de mon champs PDF s’appelle bien “Référence”, le champ de mon fichier CSV s’appelle “Référence”, et dans le code Javascript “Référence”, et j’ai bien l’import du fichier CSV dans mon PDF.

    #65350
    bebarth
    Maître des clés

    Voici un script spécialement adapté pour ton fichier.

    Code:
    var Chemin=this.path;
    var donneesCSV=this.getDataObjectContents(“test.csv”);
    var lesDonnees=util.stringFromStream(donneesCSV);
    var lesLignes=lesDonnees.split(“r”);
    var laLigne1=lesLignes[0].split(“;”);
    var laLigne2=lesLignes[1].split(“;”);
    for (var i=0; i    var n=laLigne2.charCodeAt(0);
        if (n==10) laLigne2=laLigne2.substring(1); // Spécialement pour fichier csv fourni ???
        if (laLigne1==”Rfrence”) laLigne1=”Référence”;
        if (laLigne1==”Site de lincident ->Nom complet”) laLigne1=”Site de l’incident ->Nom complet”;
        this.getField(laLigne1).value=laLigne2;
    }
    this.removeDataObject(“test.csv”);
    this.saveAs(Chemin.substring(0,Chemin.length-4)+” (“+this.getField(“Client->Nom organisation”).value+”).pdf”);

    Les caracères non reconnus sont “é” dans Référence et l’apostrophe dans “Site de l’incident…”
    @+
    :bonjour:

    #65351
    Merlin
    Maître des clés

    :bravo:

    #65352
    iRaJaaa
    Membre

    Merci beaucoup bebarth et Merlin , grâce aux “If”, cela fonctionne parfaitement ! Cela me permet d’avoir un exemple de comment contourner les problèmes de syntaxe pour les prochaines fois.

    Pour étudier les différentes cas de figure, je souhaite mettre en place une condition qui dit en français “Si le champ du fichier CSV (ligne 1) n’est pas présent dans le formulaire, alors ignorer/continuer”. En effet, j’ai remarqué que si il y a une erreur lors d’un n-ième champs, les suivant ne se complète pas.

    Je pensais à mettre une condition “If” après le premier :
    if (n==10) laLigne2=laLigne2.substring(1);
    if (laLigne1=! **********) continue; (ou sinon avec un else)

    Je ne connais pas la syntaxe qui permet de complété les *, mais cela devrait correspondre aux champs de manière général du formulaire courant (this.getField ?)

    #65353
    bebarth
    Maître des clés

    Il faut plutôt utiliser “try & catch” :

    Code:

    try {
    this.getField(laLigne1).value=laLigne2;
    } catch(e) {}

    @+
    :bonjour:

    #65354
    iRaJaaa
    Membre

    Bonjour,

    Merci cette solution fonctionne à merveille!

    #65355
    iRaJaaa
    Membre

    Je viens tout juste de mettre à jour ma version vers “Adobe Acrobat XI Pro”.

    Si vous avez des solutions supplémentaires, ou fonctionnalités avec cette version, qui correspond à mon besoin, je suis intéressé par curiosité

    #65356
    Merlin
    Maître des clés

    Voilà trois bons tutos/articles pour Acrobat Pro (vs Acrobat Standard) :
    https://www.abracadabrapdf.net/ressources-et-tutos/acrobat-reader/acrobat-11-nouveautes/
    https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/les-differents-niveaux-dutilisation-des-scripts-javascript/
    https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/lediteur-de-formulaire-dacrobat/

    Concernant AcroForms et JavaScript il n’y pas eu d’évolution majeure depuis Acrobat X(10), et même si ça trouve pas d’évolution du tout (à part les mises à jour du “moteur” JavaScript).

    #65357
    bebarth
    Maître des clés

    bonjour,
    Voici une version adaptée spécialement pour les fichiers que tu m’as fait parvenir. Je ne suis pas diplômé es .csv, et je ne pourrais donc pas t’expliquer le pourquoi mais avec tes fichiers UTF-8 on récupères également des guillemets et le retour ligne récupéré n’est pas r. Par contre on récupère bien les caractères accentués, j’ai donc retiré les lignes pour renommer.
    Il faut donc dans un premier temps trouver ce séparateur. Avec : if (lesDonnees.charCodeAt(i-1)==34 && lesDonnees.charCodeAt(i+1)==34 && lesDonnees.charCodeAt(i)!=59) var separateur=String.fromCharCode(lesDonnees.charCodeAt(i));
    On vérifie donc le caractère situé entre 2 guillemets (34) et si ce n’est pas un point-virgule (59), c’est le retour ligne !
    Ensuite on retire tous les guillements dans la chaine avec : lesDonnees.replace(/”/gi,””); -> ici le “i” n’est pas obligatoire car il est pour “insensitive case”, on pourrait se contenter de : lesDonnees.replace(/”/g,””);
    Ce qui donne au final :

    Code:
    var Chemin=this.path;
    var donneesCSV=this.getDataObjectContents(“fichierData.csv”);
    var lesDonnees=util.stringFromStream(donneesCSV);
    for (var i=1; i    if (lesDonnees.charCodeAt(i-1)==34 && lesDonnees.charCodeAt(i+1)==34 && lesDonnees.charCodeAt(i)!=59) var separateur=String.fromCharCode(lesDonnees.charCodeAt(i));
    }
    var lesDonnees=lesDonnees.replace(/”/gi,””);
    var lesLignes=lesDonnees.split(separateur);
    var laLigne1=lesLignes[0].split(“;”);
    var laLigne2=lesLignes[1].split(“;”);
    for (var i=0; i    try {
            this.getField(laLigne1).value=laLigne2;
        } catch(e) {}
    }
    this.removeDataObject(“fichierData.csv”);
    this.saveAs(Chemin.substring(0,Chemin.length-4)+” (“+this.getField(“Client->Nom organisation”).value+”).pdf”);

    @+
    :bonjour:

    #65358
    iRaJaaa
    Membre

    J’ai bien compris où tu veux en venir, merci pour l’explication. Cependant, je viens de mettre à jour le script, et cela ne fonctionne pas.
    Je travaille bien avec le fichier UTF-8. Si cela fonctionne de ton côté (sans avoir modifié le fichier CSV), cela doit venir de mon côté, mais je vois pas d’où ça provient.

    Concernant le fichier avec l’autre norme, cela n’est pas possible ?

    Lorsque j’ouvre le débogueur de Javascript, il m’indique : “TypeError: lesLignes is undefined 20:Page:Open”, je ne sais pas si il s’agit de cette console que tu me parlais.

    #65359
    bebarth
    Maître des clés

    Concernant le fichier avec l’autre norme, cela n’est pas possible ?

    C’est possible, mais on ne récupère plus les caractères accentués !
    Essaie ce script et donne-moi les résultats de la console.

    Code:
    console.show();
    console.clear();
    var Chemin=this.path;
    var donneesCSV=this.getDataObjectContents(“UTF-8.csv”);
    var lesDonnees=util.stringFromStream(donneesCSV);
    console.println(“lesDonnees : “+lesDonnees);
    for (var i=1; i    if (lesDonnees.charCodeAt(i-1)==34 && lesDonnees.charCodeAt(i+1)==34 && lesDonnees.charCodeAt(i)!=59) var separateur=String.fromCharCode(lesDonnees.charCodeAt(i));
    }
    console.println(“lesDonnees 1 : “+lesDonnees);
    var lesDonnees = lesDonnees.replace(/”/gi,””);
    console.println(“lesDonnees 2 : “+lesDonnees);
    var lesLignes=lesDonnees.split(separateur);
    console.println(“lesLignes : “+lesLignes);
    var laLigne1=lesLignes[0].split(“;”);
    console.println(“laLigne1 : “+laLigne1);
    var laLigne2=lesLignes[1].split(“;”);
    console.println(“laLigne2 : “+laLigne2);
    for (var i=0; i    console.println(“i : “+i);
        console.println(“laLigne1 : “+laLigne1);
        console.println(“laLigne2 : “+laLigne2);   
        try {
            this.getField(laLigne1).value=laLigne2;
        } catch(e) {}
    }
    this.removeDataObject(“UTF-8.csv”);
    this.saveAs(Chemin.substring(0,Chemin.length-4)+” (“+this.getField(“Client->Nom organisation”).value+”).pdf”);

    @+
    :bonjour:

    #65360
    iRaJaaa
    Membre

    Mais si on réutilise les conditions “If” que tu avais écrites, normalement c’est bon non ?
    Je pensais que c’était le fichier CSV qui avait un format spécial. En effet, même si je prends le fichier CSV sous l’autre format que l’UTF-8, je rencontre le même problème (avec les conditions If.)

    Voici le message de la console, je ne comprends pas pourquoi il indique que c’est pas défini, de ton côté cela fonctionne ? :

    lesDonnees : “Titre”;”Description”;”Référence”
    “Nouveau titre”;”nouvelle description”;”Ref1″

    lesLignes 1 : undefined

    TypeError: lesLignes is undefined
    24:Page:Open

    #65361
    bebarth
    Maître des clés

    Oups ! J’avais publié une mauvaise ligne de script (var lesLignes=lesLignes.replace(/”/gi,””); au lieu de var lesDonnees=lesDonnees.replace(/”/gi,””);).
    Par contre, l’action postée et que je t’ai envoyé par mail est correcte.
    J’ai modifié la ligne dans les 2 post précédents.
    Tu me dis si tu as encore un message dans la console.
    @+
    :bonjour:

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