Dernière mise à jour: 29 janvier 2025

Titre - Travailler avec des fichiers PDF en Python

Dans cet article, nous vous guiderons sur comment travailler avec des fichiers PDF en utilisant Python. Pour cela, nous utiliserons la bibliothèque pypdf.

En utilisant la bibliothèque pypdf, nous vous montrerons comment effectuer les opérations suivantes en Python :

  • Extraction de texte de PDF
  • Rotation des pages de PDF
  • Fusion de plusieurs PDF
  • Division de PDF en fichiers séparés
  • Ajout de filigranes aux pages PDF

Remarque: Cet article couvre de nombreux détails précieux, n’hésitez donc pas à passer aux sections qui vous intéressent le plus ! Le contenu est organisé pour une navigation facile, afin que vous puissiez rapidement vous concentrer sur ce qui vous est le plus pertinent.

Illustration - Travailler avec des fichiers PDF en Python

Codes d’exemple

Vous pouvez télécharger tout le code d’exemple utilisé dans cet article depuis le lien suivant. Il comprend le code, les fichiers d’entrée et les fichiers de sortie.

Installer pypdf

Pour installer pypdf, exécutez simplement la commande suivante dans votre terminal ou invite de commande :

pip install pypdf

Remarque: La commande ci-dessus est sensible à la casse.

1. Extraction de texte d’un fichier PDF en utilisant Python

Explication du Code

1. Création d’un objet lecteur de PDF

reader = PdfReader(pdf_file)
  • PdfReader(pdf_file) charge le fichier PDF dans un objet lecteur.
  • Cet objet permet d’accéder aux pages et à leur contenu.

2. Boucle à travers les pages

for page_number, page in enumerate(reader.pages, start=1):
  • reader.pages renvoie une liste de pages dans le PDF.
  • enumerate(..., start=1) assigne un numéro de page à partir de 1.

3. Impression du texte extrait

    print(f"Page {page_number}:")
    print(page.extract_text())
    print("-" * 50)  # Séparateur pour la lisibilité
  • page.extract_text() extrait le contenu texte de la page actuelle.
  • Le script imprime le texte extrait avec le numéro de page.
  • "-" * 50 imprime une ligne de séparation (--------------------------------------------------) pour une meilleure lisibilité.

Fichier PDF d’entrée utilisé dans le code

Sortie du Code

2. Rotation des pages PDF en utilisant Python

Explication du Code

Le code permet essentiellement de faire pivoter la première page de 90° dans le sens horaire et de sauvegarder le PDF modifié sans affecter les autres pages.

1. Importer les classes requises

from pypdf import PdfReader, PdfWriter
  • PdfReader: Lit le PDF d’entrée.
  • PdfWriter: Crée un nouveau PDF avec des modifications.

2. Définir les chemins des fichiers d’entrée et de sortie

input_pdf = "pdf-to-rotate/input.pdf"
output_pdf = "pdf-to-rotate/rotated_output.pdf"
  • Le script lit à partir de input.pdf et sauvegarde le fichier modifié sous le nom de rotated_output.pdf.

3. Lire le PDF et créer un objet Writer

reader = PdfReader(input_pdf)
writer = PdfWriter()
  • reader charge le PDF existant.
  • writer est utilisé pour stocker les pages modifiées.

4. Faire pivoter la première page de 90 degrés

page = reader.pages[0]
page.rotate(90)  # Pivoter de 90 degrés dans le sens horaire
writer.add_page(page)
  • Extrait la page 1, la fait pivoter de 90 degrés, et l’ajoute au nouveau PDF.

5. Ajouter les pages restantes sans modifications

for i in range(1, len(reader.pages)):
    writer.add_page(reader.pages[i])
  • Parcourt les pages restantes et les ajoute telles quelles.

6. Sauvegarder le nouveau PDF

with open(output_pdf, "wb") as file:
    writer.write(file)
  • Ouvre rotated_output.pdf en mode écriture-binaire et enregistre le nouveau PDF.

7. Imprimer la confirmation

print(f"Rotated page saved to {output_pdf}")
  • Affiche un message de succès.

Fichier PDF d’entrée utilisé dans le code et sa sortie pivotée

Capture d’écran Capture d’écran de la page pivotée dans le PDF en utilisant Python

3. Fusionner des fichiers PDF en utilisant Python

Ce script Python démontre comment fusionner plusieurs fichiers PDF d’un répertoire en un seul PDF en utilisant la bibliothèque PyPDF.

Explication du Code

  • Ce script fusionne automatiquement tous les fichiers PDF trouvés dans le répertoire spécifié (pdfs-to-merge) en un seul fichier de sortie (merged_output.pdf).
  • Il s’assure que le répertoire de sortie existe et ajoute les pages de chaque PDF dans l’ordre où elles sont listées.
  • Il génère le fichier final fusionné dans le sous-répertoire output-dir.

Détail du Code

1. Importer les bibliothèques

import os
from pypdf import PdfReader, PdfWriter
  • os: Utilisé pour interagir avec le système de fichiers, tel que la lecture de répertoires et la gestion des chemins de fichiers.
  • PdfReader: Lit le contenu d’un fichier PDF.
  • PdfWriter: Crée et écrit un nouveau fichier PDF.

2. Définir le répertoire et fichier de sortie

directory = "pdfs-to-merge"
output_file = "output-dir/merged_output.pdf"
  • directory: Spécifie le dossier où sont stockés les fichiers PDF.
  • output_file: Définit le chemin et le nom de sortie du PDF fusionné.

