Manipuler des fichiers PDF avec qpdf sur macOS
Introduction
qpdf est un outil en ligne de commande dédié à la transformation de fichiers PDF. Contrairement à d'autres utilitaires qui se contentent de lire ou d'afficher les PDF, qpdf permet de les restructurer en profondeur : fusionner, diviser, extraire des pages, chiffrer, déchiffrer, appliquer des filigranes, et bien plus encore. Léger, rapide et scriptable, il est un compagnon idéal pour automatiser des opérations sur des fichiers PDF sans passer par une interface graphique.
Cet article couvre les opérations les plus courantes avec qpdf 12.x sur macOS. Chaque section est accompagnée des commandes prêtes à l'emploi.
Installation
qpdf s'installe en une commande via Homebrew :
brew install qpdf
Vérifier la version installée :
qpdf --version
(La complétion shell est disponible pour bash et zsh via eval "$(qpdf --completion-zsh)" à ajouter dans votre .zshrc.)
Syntaxe générale
La forme de base d'un appel à qpdf est la suivante :
qpdf [fichier_entrée] [options] [fichier_sortie]
Quelques raccourcis utiles :
- --empty : utiliser un fichier vide comme entrée (utile pour assembler des pages provenant exclusivement d'autres fichiers).
- --replace-input : écraser le fichier d'entrée avec le résultat au lieu de créer un nouveau fichier.
- . (point) : raccourci pour désigner le fichier d'entrée principal, dans le contexte de --pages.
Syntaxe des plages de pages
De nombreuses opérations acceptent une plage de pages. La syntaxe est la suivante :
- 5 : la page 5.
- 1-10 : les pages 1 à 10 incluses.
- 10-1 : les pages 10 à 1, en ordre inverse.
- z : la dernière page (synonyme de r1).
- r3 : la 3e page en partant de la fin.
- 1,3,5-9 : les pages 1, 3, et 5 à 9.
- 1-20,x5,x10 : les pages 1 à 20, sauf les pages 5 et 10.
- 1-z:odd : toutes les pages impaires.
- 1-z:even : toutes les pages paires.
Fusionner plusieurs PDF en un seul
L'opération la plus courante. On utilise --pages avec --empty comme entrée pour partir d'un document vierge :
Concaténer deux fichiers complets
qpdf --empty --pages a.pdf b.pdf -- resultat.pdf
Concaténer trois fichiers avec sélection de pages
qpdf --empty --pages \
a.pdf 1-5 \
b.pdf 3,7,12 \
c.pdf z-1 \
-- resultat.pdf
Ici, on prend les pages 1 à 5 de a.pdf, les pages 3, 7 et 12 de b.pdf, et toutes les pages de c.pdf en ordre inverse.
Ajouter des pages à un PDF existant
Pour conserver les métadonnées (signets, structure) du fichier d'entrée principal et y ajouter des pages :
qpdf principal.pdf --pages . a.pdf b.pdf -- resultat.pdf
(Le point « . » fait référence au fichier d'entrée principal.pdf. Les métadonnées document-level — signets, balises, etc. — sont toujours issues du fichier d'entrée principal.)
Intercaler des pages (collate)
Pour intercaler les pages de deux fichiers au lieu de les concaténer, par exemple une page de chaque fichier en alternance :
qpdf --empty --pages recto.pdf verso.pdf -- \
--collate resultat.pdf
On peut aussi intercaler par groupes de n pages avec --collate=n.
Diviser un PDF en fichiers séparés
Une page par fichier
qpdf document.pdf --split-pages sortie.pdf
Produit sortie-01.pdf, sortie-02.pdf, sortie-03.pdf, etc. Le numéro est inséré automatiquement avant l'extension .pdf.
Par groupes de n pages
qpdf document.pdf --split-pages=5 sortie.pdf
Produit un fichier par groupe de 5 pages (sortie-01-05.pdf, sortie-06-10.pdf, etc.).
Nom de fichier personnalisé avec %d
qpdf document.pdf --split-pages page_%d.pdf
Le %d est remplacé par le numéro de page (page_1.pdf, page_2.pdf, etc.).
Extraire des pages spécifiques
Pour extraire certaines pages d'un PDF dans un nouveau fichier, on combine --empty et --pages avec une plage :
# Extraire les pages 3 à 7
qpdf --empty --pages document.pdf 3-7 -- extrait.pdf
# Extraire uniquement les pages impaires
qpdf --empty --pages document.pdf 1-z:odd -- impaires.pdf
# Extraire la première et la dernière page
qpdf --empty --pages document.pdf 1,z -- premiere_derniere.pdf
Supprimer des pages
qpdf ne possède pas d'option --delete-pages, mais il suffit de sélectionner toutes les pages sauf celles à supprimer grâce au préfixe d'exclusion x :
# Supprimer la page 4
qpdf --empty --pages document.pdf 1-z,x4 -- sans_page4.pdf
# Supprimer les pages 10 à 15
qpdf --empty --pages document.pdf 1-z,x10-15 -- resultat.pdf
Rotation de pages
L'option --rotate permet d'appliquer une rotation par multiples de 90°. Les angles relatifs (précédés de + ou -) sont quasi systématiquement préférables aux angles absolus :
# Rotation de +90° sur toutes les pages
qpdf document.pdf --rotate=+90 resultat.pdf
# Rotation de +180° sur les pages 3 à 5
qpdf document.pdf --rotate=+180:3-5 resultat.pdf
# Rotation de -90° sur la dernière page uniquement
qpdf document.pdf --rotate=-90:z resultat.pdf
(Pour « cimenter » la rotation dans le contenu de la page plutôt que dans les métadonnées, ajouter --flatten-rotation. C'est utile si un lecteur PDF ne respecte pas correctement le champ /Rotate.)
Chiffrement et déchiffrement
Chiffrer un PDF (AES 256 bits)
Le chiffrement 256 bits est le seul recommandé en pratique :
qpdf document.pdf \
--encrypt \
--user-password="lecture" \
--owner-password="proprietaire" \
--bits=256 \
-- \
chiffre.pdf
Le mot de passe utilisateur (user) est demandé à l'ouverture du fichier. Le mot de passe propriétaire (owner) contrôle les permissions (impression, modification, extraction…).
Restreindre les permissions
# Interdire l'impression et la modification
qpdf document.pdf \
--encrypt \
--owner-password="secret" \
--bits=256 \
--print=none \
--modify=none \
-- \
protege.pdf
Les niveaux de restriction pour --print sont none, low (basse résolution) et full (défaut).
Les niveaux pour --modify sont none, assembly, form, annotate et all (défaut).
Déchiffrer un PDF
qpdf --decrypt --password="lecture" chiffre.pdf dechiffre.pdf
Vérifier si un fichier est chiffré
qpdf --is-encrypted document.pdf
echo $?
# 0 = chiffré, 2 = non chiffré
Overlay et underlay (filigrane, en-tête)
L'overlay superpose les pages d'un second PDF par-dessus le document principal (premier plan). L'underlay les place en dessous (arrière-plan). C'est la méthode idéale pour appliquer un filigrane ou un en-tête/pied de page.
Appliquer un filigrane sur toutes les pages
# Filigrane au premier plan
qpdf document.pdf \
--overlay filigrane.pdf --repeat=1 -- \
resultat.pdf
# Filigrane en arrière-plan
qpdf document.pdf \
--underlay filigrane.pdf --repeat=1 -- \
resultat.pdf
L'option --repeat=1 signifie que la page 1 du fichier filigrane est répétée sur chaque page du document principal, une fois les pages --from épuisées (ici aucune n'est spécifiée, donc --repeat prend immédiatement le relais).
Appliquer l'overlay uniquement sur certaines pages
qpdf document.pdf \
--overlay entete.pdf --to=2-z --repeat=1 -- \
resultat.pdf
Ici, l'en-tête est appliqué à partir de la page 2 (on épargne la page de couverture).
Optimisation et réduction de taille
Linéarisation (optimisation web)
La linéarisation réorganise le fichier pour un affichage rapide dans un navigateur (fast web viewing) :
qpdf --linearize document.pdf optimise.pdf
Optimiser les images
qpdf --optimize-images --jpeg-quality=75 document.pdf leger.pdf
qpdf tente de compresser en JPEG les images qui s'y prêtent, uniquement si cela réduit effectivement leur taille.
Recompresser les flux
qpdf --recompress-flate --compression-level=9 \
--object-streams=generate \
document.pdf compresse.pdf
Cette commande recompresse les flux flate au niveau maximal et active les object streams pour regrouper les petits objets.
Inspection et vérification
qpdf offre plusieurs options pour examiner un fichier PDF sans le modifier :
# Nombre de pages
qpdf --show-npages document.pdf
# Vérification structurelle
qpdf --check document.pdf
# Informations sur le chiffrement
qpdf --show-encryption document.pdf
# Vérifier la linéarisation
qpdf --check-linearization document.pdf
# Détail des pages (objets, flux de contenu)
qpdf --show-pages document.pdf
# Pages + images référencées
qpdf --show-pages --with-images document.pdf
(Ces options d'inspection n'acceptent pas de fichier de sortie. Elles affichent leur résultat sur la sortie standard.)
Pièces jointes (fichiers embarqués)
Lister les pièces jointes
qpdf --list-attachments document.pdf
qpdf --list-attachments --verbose document.pdf
Ajouter une pièce jointe
qpdf document.pdf \
--add-attachment facture.xlsx \
--mimetype=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet \
--description="Facture Q1 2026" \
-- \
resultat.pdf
Extraire une pièce jointe
# Écrire le contenu sur stdout, rediriger vers un fichier
qpdf --show-attachment=facture.xlsx document.pdf > facture.xlsx
Supprimer une pièce jointe
qpdf document.pdf --remove-attachment=facture.xlsx resultat.pdf
Nettoyage de métadonnées
Pour produire un PDF « propre », débarrassé d'informations potentiellement sensibles :
qpdf document.pdf \
--remove-info \
--remove-metadata \
--remove-page-labels \
--remove-structure \
propre.pdf
Ces options suppriment respectivement les informations de fichier (auteur, titre…), les métadonnées XMP, les étiquettes de pages explicites et l'arbre de structure (balises d'accessibilité).
Aplatir les annotations
Pour « cimenter » les annotations (commentaires, champs de formulaire, tampons) dans le contenu des pages :
# Aplatir toutes les annotations
qpdf document.pdf --flatten-annotations=all aplati.pdf
# Aplatir uniquement les annotations d'impression
qpdf document.pdf --flatten-annotations=print aplati.pdf
C'est souvent nécessaire avant de diviser un fichier ou de l'envoyer à l'impression pour s'assurer que tout le contenu visible est bien intégré au flux de la page.
Modifier sur place
Toutes les opérations ci-dessus créent un nouveau fichier de sortie. Pour écraser directement le fichier d'entrée, remplacer le nom du fichier de sortie par --replace-input :
qpdf document.pdf --rotate=+90 --replace-input
(Attention : l'opération est irréversible. Faire une copie de sauvegarde au préalable si nécessaire.)
Récapitulatif des commandes
- Fusionner : qpdf --empty --pages a.pdf b.pdf -- resultat.pdf
- Diviser : qpdf document.pdf --split-pages sortie.pdf
- Extraire : qpdf --empty --pages document.pdf 3-7 -- extrait.pdf
- Supprimer : qpdf --empty --pages document.pdf 1-z,x4 -- sans_page4.pdf
- Rotation : qpdf document.pdf --rotate=+90 resultat.pdf
- Chiffrer : qpdf document.pdf --encrypt --bits=256 -- chiffre.pdf
- Déchiffrer : qpdf --decrypt --password="mdp" chiffre.pdf dechiffre.pdf
- Filigrane : qpdf document.pdf --overlay filigrane.pdf --repeat=1 -- resultat.pdf
- Optimiser : qpdf --linearize document.pdf optimise.pdf
- Inspecter : qpdf --check document.pdf
Ressources
L'aide intégrée de qpdf est extrêmement complète et organisée par thème :
# Aide générale
qpdf --help
# Aide sur un sujet précis
qpdf --help=page-selection
qpdf --help=encryption
qpdf --help=overlay-underlay
# Aide sur une option spécifique
qpdf --help=--split-pages
qpdf --help=--rotate
La documentation complète est disponible en ligne :
https://qpdf.readthedocs.io
↑ Haut de page