Convertir un PDF en texte avec pdftotext sur macOS
Introduction
pdftotext est un utilitaire en ligne de commande qui extrait le contenu textuel d'un fichier PDF et le convertit en fichier texte brut. Il fait partie de la suite poppler, un ensemble d'outils de manipulation de PDF installable via Homebrew. Rapide et scriptable, pdftotext est la solution idéale pour rendre un PDF exploitable par d'autres outils texte (grep, awk, sed…).
(Limitation : pdftotext ne peut extraire que le texte vectoriel intégré au PDF. Pour les PDF issus de scans (images), il faut recourir à un outil d'OCR comme Tesseract.)
Installation
pdftotext est inclus dans le paquet poppler :
brew install poppler
En plus de pdftotext, cette installation fournit toute une suite d'utilitaires : pdfinfo, pdfimages, pdffonts, pdftohtml, pdftoppm, pdftocairo, pdfattach, pdfdetach, pdfseparate, pdfunite et pdfsig.
Conversion simple
# Produit document.txt automatiquement
pdftotext document.pdf
# Spécifier le nom du fichier de sortie
pdftotext document.pdf sortie.txt
# Envoyer le texte sur stdout (affichage terminal)
pdftotext document.pdf -
Si le fichier de sortie n'est pas spécifié, pdftotext crée automatiquement un fichier portant le même nom avec l'extension .txt. Si le fichier de sortie est - (tiret), le texte est envoyé sur la sortie standard.
Sélection de pages
Les options -f (first) et -l (last) permettent de ne convertir qu'une plage de pages :
# Convertir uniquement les pages 2 à 5
pdftotext -f 2 -l 5 document.pdf extrait.txt
# Convertir uniquement la première page
pdftotext -f 1 -l 1 document.pdf premiere_page.txt
Mise en page
Par défaut, pdftotext réorganise le texte dans l'ordre de lecture en supprimant la mise en page physique (colonnes, césures…). L'option -layout permet de conserver le positionnement spatial d'origine :
pdftotext -layout document.pdf sortie.txt
Pour les documents tabulaires, l'option -fixed force un pas de caractère fixe (en points) et active automatiquement le mode layout :
pdftotext -fixed 6 document.pdf sortie.txt
Options utiles
- -nopgbrk : ne pas insérer de saut de page (form feed) entre les pages.
- -nodiag : ignorer le texte en diagonale (filigranes de type « CONFIDENTIEL » ou « BROUILLON »).
- -enc encodage : encodage de sortie (défaut : UTF-8). Utiliser -listenc pour lister les encodages disponibles.
- -eol unix|dos|mac : convention de fin de ligne (LF, CR+LF ou CR).
- -x, -y, -W, -H : extraire uniquement le texte d'une zone rectangulaire (coordonnées en pixels depuis le coin supérieur gauche).
- -colspacing n : espacement (en fraction de la taille de police) à partir duquel un texte adjacent est considéré comme une nouvelle colonne (défaut : 0.7).
- -r n : résolution en DPI (défaut : 72).
- -htmlmeta : générer un fichier HTML simple (texte dans des balises <pre> avec les métadonnées en en-tête).
- -bbox : générer un fichier XHTML contenant les coordonnées de chaque mot (bounding box).
- -tsv : générer un fichier TSV contenant les coordonnées de chaque bloc, ligne et mot.
- -upw mot_de_passe : mot de passe utilisateur pour ouvrir un PDF protégé.
- -opw mot_de_passe : mot de passe propriétaire (contourne toutes les restrictions).
- -q : mode silencieux.
Conversion en masse
Pour convertir tous les fichiers PDF du répertoire courant en fichiers texte :
for f in *.pdf; do pdftotext "$f" "${f%.pdf}.txt"; done
La substitution ${f%.pdf}.txt retire l'extension .pdf du nom de fichier et la remplace par .txt. Ainsi, rapport.pdf devient rapport.txt, facture.pdf devient facture.txt, etc.
Variante avec mise en page conservée et sans sauts de page :
for f in *.pdf; do
pdftotext -layout -nopgbrk "$f" "${f%.pdf}.txt"
done
Variante récursive (sous-dossiers inclus) :
find . -name "*.pdf" -exec sh -c \
'pdftotext "$1" "${1%.pdf}.txt"' _ {} \;
Exemples pratiques
# Chercher un mot dans un PDF
pdftotext document.pdf - | grep -i "facture"
# Compter le nombre de mots d'un PDF
pdftotext document.pdf - | wc -w
# Copier le texte d'un PDF dans le presse-papier macOS
pdftotext document.pdf - | pbcopy
# Chercher un mot dans tous les PDF d'un dossier
for f in *.pdf; do
if pdftotext "$f" - | grep -qi "confidentiel"; then
echo "Trouvé dans : $f"
fi
done
Ressources
- Site officiel de Poppler : https://poppler.freedesktop.org/
- Page Homebrew de poppler : https://formulae.brew.sh/formula/poppler
↑ Haut de page