Reading CSV Data and Filling PDF Fields in Acrobat using JavaScript
Hello,
I’m trying to automate filling out PDF forms using data from a CSV file in Adobe Acrobat. My current script looks like this, where the CSV data is written directly in the JavaScript for testing purposes :
// Exemple de données CSV avec plusieurs lignes
var csvData = [
['Numéro_client', 'Entreprise', 'Type', 'Adresse', 'Code postal', 'Ville', 'Banque 1', 'Banque 2', 'Banque 3', 'Banque 4', 'Banque 5', 'Titre', 'Titre complet', 'Nom', 'Prenom', 'Repertoire'],
["D000001", "TESTENTREPRISE", "Entreprise individuelle", "TEST", "77300", "FONTAINEBLEAU", "NULL", "NULL", "NULL", "NULL", "NULL", "DR", "DR", "TESTNAME", "TESTPRENOM", ""],
];
// Fonction pour remplir les champs du PDF et enregistrer un nouveau document pour chaque ligne
function fillAndSavePDF(csvData) {
// Assurez-vous que les données CSV contiennent plus de 1 ligne
if (csvData && csvData.length > 1) {
var headers = csvData[0]; // La première ligne contient les titres des colonnes
// Mapping des colonnes CSV aux noms des champs du PDF
var fieldMapping = {
'Entreprise': 'Entreprise',
'Adresse': 'Adresse',
'Banque 1': 'Banque1',
'Banque 2': 'Banque2',
'Banque 3': 'Banque3',
'Banque 4': 'Banque4',
'Banque 5': 'Banque5'
};
// Parcours des lignes de données (sauf la première ligne qui est l'entête)
for (var row = 1; row < csvData.length; row++) {
var values = csvData[row]; // Valeurs de la ligne actuelle
// Remplir les champs du PDF avec les données de la ligne
for (var i = 0; i < headers.length; i++) {
var fieldName = headers[i].trim();
var fieldValue = values[i].trim();
// Vérifier si un champ PDF correspond à ce nom de champ CSV
if (fieldMapping[fieldName]) {
var pdfField = this.getField(fieldMapping[fieldName]);
if (pdfField) {
pdfField.value = fieldValue; // Remplir le champ avec la valeur du CSV
}
}
}
// Sauvegarder le PDF modifié avec un nouveau nom basé sur le client ou un autre identifiant
var fileName = "Client_" + values[0] + "_formulaire.pdf"; // Exemple de nom basé sur le numéro client
var filePath = "Z:/ici/" + fileName; // Spécifiez le répertoire où le fichier sera enregistré
// Enregistrer le PDF sous un nouveau nom
this.saveAs(filePath);
}
app.alert("Les PDF ont été enregistrés dans le répertoire spécifié.");
} else {
app.alert("Aucune donnée CSV valide.");
}
}
// Appeler la fonction pour remplir les champs et enregistrer les fichiers
fillAndSavePDF(csvData);
However, the goal is to read this data from a CSV file instead of writing it manually in the script.
I tried using util.readFileIntoStream(filePath) to read the CSV file, Here's the code I used:
function readCSV(filePath) {
try {
var file = util.readFileIntoStream(filePath); // Lire le fichier en tant que flux de données
var csvText = util.stringFromStream(file); // Convertir en texte
var csvLines = csvText.split("\n"); // Séparer les lignes
var data = [];
for (var i = 0; i < csvLines.length; i++) {
var line = csvLines[i].trim();
if (line.length > 0) {
data.push(line.split(";")); // Adapter le séparateur si besoin
}
}
return data;
} catch (e) {
app.alert("Erreur lors de la lecture du fichier CSV : " + e.message); // Affichage du message d'erreur détaillé
return null;
}
}
I keep getting the error: "L'opération a échoué" (The operation failed), and I’m not sure why.
Could anyone guide me on how to properly read a CSV file in Adobe Acrobat using JavaScript? Any help would be greatly appreciated !
Thank you
