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 #46013
iRaJaaa
MembreBonjour,
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
-
13 mars 2019 à 12:23 #65346
iRaJaaa
MembreJe 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 #65347bebarth
Maî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 #65348bebarth
Maî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 #65349iRaJaaa
MembreBonne 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 #65350bebarth
Maî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 #65351Merlin
Maître des clés:bravo:
13 mars 2019 à 16:39 #65352iRaJaaa
MembreMerci 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 #65353bebarth
Maî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 #65354iRaJaaa
MembreBonjour,
Merci cette solution fonctionne à merveille!
14 mars 2019 à 16:37 #65355iRaJaaa
MembreJe 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 #65356Merlin
Maî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 #65357bebarth
Maî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 #65358iRaJaaa
MembreJ’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 #65359bebarth
Maî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 #65360iRaJaaa
MembreMais 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 #65361bebarth
Maî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.