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 16 réponses de 51 à 66 (sur un total de 66)
  • Auteur
    Réponses
  • #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 16 réponses de 51 à 66 (sur un total de 66)
  • Vous devez être connecté pour répondre à ce sujet.