abracadabraPDF › Forums › PDF – Général › Convertir/exporter les données du formulaire PDF vers CSV
- Ce sujet est vide.
-
CréateurSujet
-
14 février 2019 à 09:55 #46013iRaJaaaMembre
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!
-
CréateurSujet
-
AuteurRéponses
-
14 février 2019 à 10:35 #65296MerlinMaî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:14 février 2019 à 13:31 #65297iRaJaaaMembreMerci 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).
14 février 2019 à 19:02 #65298MerlinMaître des clésJe 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 :
28 février 2019 à 15:56 #65299iRaJaaaMembreBonjour,
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”.
28 février 2019 à 22:59 #65300MerlinMaître des clésJe 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)1 mars 2019 à 08:34 #65301iRaJaaaMembreQuel é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)?
1 mars 2019 à 15:07 #65302MerlinMaître des clésQuel é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.
1 mars 2019 à 15:29 #65303iRaJaaaMembreLes 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.
1 mars 2019 à 17:53 #65304MerlinMaître des clésQuand 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…4 mars 2019 à 09:07 #65305iRaJaaaMembreEn 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.
4 mars 2019 à 09:51 #65306MerlinMaître des clésIl 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:4 mars 2019 à 10:25 #65307iRaJaaaMembreOui 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).
4 mars 2019 à 10:40 #65308MerlinMaître des clésCette 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 ?4 mars 2019 à 12:15 #65309iRaJaaaMembrePourtant, j’ai bien les divers menus que tu as cité dans l’interface de ma version d’Adobe Acrobat.
4 mars 2019 à 13:27 #65310MerlinMaître des clésCe 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:4 mars 2019 à 13:50 #65311iRaJaaaMembreJe 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.
4 mars 2019 à 17:55 #65312MerlinMaître des clésEst-ce qu’il y a “l’Assistant d’action” ?
5 mars 2019 à 09:11 #65313iRaJaaaMembreNon je n’ai pas “l’Assistant d’action”, ni dans l’onglet “Outil”, ni dans “Modifier l’ensemble des outils”.
5 mars 2019 à 10:02 #65314MerlinMaître des clésMerci, je vois qu’Acrobat Standard s’est enrichi au fil des versions.
5 mars 2019 à 13:06 #65315iRaJaaaMembreAhahah :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 ?6 mars 2019 à 08:17 #65316MerlinMaître des clésPour 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:
6 mars 2019 à 08:18 #65317MerlinMaître des clésJe 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.
6 mars 2019 à 10:27 #65318iRaJaaaMembreDe 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.
6 mars 2019 à 11:07 #65319MerlinMaître des clésDe 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:6 mars 2019 à 12:40 #65320iRaJaaaMembreEst-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.
6 mars 2019 à 13:06 #65321MerlinMaître des clésEst-il possible que je t’explique le contexte d’utilisation par mail
8 mars 2019 à 08:31 #65322iRaJaaaMembreJe t’ai envoyé un mail afin de bien expliquer le contexte de mon besoin.
8 mars 2019 à 12:30 #65323MerlinMaître des clésPour l’heure je n’ai toujours rien reçu.
?8 mars 2019 à 14:37 #65324iRaJaaaMembreJe viens de revérifier ton adresse mail, et sauf erreur de ma part, je t’ai bien envoyé un mail Mercredi soir.
8 mars 2019 à 18:15 #65325MerlinMaître des clésSoit 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:11 mars 2019 à 09:15 #65326iRaJaaaMembreOn 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.
11 mars 2019 à 11:45 #65327MerlinMaître des clésOK, 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:
11 mars 2019 à 12:58 #65328iRaJaaaMembreHeureux 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.)
11 mars 2019 à 13:23 #65329bebarthMaître des clésbonjour,
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:11 mars 2019 à 14:03 #65330iRaJaaaMembreMerci 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)11 mars 2019 à 14:28 #65331bebarthMaître des clésSi tu peux me faire parvenir ton/tes fichiers(s), je pourrai regarder demain matin !
@+
:bonjour:11 mars 2019 à 14:32 #65332iRaJaaaMembreAs-tu une adresse mail afin que je t’explique, comme pour Merlin, le contexte, et par la même occasion joindre les fichiers ?
11 mars 2019 à 15:01 #65333bebarthMaître des clés…si tu cliques sur mon pseudo, tu devrais la trouver !!!
@+
:bonjour:11 mars 2019 à 23:00 #65334MerlinMaître des clésMerci 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:12 mars 2019 à 08:49 #65335iRaJaaaMembreLorsque 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
12 mars 2019 à 10:37 #65336bebarthMaître des clésbonjour,
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:12 mars 2019 à 12:15 #65337iRaJaaaMembreMerci 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.
12 mars 2019 à 13:53 #65338bebarthMaître des clésVoici 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:12 mars 2019 à 14:07 #65339bebarthMaître des clésJe 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:12 mars 2019 à 14:44 #65340iRaJaaaMembreJ’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 ?
12 mars 2019 à 17:43 #65341bebarthMaître des clésSi 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:12 mars 2019 à 17:45 #65342MerlinMaître des clésLorsque 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.13 mars 2019 à 08:24 #65343bebarthMaître des clésbonjour,
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; ivar 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:13 mars 2019 à 09:50 #65344iRaJaaaMembreOui 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 ?
13 mars 2019 à 11:13 #65345bebarthMaître des clésJe 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:13 mars 2019 à 12:23 #65346iRaJaaaMembreJe 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é.
13 mars 2019 à 13:05 #65347bebarthMaître des clésJ’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:13 mars 2019 à 14:19 #65348bebarthMaître des clésCependant, 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:13 mars 2019 à 14:32 #65349iRaJaaaMembreBonne 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.
13 mars 2019 à 14:46 #65350bebarthMaître des clésVoici 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; ivar 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:13 mars 2019 à 15:56 #65351MerlinMaître des clés:bravo:
13 mars 2019 à 16:39 #65352iRaJaaaMembreMerci 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 ?)
13 mars 2019 à 17:55 #65353bebarthMaître des clésIl faut plutôt utiliser “try & catch” :
Code:…
try {
this.getField(laLigne1).value=laLigne2;
} catch(e) {}
…@+
:bonjour:14 mars 2019 à 16:09 #65354iRaJaaaMembreBonjour,
Merci cette solution fonctionne à merveille!
14 mars 2019 à 16:37 #65355iRaJaaaMembreJe 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é
14 mars 2019 à 18:09 #65356MerlinMaître des clésVoilà 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).
15 mars 2019 à 10:54 #65357bebarthMaître des clésbonjour,
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; iif (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; itry {
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:15 mars 2019 à 13:49 #65358iRaJaaaMembreJ’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.
15 mars 2019 à 14:02 #65359bebarthMaître des clésConcernant 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; iif (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; iconsole.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:15 mars 2019 à 15:04 #65360iRaJaaaMembreMais 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:Open15 mars 2019 à 16:27 #65361bebarthMaître des clésOups ! 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: -
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.