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 :


Syntaxe des plages de pages

De nombreuses opérations acceptent une plage de pages. La syntaxe est la suivante :


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


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