3. Créer le répertoire de sortie s’il n’existe pas

os.makedirs(os.path.join(directory, "output-dir"), exist_ok=True)
  • Cela s’assure que le répertoire de sortie existe, et s’il n’existe pas, il le crée.

4. Créer un objet PdfWriter

writer = PdfWriter()
  • writer est utilisé pour collecter et combiner toutes les pages des PDF.

5. Itérer sur tous les fichiers PDF du répertoire

for file_name in sorted(os.listdir(directory)):
    if file_name.endswith(".pdf"):
        file_path = os.path.join(directory, file_name)
        print(f"Adding: {file_name}")
  • Cette boucle passe en revue tous les fichiers dans le répertoire spécifié, en vérifiant les fichiers avec l’extension .pdf. Elle utilise sorted() pour les traiter dans l’ordre alphabétique.

6. Lire chaque PDF et ajouter les pages au Writer

reader = PdfReader(file_path)
writer.append(reader)
  • Pour chaque PDF, PdfReader lit le fichier, puis toutes les pages de ce PDF sont ajoutées à writer.

7. Écrire le PDF fusionné dans un fichier de sortie

output_path = os.path.join(directory, output_file)
with open(output_path, "wb") as output_pdf:
    writer.write(output_pdf)
  • Après avoir collecté toutes les pages, writer.write() écrit le PDF fusionné sur le chemin de sortie spécifié.

8. Imprimer la confirmation

print(f"Merged PDF saved as: {output_path}")
  • Imprime un message de succès confirmant l’emplacement du fichier PDF fusionné sauvegardé.

Fichiers PDF d’entrée utilisés dans le code et PDF de sortie fusionné

4. Diviser un PDF en utilisant Python

Explication du Code

Le script Python ci-dessus divise un PDF en pages séparées en utilisant la bibliothèque PyPDF. Il s’assure d’abord que le répertoire de sortie existe, puis lit le fichier PDF d’entrée. Le script parcourt chaque page, crée un nouvel objet PdfWriter, et enregistre chaque page en tant que fichier PDF individuel. Les fichiers de sortie sont nommés séquentiellement (ex. page_1.pdf, page_2.pdf) et stockés dans le dossier output-dir. Enfin, il imprime un message de confirmation pour chaque fichier créé et notifie lorsque le processus est terminé.

Fichier PDF d’entrée et fichiers de sortie divisés

5. Ajouter un filigrane à un PDF en utilisant Python

Vous pouvez ajouter un filigrane à un PDF en utilisant la bibliothèque PyPDF en superposant un PDF de filigrane sur un PDF existant. Assurez-vous que le PDF de filigrane ne comporte qu’une seule page pour qu’il s’applique correctement à chaque page du PDF principal.

Explication du Code

Le script Python ci-dessus lit un PDF d’entrée, extrait un PDF de filigrane d’une seule page, superpose le filigrane sur chaque page du PDF d’entrée, et sauvegarde le PDF final avec le filigrane.

Détail du Code

Voici une brève explication de chaque partie

1. Importer les classes requises

from pypdf import PdfReader, PdfWriter
  • PdfReader est utilisé pour lire les PDF existants.
  • PdfWriter est utilisé pour créer et écrire un nouveau PDF.

2. Définir les chemins de fichiers

input_pdf = "pdf-to-watermark/input.pdf"
watermark_pdf = "pdf-to-watermark/watermark.pdf"
output_pdf = "pdf-to-watermark/output_with_watermark.pdf"
  • input_pdf: Le PDF original auquel le filigrane sera ajouté.
  • watermark_pdf: Un PDF distinct d’une page servant de filigrane.
  • output_pdf: Le fichier de sortie qui contiendra les pages filigranées.

3. Lire les PDF

reader = PdfReader(input_pdf)
watermark = PdfReader(watermark_pdf)
  • reader: Lit le PDF d’entrée.
  • watermark: Lit le PDF de filigrane.

4. Créer un objet Writer

writer = PdfWriter()
  • Ceci sera utilisé pour créer le PDF final avec filigrane.

5. Extraire la page du filigrane

watermark_page = watermark.pages[0]
  • On suppose que le PDF de filigrane comprend uniquement une page, qui est utilisée pour la surimpression sur toutes les pages.

6. Boucle à travers les pages PDF d’entrée & fusion du filigrane

for page in reader.pages:
    # Fusionner le filigrane avec la page actuelle
    page.merge_page(watermark_page)
    
    # Ajouter la page fusionnée au writer
    writer.add_page(page)
  • Itère à travers chaque page de input_pdf.
  • merge_page(watermark_page) superpose le filigrane sur la page actuelle.
  • Ajoute la page modifiée au writer.

7. Sauvegarder le PDF avec filigrane

with open(output_pdf, "wb") as output_file:
    writer.write(output_file)
  • Écrit les pages modifiées dans un nouveau fichier PDF.

8. Imprimer la confirmation

print(f"Watermarked PDF saved as: {output_pdf}")
  • Affiche le chemin du fichier de sortie pour confirmation.

Fichier PDF d’entrée, fichier PDF de filigrane, et fichier PDF avec filigrane en sortie

Capture d’écran Capture d’écran d’un PDF avec filigrane en utilisant Python

Conclusion

Dans ce guide, nous avons exploré les opérations PDF essentielles en Python, y compris l’extraction de texte, la rotation des pages, la fusion, la division, et l’ajout de filigranes. Avec ces compétences, vous pouvez maintenant créer votre propre gestionnaire de PDF et automatiser diverses tâches PDF efficacement.