1. Diviser un document PDF en pages
Les bases de la division d'un document PDF avec PyPDF2
PyPDF2 offre une classe PdfReader
pour ouvrir et lire des fichiers PDF, ainsi qu'une classe PdfWriter
pour écrire des pages dans un nouveau document PDF. Pour diviser un document en pages distinctes, on utilise add_page()
dans PdfWriter
pour sauvegarder les pages nécessaires dans des fichiers séparés.
Sauvegarder chaque page d'un PDF comme un document séparé
Ce code divise un document en créant un fichier PDF distinct pour chaque page du fichier d'origine.
import PyPDF2
# Ouvrir le fichier PDF
with open("sample.pdf", "rb") as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
# Parcourir chaque page
for page_num in range(len(pdf_reader.pages)):
pdf_writer = PyPDF2.PdfWriter()
# Extraire la page et l'ajouter dans un nouveau PDF
page = pdf_reader.pages[page_num]
pdf_writer.add_page(page)
# Sauvegarder la page actuelle comme un fichier PDF distinct
output_filename = f"page_{page_num + 1}.pdf"
with open(output_filename, "wb") as output_file:
pdf_writer.write(output_file)
print("Chaque page est sauvegardée comme fichier distinct.")
Dans cet exemple, chaque page du document d'origine est sauvegardée dans un fichier distinct page_1.pdf
, page_2.pdf
et ainsi de suite.
2. Extraire une plage de pages
Parfois, il faut sauvegarder non pas chaque page, mais une plage spécifique, par exemple de la page 1 à 5. Pour cela, on peut spécifier les pages précises dans une boucle.
import PyPDF2
with open("sample.pdf", "rb") as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
pdf_writer = PyPDF2.PdfWriter()
# Définir la plage de pages, par exemple, de la page 1 à 5
start_page = 1
end_page = 5
for page_num in range(start_page - 1, end_page): # La numérotation commence à 0
page = pdf_reader.pages[page_num]
pdf_writer.add_page(page)
# Sauvegarder la plage de pages comme un nouveau PDF
with open("pages_1_to_5.pdf", "wb") as output_file:
pdf_writer.write(output_file)
print("Plage de pages sauvegardée avec succès.")
Ce code extrait les pages de 1 à 5 et les sauvegarde dans le fichier pages_1_to_5.pdf
.
3. Sauvegarder plusieurs plages
Si vous avez besoin d'extraire plusieurs plages de pages et de les sauvegarder dans des fichiers distincts, vous pouvez utiliser une fonction qui accepte le début et la fin d'une plage.
import PyPDF2
def save_page_range(input_pdf, output_pdf, start_page, end_page):
with open(input_pdf, "rb") as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
pdf_writer = PyPDF2.PdfWriter()
for page_num in range(start_page - 1, end_page):
page = pdf_reader.pages[page_num]
pdf_writer.add_page(page)
with open(output_pdf, "wb") as output_file:
pdf_writer.write(output_file)
print(f"Pages {start_page}–{end_page} sauvegardées dans {output_pdf}")
# Utiliser la fonction pour extraire différentes plages
save_page_range("sample.pdf", "section_1.pdf", 1, 3)
save_page_range("sample.pdf", "section_2.pdf", 4, 6)
Ce code crée deux plages sauvegardées : les pages de 1 à 3 dans section_1.pdf
et de 4 à 6 dans section_2.pdf
.
4. Traitement de masse des documents PDF
Automatiser la division de PDF pour toutes les pages d'un dossier
Si vous devez diviser chaque page de tous les documents PDF dans un dossier donné, vous pouvez créer un script qui traitera automatiquement chaque fichier.
import PyPDF2
import os
# Chemin vers le dossier contenant les fichiers PDF
folder_path = "pdf_folder"
# Automatisation de la division des PDF dans le dossier
for filename in os.listdir(folder_path):
if filename.endswith(".pdf"):
file_path = os.path.join(folder_path, filename)
with open(file_path, "rb") as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
# Diviser le fichier en pages distinctes
for page_num in range(len(pdf_reader.pages)):
pdf_writer = PyPDF2.PdfWriter()
page = pdf_reader.pages[page_num]
pdf_writer.add_page(page)
# Créer le nom du fichier de sortie
output_filename = f"{filename[:-4]}_page_{page_num + 1}.pdf"
output_path = os.path.join(folder_path, output_filename)
# Sauvegarder la page
with open(output_path, "wb") as output_file:
pdf_writer.write(output_file)
print("Toutes les pages de chaque fichier PDF dans le dossier ont été sauvegardées avec succès.")
Ce script traite automatiquement chaque fichier PDF dans le dossier pdf_folder
et sauvegarde chaque page comme un fichier PDF distinct nommé <nom_du_fichier>_page_<numéro>.pdf
.
5. Pourquoi diviser des fichiers PDF ?
Comme disait un grand développeur, après trop d'heures à coder : "Pourquoi ?". Diviser des documents PDF peut être utile dans diverses situations :
- Extraction des pages clés : Partagez uniquement les pages nécessaires, sans envoyer "Guerre et Paix" en entier à vos collègues.
- Créer des compilations : Sauvegardez des chapitres importants de différents documents dans un seul fichier pour des besoins d'étude ou professionnels.
- Archivage : Stockez des données importantes, page par page, pour éviter de perdre des infos parmi des pages inutiles.
Voilà où notre héros PyPDF2 entre en scène pour simplifier votre vie !
6. Petits soucis et astuces pour les éviter
En travaillant avec des documents PDF, vous pouvez rencontrer certains défis. Par exemple, la numérotation des pages commence à zéro dans PyPDF2, alors n'oubliez pas d'en tenir compte lorsque vous spécifiez les pages nécessaires. Rien de pire que de perdre du temps à extraire les mauvaises pages !
Aussi, lors de la gestion des fichiers ouverts/fermés, assurez-vous que tous les close()
sont bien appelés. Un fichier mal fermé peut causer des maux de tête, surtout si c'est un manuel Oracle.
Application dans la vie réelle
L'utilisation de cette méthode est utile non seulement pour vos documents personnels. Par exemple, si vous travaillez dans un cabinet juridique et que vous devez rapidement préparer des sections spécifiques d'un dossier complexe pour le tribunal, diviser un PDF en parties peut vous faire gagner un temps précieux.
Ces techniques peuvent également être utilisées pour préparer du matériel éducatif, extraire des sections importantes de rapports techniques, et bien plus encore. La vraie magie réside dans la simplicité avec laquelle vous pouvez automatiser ces tâches répétitives !
GO TO FULL VERSION