Ajouter une image à toutes les pages d’un PDF

Pour les « gros » fichiers PDF, il arrive parfois de devoir ajouter une image sur chacune des pages. Cet article vous propose une solution gratuite pour ajouter automatiquement une image à toutes les pages d’un fichier PDF. La solution proposée est un script Python :

Partie 1 : l’installation de Python et des modules complémentaires pour ajouter une image automatiquement à toutes les pages d’un PDF

Si vous ne vous y connaissez pas du tout en Python, il va d’abord falloir l’installer : https://www.python.org/downloads/ la dernière version vous est proposée. Installez la. Par défaut Python s’installera dans C:\Python\Pythonxy (xy : numéro de version).

Puis il vous faudra deux modules complémentaires Python :

Reportlab sur https://pypi.org/project/reportlab/ (download files sur la gauche) cherchez le nom contenant « win » (pour Windows) et 32 si vous avez un Windows 32 bits ou 64 si vous avez un 64 bits (si vous ne connaissez pas votre version, quelques infos ici)

Et PyPDF2 sur https://pypi.org/project/PyPDF2/ idem qu’avant download files sur la gauche. Il n’y a normalement qu’un fichier.

Pour l’installation si vous n’avez pas de connaissance en programmation la manipulation est un peu complexe. Placez les deux fichiers correspondant aux modules complémentaires dans le dossier d’installation de Python (C:\Python\Pythonxy). Puis cliquez droit sur le bouton Windows en bas à gauche :

Ajouter une image à un PDF en Python

Cliquez sur « Exécuter ». Tapez « cmd » (sans les guillemets) puis validez par Entrée. La boite de commande s’ouvre :

Boite de commande pour ajout images PDF

Il va alors falloir trouver votre dossier d’installation de Python :

La commande « cd.. » permet de revenir au dossier parent, et la commande cd « nomdudossier » (sans les guillemets, vous permet d’aller dans un dossier contenu dans le dossier actuellement actif).

Pour mon exemple je fais donc cd.. puis entrée pour revenir à :

Boite de commande

et à nouveau cd.. pour aller sur C:\, et je vais chercher ensuite mon dossier Python avec cd Python puis cd Python36 (car ma version de Python est la 3.6) :

Boite de commande finale PDF

je vais alors pouvoir installer mes deux modules complémentaires avec les commandes :

« python -m pip install reportlab » (sans guillemets puis validez par entrée, attendez ensuite l’installation)

« python -m pip install PyPDF2 » (idem)

 

Partie 2 : le script Python permettant d’ajouter un tampon à toutes les pages de votre fichier PDF

Maintenant que Python est installé vous allez pouvoir créer le script qui nous servira. Ouvrez le bloc-notes ou un éditeur de texte puis copiez-collez ce code :

[pastacode lang= »python » manual= »import%20os%0Afrom%20reportlab.pdfgen%20import%20canvas%0Afrom%20PyPDF2%20import%20PdfFileWriter%2C%20PdfFileReader%0A%0Aif%20not%20os.path.exists(%22temp%22)%3A%20%23On%20v%C3%A9rifie%20si%20le%20dossier%20temporaire%20qu’on%20utilise%20pour%20nos%20tampons%20est%20d%C3%A9j%C3%A0%20cr%C3%A9%C3%A9%2C%20sinon%20on%20le%20cr%C3%A9e%0A%09os.makedirs(%22temp%22)%0A%0A%23%20On%20pr%C3%A9pare%20le%20fichier%20qui%20contiendra%20le%20tampon%20PDF%0Ac1%20%3D%20canvas.Canvas(‘temp%2Fcanvas.pdf’)%0A%0A%23%20On%20ins%C3%A9re%20l’image%20souhait%C3%A9e%20dans%20le%20fichier%20pr%C3%A9c%C3%A9dent%20%C3%A0%20la%20position%20souhait%C3%A9e%20(‘adresseimage.png’%2C%20x%2C%20y)%0Ac1.drawImage(‘montampon.png’%2C%2050%2C%2050)%0A%0Ac1.save()%0A%0A%23%20On%20ouvre%20le%20fichier%20contenant%20le%20tamon%0Amontampon%20%3D%20PdfFileReader(open(%22temp%2Fcanvas.pdf%22%2C%20%22rb%22))%0A%0A%23%20On%20ouvre%20le%20fichier%20sur%20lequel%20le%20tampon%20doit%20%C3%AAtre%20ins%C3%A9r%C3%A9%0Aoutput_file%20%3D%20PdfFileWriter()%0Ainput_file%20%3D%20PdfFileReader(open(%22fichieramodifier.pdf%22%2C%20%22rb%22))%0A%0A%23%20On%20r%C3%A9cup%C3%A8re%20le%20nombre%20de%20pages%20du%20fichier%0Apage_count%20%3D%20input_file.getNumPages()%0A%0A%23%20On%20ajoute%20%C3%A0%20chaque%20page%20le%20tampon%20avec%20une%20boucle%20pour%0Afor%20page_number%20in%20range(page_count)%3A%0A%20%20%20%20input_page%20%3D%20input_file.getPage(page_number)%0A%20%20%20%20input_page.mergePage(montampon.getPage(0))%0A%20%20%20%20output_file.addPage(input_page)%0A%0Awith%20open(%22fichier-final.pdf%22%2C%20%22wb%22)%20as%20outputStream%3A%0A%20%20%20%20output_file.write(outputStream)%0A%0Aprint(%22Fini%20!%22)%0A%0Aos.system(%22pause%22) » message= » » highlight= » » provider= »manual »/]

Pensez à modifier le nom « montampon.png » par celui de votre image et celui du fichier « fichieramodifier.pdf ». Changez également les coordonnées de votre tampon (50, 50 dans mon exemple) par celles qui vous intéressent. Vous pouvez ensuite faire plusieurs essais : cliquez sur « Enregistrer sous » avec le nom tampon.py. Puis double cliquez sur le fichier tampon.py pour lancer le script. À chaque fois un document « fichier-final.pdf » est créé.

Le fonctionnement de ce code est le suivant :

  • on crée un fichier contenant le « tampon » qui ira sur chaque page.
  • on l’enregistre dans un fichier.
  • on ouvre le fichier à modifier et on ajoute le tampon sur chaque page.
  • on enregistre un nouveau fichier PDF !

Commentez pour toute remarque ou question sur le script ou Python !

2 réflexions au sujet de “Ajouter une image à toutes les pages d’un PDF”

  1. Bonjour,

    Comment faire pour modifier la taille du tampon s’il vous plaît?
    Car j’ai fait un scan pdf d’un coup de tampon sur une feuille blanche, ensuite avec screenpresso j’ai découpé le tampon et je l’ai enregistré au format .png
    Or, le tampon ressort énorme sur le document final :/

    Help please 🙂

    Et au passage, merci beaucoup pour ce travail!!!!

    Répondre
    • Bonjour,

      merci pour le commentaire. On peut modifier la taille dans les paramètres de drawImage : c1.drawImage(‘montampon.png’, 50, 50, width=40, height=30) avec width et height la largeur et la hauteur de l’image.

      Bonne journée !

      Répondre

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.