Skip to main content
Participant
February 14, 2025
Answered

Reading CSV Data and Filling PDF Fields in Acrobat using JavaScript

  • February 14, 2025
  • 1 reply
  • 368 views

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

Correct answer try67

First step is to get rid of the try-catch clause, so you could see the actual error message and the line where it happens.

Also, the readFileIntoStream method requires a privileged context if you provide the file path to it, so your code (or at least that part of it) must be located in a trusted function in a .js file.

See:

https://acrobatusers.com/tutorials/trust-and-privilege-in-acrobat-scripts

https://acrobatusers.com/tutorials/using_trusted_functions

 

1 reply

try67
Community Expert
try67Community ExpertCorrect answer
Community Expert
February 14, 2025

First step is to get rid of the try-catch clause, so you could see the actual error message and the line where it happens.

Also, the readFileIntoStream method requires a privileged context if you provide the file path to it, so your code (or at least that part of it) must be located in a trusted function in a .js file.

See:

https://acrobatusers.com/tutorials/trust-and-privilege-in-acrobat-scripts

https://acrobatusers.com/tutorials/using_trusted_functions