OSBI.FR - Open Source Business Intelligence

Automatiser ses processus métiers avec PDI: la fusion de PDF

Introduction

Vous êtes dans doute nombreux à rencontrer ce genre de besoin. En tout cas moi je suis tombé là-dessus de nombreuses fois et cela dans des secteurs d’activité assez variés…

Comment automatiser la fusion de plusieurs fichiers PDF pour  générer, par exemple, un dossier de synthèse client, ou bien assembler des factures ?

Si vous n’avez pas un système de GED ou tout autre outil spécialisé, c’est pas toujours évident non ?

Encore une fois, Kettle peut vous sauver la mise, surtout pour sa facilité d’utilisation et sa rapidité de mise en oeuvre. Il suffit de trouver juste un outil gratuit de fusion de PDF qui va nous aider à faire le travail

Voici un exemple simple pour illustrer la mise en place de ce traitement avec PDI

Le cas à traiter

Imaginez que vous deviez automatiser l’assemblage de plusieurs documents PDF comme suit :

On doit générer:

  • Pour le client de la société A un dossier de synthèse avec la fusion des fichiers « DOC A-1.pdf » et « DOC A-2.pdf »
  • Pour le client de la société B un dossier de synthèse avec la fusion des fichiers « DOC B-1.pdf », « DOC B-2.pdf », « DOC B-3.pdf » et « DOC B-4.pdf »
  • etc….

Bien sûr, il n’y a pas 4 clients à traiter, mais 10 000 : impossible de faire ça à la main !

L’outil PDF pour la fusion des fichiers

Tout d’abord, il faut trouver une librairie PDF (gratuite) permettant de fusionner des PDF.

Moi je suis tombé sur PDF Tool Kit (PDFTK), bien sûr il y en a surement plein d’autres !

Télécharger PDFTK et faire l’installation (sur Windows) en copiant les fichiers pdftk.exe et libiconv2.dll dans le répertoire C:\windows\system32

Les lignes de commande à invoquer pour générer chaque merge de fichier PDF sont de ce style :

  • pdftk DOC A-1.pdf  DOC A-2.pdf cat output SOCIETE A.pdf
  • pdftk DOC B-1.pdf  DOC B-2.pdf DOC B-3.pdf  DOC B-4.pdf cat output SOCIETE B.pdf
  • etc…

Et bien sûr, c’est Kettle qui va se charger du boulot !

Le traitement Kettle

Tout d’abord, on doit écrire une transformation Kettle qui va se charger de générer autant de lignes dans le flux de sortie que de sociétés à traiter.

En fait le but est de fournir toutes les commandes PDFTK à invoquer :

Afin que le traitement soit répétitif, il suffit de construire un job sous forme de boucle :

La transformation « Fichier à traiter » est configuré pour passer la colonne « cmde_ligne » au paramètre « cmd_line » du job :

Le job de fusion des fichiers PDF (« Job Merge PDF ») est configurée pour être appelée à chaque ligne sortant de la transformation avec passage du paramètre depuis la transformation :

Le job de fusion des PDF pour une société donnée consiste juste à l’appel du programme PDFTK (étape « Exécution Commande Shell ») dont on passe sous forme de paramètre la ligne de commande :

Télécharger et tester l’exemple

Vous pouvez télécharger l’

Pour tester, il suffit d’ouvrir le « Job Global » situé dans le répertoire \Job

Avant d’exécuter le job, n’oubliez pas de créer une variable d’environnement « dossier_traitement » (CTRL+ALT+P) qui pointera sur le répertoire où vous aurez copié les fichiers PDF et XLS trouvés dans le répertoire « \Traitement » de l’archive

PS: Et bon 1er Avril à tous, ce post n’est pas un poisson 🙂

Retrouvez un autre exemple de traitement itératif avec passage de paramètres sur l’excellent blog de Slawomir Chodnicki

7 Comments

  1. Oui intéressant aussi cet exemple. Une autre possibilité pour faire cela sera d’utiliser « Pentaho Design Studio », ça fera l’objet d’un prochain article sur osbi.fr.

  2. Tiens, ça me rappelle un vague besoin de mon service… 😉
    Et bien je pense récupérer l’exemple tel quel! Merci Sylvain, Thomas de Studyrama

  3. Salut Thomas.

    En effet, cet exemple t’était particulièrement destiné 😉 Mais je sais qu’il a intéressé bcp d’autres personnes 🙂

    Au plaisir

  4. Il est stocké sur googledocs, je viens de réactiver l’accès en public (je comprends pas pquoi il n’y était plus…)
    tu peux réessayer ?

  5. C’est bon le .zip est disponible, pas de problème à l’ouverture des fichiers ktr et kjb dans Kettle.
    Encore Merci! Thomas

Les commentaires sont fermés.