HOWTO · Python
Lire le PDF en Python
Ce tutoriel montre comment lire un PDF en python.
Sur cette page
L’extraction de texte d’un PDF est utile pour rechercher dans des rapports, analyser des documents ou transférer du texte vers un autre flux de travail. La méthode appropriée dépend de la façon dont le PDF stocke son texte et de votre besoin de préserver la mise en page. Les exemples ci-dessous présentent des modèles d’utilisation courants des API ; ils n’ont pas été exécutés, car aucune preuve d’exécution avec Python n’a été fournie pour cette modification. Vérifiez chaque API par rapport à la version installée dans votre projet. Chaque exemple s’attend à trouver un fichier sample.pdf lisible dans le répertoire courant et signale l’absence du fichier ou du paquet sans provoquer d’erreur non gérée.
Choisir une bibliothèque Python pour lire des PDF
Les cinq bibliothèques présentées ici permettent d’accéder au texte extrait de différentes façons. PyPDF2 expose directement les pages, ce qui est pratique pour traiter une seule page ou parcourir un document. pdfplumber expose le texte des pages et des objets liés à la mise en page, utiles lorsque le positionnement compte. PyMuPDF permet d’extraire le texte page par page au moyen de son API de document. pdfminer.six propose une fonction de haut niveau pour extraire le texte d’un document. textract fournit une interface d’extraction de documents plus générale, dont le comportement peut dépendre des dépendances installées.
Il s’agit de différentes façons de procéder, et non d’un classement universel. Essayez chaque bibliothèque sur la même page représentative de votre PDF, puis vérifiez si le texte, son ordre de lecture et ses espacements conviennent à votre tâche.
Installer la bibliothèque que vous comptez utiliser
Installez uniquement le paquet correspondant à l’approche que vous souhaitez essayer : python -m pip install PyPDF2, python -m pip install pdfplumber, python -m pip install PyMuPDF, python -m pip install pdfminer.six ou python -m pip install textract. Le nom du paquet et celui utilisé pour l’importer en Python ne sont pas toujours identiques : par exemple, pdfminer.six s’importe depuis pdfminer, et PyMuPDF a souvent été importé sous le nom fitz. Consultez la documentation de la version que vous installez avant d’adapter un exemple.
Placez le chemin du PDF dans une variable pour pouvoir le modifier facilement. Ces exemples utilisent un chemin relatif ; utilisez un chemin absolu si le répertoire de travail du script n’est pas celui qui contient le PDF. Les PDF sont des fichiers binaires : les API qui acceptent un fichier ouvert doivent donc recevoir un fichier ouvert avec "rb".
Lire le texte d’un PDF avec PyPDF2
PdfReader fournit une collection de pages. L’exemple ci-dessous extrait le texte de la première page si le document en contient une, puis rassemble le texte extrait de toutes les pages. Une page peut ne contenir aucun texte extractible ; le code remplace donc un résultat None par une chaîne vide. Le gestionnaire de contexte ferme le fichier une fois le traitement terminé.
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
from pathlib import Path
pdf_path = Path("sample.pdf")
if not pdf_path.is_file():
print(f"PDF not found: {pdf_path}")
else:
try:
from PyPDF2 import PdfReader
except ImportError:
print("Install PyPDF2 to run this example.")
else:
try:
with pdf_path.open("rb") as pdf_file:
reader = PdfReader(pdf_file)
if reader.pages:
first_page_text = reader.pages[0].extract_text() or ""
all_pages_text = "\n".join(
page.extract_text() or "" for page in reader.pages
)
print(first_page_text)
except Exception as error:
print(f"PDF could not be read: {error}")
Pour ne traiter qu’une seule page, sélectionnez son index commençant à zéro dans reader.pages et vérifiez que cet index est inférieur au nombre de pages avant de l’utiliser. L’expression qui traite le document entier relie les pages avec des séparateurs de nouvelle ligne, ce qui facilite l’examen des limites entre les pages par rapport à une concaténation sans séparateur. L’extrait affiche la première page ; remplacez le dernier print par print(all_pages_text) pour afficher le texte assemblé du document. Le résultat dépend du PDF et n’est pas présenté ici.
Extraire du texte et des détails de mise en page avec pdfplumber
Utilisez pdfplumber pour examiner le texte page par page et accéder, au besoin, aux informations liées à la mise en page. Cet exemple extrait le texte de chaque page, remplace par une chaîne vide le résultat d’une page sans texte, puis relie les pages avec des nouvelles lignes. Il ne prétend ni reconstituer les tableaux ni garantir l’ordre de lecture : examinez le texte renvoyé pour le document que vous traitez.
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
from pathlib import Path
pdf_path = Path("sample.pdf")
if not pdf_path.is_file():
print(f"PDF not found: {pdf_path}")
else:
try:
import pdfplumber
except ImportError:
print("Install pdfplumber to run this example.")
else:
try:
with pdfplumber.open(pdf_path) as pdf:
text = "\n".join(page.extract_text() or "" for page in pdf.pages)
print(text)
except Exception as error:
print(f"PDF could not be read: {error}")
La bibliothèque expose également des objets de page et des informations de mise en page qui permettent des analyses plus ciblées. Utilisez ces fonctions uniquement si la position ou la structure du document compte, et vérifiez le résultat par rapport à la page d’origine. L’extraction de texte seule ne préserve pas forcément les colonnes comme le lecteur pourrait s’y attendre.
Lire le texte d’un PDF avec PyMuPDF
PyMuPDF ouvre un document et permet d’extraire le texte de chaque page. Le nom d’importation présenté ici est fitz, utilisé dans de nombreux exemples existants ; vérifiez que votre version installée prend en charge cet import. Le modèle suivant rassemble le texte page par page et veille à fermer le document.
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
from pathlib import Path
pdf_path = Path("sample.pdf")
if not pdf_path.is_file():
print(f"PDF not found: {pdf_path}")
else:
try:
import fitz
except ImportError:
print("Install PyMuPDF to run this example.")
else:
try:
with fitz.open(str(pdf_path)) as document:
text = "\n".join(page.get_text() for page in document)
print(text)
except Exception as error:
print(f"PDF could not be read: {error}")
Pour extraire une seule page, accédez-y par son index commençant à zéro après avoir vérifié le nombre de pages du document, puis appelez get_text() sur cette page. Le mode d’extraction peut modifier la représentation du texte ; consultez la documentation de la version installée si vous avez besoin d’un format particulier. Cet article porte sur le texte, et non sur les autres opérations PDF de la bibliothèque.
Extraire du texte avec pdfminer.six
pdfminer.six comprend la fonction de haut niveau extract_text, qui prend le chemin d’un document. Son import provient du paquet pdfminer, même si la distribution installable porte le nom pdfminer.six.
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
from pathlib import Path
pdf_path = Path("sample.pdf")
if not pdf_path.is_file():
print(f"PDF not found: {pdf_path}")
else:
try:
from pdfminer.high_level import extract_text
except ImportError:
print("Install pdfminer.six to run this example.")
else:
try:
text = extract_text(str(pdf_path))
print(text)
except Exception as error:
print(f"PDF could not be read: {error}")
Cet appel de haut niveau constitue un point de départ concis. Pour un contrôle plus fin, pdfminer.six propose une analyse de mise en page de plus bas niveau, mais les réglages doivent être choisis en fonction du document et du résultat souhaité. Ne supposez pas qu’une configuration d’extraction plus détaillée améliorera le résultat pour tous les PDF ; comparez celui-ci aux pages sources.
Lire le texte d’un PDF avec textract
textract utilise une interface process commune à plusieurs types de documents. Pour les PDF, le comportement disponible peut dépendre de programmes externes et de la configuration des paquets ; installer uniquement le paquet Python peut donc ne pas suffire dans certains environnements. L’exemple intercepte une erreur de traitement et la signale, au lieu de considérer qu’une installation réussie prouve que l’extraction est correctement configurée.
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
from pathlib import Path
pdf_path = Path("sample.pdf")
if not pdf_path.is_file():
print(f"PDF not found: {pdf_path}")
else:
try:
import textract
except ImportError:
print("Install textract to run this example.")
else:
try:
extracted = textract.process(str(pdf_path))
except Exception as error:
print(f"Text extraction could not be completed: {error}")
else:
print(extracted.decode("utf-8", errors="replace"))
Avec ce modèle d’utilisation, process renvoie des octets ; le décodage les convertit en chaîne Python pour l’affichage ou le traitement ultérieur du texte. Si le traitement signale un outil manquant ou une entrée non prise en charge, consultez les instructions du paquet pour connaître le moteur PDF requis dans votre environnement.
Comprendre les limites de l’extraction et choisir une bibliothèque
Un PDF peut contenir du texte sélectionnable, des fragments de texte positionnés, des images de pages numérisées ou un mélange de ces éléments. Un extracteur de texte ne peut pas renvoyer les mots présents uniquement sous forme de pixels, à moins qu’une étape d’OCR soit disponible et utilisée. Même lorsque le texte est intégré, les colonnes, tableaux, en-têtes et l’ordre de lecture peuvent être représentés différemment de leur apparence sur la page. Comparez le texte extrait au PDF source avant de vous y fier pour une analyse.
Commencez par PyPDF2 si un traitement direct page par page suffit. Essayez pdfplumber lorsque les détails de mise en page sont utiles à l’examen. Utilisez PyMuPDF si son API de texte par page convient à votre flux de travail, et pdfminer.six si vous souhaitez utiliser son appel d’extraction de haut niveau ou explorer ses options de mise en page. Envisagez textract si son interface plus générale vous est utile et si les exigences de traitement des PDF sont satisfaites. Aucune de ces bibliothèques ne garantit le meilleur texte pour chaque fichier.
Pour comparer concrètement les options, extrayez une page représentative avec la bibliothèque envisagée, puis vérifiez si des mots manquent, si les colonnes sont entremêlées ou si les sauts de ligne compliquent l’analyse ultérieure. Gardez le PDF d’origine à disposition pour vérifier les valeurs importantes. Si le texte est absent parce que la page est numérisée, examinez séparément les solutions d’OCR ; changer de bibliothèque d’extraction de texte ne résoudra peut-être pas le problème.