Le format de fichier PDF expliqué : anatomie, couches et normes
Qu'y a-t-il réellement à l'intérieur d'un PDF ? Un schéma annoté et un glossaire couvrant les quatre sections physiques (en-tête, corps, xref, trailer), les six couches de contenu (texte, images, polices, annotations, vecteurs, signatures), les métadonnées et les normes ISO (PDF/A, PDF/X, PDF/UA, PDF/E, PDF/VT) qui s'y superposent.
Un PDF n'est pas une chose unique. C'est un conteneur binaire avec une structure spécifique sur disque, un ensemble de couches de contenu empilées à l'intérieur de ce conteneur, et une famille de normes ISO construites sur la spécification de base. Ouvrez-en un dans un éditeur hexadécimal et la structure est visible en texte brut sur les premières lignes. Ouvrez-en un dans un visualiseur et les couches se rendent ensemble comme une seule page.
Ce guide est une référence annotée : la structure physique du fichier, les couches de contenu que contient un corps, les métadonnées qui entourent le tout, et les normes (PDF/A, PDF/X, PDF/UA, PDF/E, PDF/VT) qui le contraignent pour des cas d'utilisation spécifiques.

Vous souhaitez utiliser ce schéma sur votre blog ? Copiez ce code d'intégration :
Les Quatre Sections Physiques
Chaque PDF sur disque a la même structure en quatre parties, dans cet ordre :
1. En-tête (Header)
La première ligne du fichier. Commence toujours par %PDF- suivi d'un numéro de version :
%PDF-1.7Les versions vont de 1.0 (publiée en 1993) à 2.0 (publiée en 2017, actuelle). L'en-tête est suivi d'une ligne de commentaire avec des octets binaires qui signalent à FTP et à d'autres outils de transport qu'il s'agit d'un fichier binaire.
2. Corps - Objets Indirects
La majeure partie du fichier. Chaque page, police, image, annotation et champ de formulaire est un objet indirect numéroté :
1 0 obj
<< /Type /Catalog /Pages 2 0 R >>
endobj
2 0 obj
<< /Type /Pages /Kids [3 0 R] /Count 1 >>
endobj
3 0 obj
<< /Type /Page /Parent 2 0 R /Contents 4 0 R /Resources << ... >> >>
endobjChaque objet a un ID (le numéro avant 0 obj), un numéro de génération (0, utilisé pour les mises à jour incrémentielles), et une charge utile entre << et >> pour les dictionnaires ou stream et endstream pour les flux binaires (données d'image, données de police, contenu compressé).
Les objets se référencent mutuellement avec la syntaxe <id> <gen> R (par exemple, 3 0 R signifie "objet 3, génération 0"). C'est ainsi qu'une page référence la police qu'elle utilise, ou qu'un catalogue référence la racine de l'arbre des pages.
3. Table de Références Croisées (xref)
Une table de recherche par décalage d'octets. Pour chaque objet du corps, la table xref enregistre sa position absolue en octets dans le fichier :
xref
0 6
0000000000 65535 f
0000000017 00000 n
0000000089 00000 n
0000000172 00000 n
0000000299 00000 n
0000000453 00000 nC'est ce qui rend les PDF accessibles de manière aléatoire. Un visualiseur peut lire la table xref, sauter directement au décalage d'octets de l'objet 3, et afficher cette page sans analyser le reste du fichier. C'est pourquoi les PDF d'un seul chapitre s'ouvrent instantanément même lorsque le fichier source fait 500 pages.
4. Trailer
La dernière section. Indique à l'analyseur où trouver la table xref et quel objet est la racine :
trailer
<< /Size 6 /Root 1 0 R /Info 7 0 R >>
startxref
1893
%%EOFLa valeur startxref est le décalage en octets de la table xref. Le marqueur %%EOF est la fin littérale du fichier. Les trailers sont ce qui rend possibles les mises à jour incrémentielles : ajouter un nouveau xref + trailer à la fin permet d'ajouter des objets sans réécrire tout le fichier.
Les Six Couches de Contenu
À l'intérieur du corps, le contenu est stocké sur six types de couches. Chaque page PDF rendue est un composite de ces couches :
1. Texte
Commandes de positionnement de glyphes et références de polices, pas des chaînes de texte. Un PDF stocke des instructions comme "dessiner le glyphe 42 de la police F3 à la position (120, 540)" plutôt que "dessiner la lettre A ici". C'est pourquoi le texte est sélectionnable et consultable : le visualiseur remappe les identifiants de glyphes aux points de code Unicode via un mappage ToUnicode (ou un CMap pour les polices CJK).
Lorsque le texte manque d'un mappage ToUnicode, vous obtenez le problème classique "PDF avec texte sélectionnable qui se copie en données erronées". Le texte est visible, mais le mappage glyphe-Unicode est cassé ou absent.
2. Images
Stockées sous forme de flux intégrés dans l'un des formats suivants :
- JPEG (filtre DCTDecode) : photographies, le plus courant
- JPEG2000 (JPXDecode) : compression plus élevée, moins courant
- Équivalent PNG (filtre FlateDecode + Predictor) : captures d'écran, dessins au trait
- CCITT Group 4 (filtre CCITTFaxDecode) : texte numérisé noir et blanc, utilisé dans les numérisations d'archives
- JBIG2 (JBIG2Decode) : images bimodes, courant dans les documents OCRisés
Les images peuvent être sous-échantillonnées, recomprimées ou remplacées sans affecter le reste du contenu.
3. Polices
Intégrées comme programmes de polices complets, sous-ensembles (seuls les glyphes utilisés sont inclus), ou référencées par nom (doivent être installées sur le système du visualiseur). Le sous-ensemble est le défaut - il réduit considérablement la taille du fichier. Formats de polices pris en charge : Type1, TrueType, OpenType et CIDFont (pour CJK).
Lorsqu'une police est référencée mais non intégrée et non installée sur le système du visualiseur, celui-ci la remplace par une police similaire - ce qui rend généralement mal. Le PDF/A exige que toutes les polices soient intégrées pour éviter cela.
4. Annotations
Surlignages, commentaires, liens, tampons, filigranes et champs de formulaire sont tous des annotations. Ils sont superposés au contenu de la page et peuvent être ajoutés, modifiés ou supprimés sans changer la page sous-jacente.
Les champs de formulaire sont un cas particulier : une annotation de widget interactive (la partie visible) plus un dictionnaire de champ (la partie données). Lorsque vous remplissez un formulaire et enregistrez, seuls les dictionnaires de champs changent - la page elle-même n'est pas modifiée.
5. Graphiques Vectoriels
Lignes, formes, courbes et tracés dessinés avec des opérateurs de type PostScript (moveto, lineto, curveto). Ils s'agrandissent à l'infini sans perte de qualité. La plupart des exportations CAO, graphiques et schémas dans les PDF sont des graphiques vectoriels.
6. Signatures Numériques
Signatures basées sur PKI liées à des plages d'octets du fichier. Le dictionnaire de signature spécifie "les octets 0 à 12 547 et 14 200 à la fin du fichier sont signés" - une petite plage au milieu est réservée à la valeur de la signature elle-même. Toute modification des plages d'octets signées invalide la signature, ce qui permet au PDF de détecter les falsifications après signature.
Certains PDF ont plusieurs signatures, superposées sous forme de mises à jour incrémentielles - chaque signataire signe le fichier tel qu'il existait lorsqu'il l'a reçu, préservant ainsi la chaîne.
Métadonnées : Deux Systèmes Parallèles
Le PDF dispose de deux systèmes de métadonnées qui divergent souvent :
Dictionnaire standard /Info
Stocké dans le trailer. Champs : Title, Author, Subject, Keywords, Creator (l'application avec laquelle l'utilisateur a créé le document), Producer (l'application qui a généré le PDF), CreationDate, ModDate. Chaînes de texte brut, faciles à lire avec n'importe quel outil PDF.
Flux de métadonnées XMP
Un flux XML séparé (Adobe XMP, basé sur RDF/XML) qui prend en charge des schémas plus riches : Dublin Core, IPTC, schémas personnalisés spécifiques au domaine (profils de couleur, enregistrements de droits d'auteur, versions de manuscrits).
Les générateurs de PDF modernes écrivent dans les deux. Les anciens PDF n'ont que /Info. Certains PDF ont des /Info obsolètes d'une version précédente et des XMP précis d'une édition récente - ou vice versa. Lors de l'audit des PDF pour la conformité ou la criminalistique, vérifiez les deux.
Normes ISO basées sur PDF
La spécification PDF de base est ISO 32000. Plusieurs normes dérivées contraignent le PDF pour des cas d'utilisation spécifiques :
| Norme | Utilisation | Contraintes |
|---|---|---|
| PDF/A | Archivage à long terme | Toutes les polices intégrées, pas de JavaScript, pas d'audio/vidéo, espaces colorimétriques indépendants de l'appareil. Niveaux de conformité : PDF/A-1, A-2, A-3 (autorise les pièces jointes) |
| PDF/X | Production d'impression | CMJN, polices et profils de couleur intégrés, pas de transparence (PDF/X-1a) ou transparence contrôlée (PDF/X-4) |
| PDF/UA | Accessibilité | Arbre de structure balisé, métadonnées linguistiques, texte alternatif pour les images, ordre de lecture logique |
| PDF/E | Ingénierie | Modèles 3D (formats U3D, PRC), métadonnées spécifiques à la CAO |
| PDF/VT | Impression transactionnelle variable | Optimisé pour les publipostages personnalisés à haut volume |
Un PDF peut être conforme à plusieurs normes simultanément - PDF/A-2u (archivage avec mappage Unicode) plus PDF/UA (accessibilité) est courant pour les archives gouvernementales et juridiques.
PDF Linéarisés (Optimisés pour le Web)
Un PDF "linéarisé" ou "optimisé pour le web" réorganise le corps de manière à ce que les objets de la première page apparaissent tôt dans le fichier. Un visualiseur web peut afficher la page 1 après avoir téléchargé seulement les ~50 Ko premiers Ko au lieu d'attendre le fichier entier. Le trailer est dupliqué en tête, plus une table d'indices qui indique au visualiseur où commence chaque page.
La plupart des générateurs de PDF modernes prennent en charge la linéarisation comme option "Enregistrer pour le Web". Le format ajoute 2 à 5 % à la taille du fichier en échange d'un rendu rapide de la première page sur des connexions lentes.
Chiffrement et Permissions
Les PDF peuvent être chiffrés avec un mot de passe (ou des certificats) et se voir accorder des permissions granulaires : imprimer, copier du texte, modifier, remplir des formulaires, extraire pour l'accessibilité. Le chiffrement est stocké dans le dictionnaire /Encrypt du trailer.
Les forces de chiffrement ont évolué : RC4 40 bits (PDF anciens, facilement cassés aujourd'hui), RC4 128 bits (toujours faible), AES-128, AES-256. L'implémentation RC4 originale d'Acrobat 5 a été publiquement cassée en 2001 ; le chiffrement PDF moderne (AES-256, PDF 2.0) est solide lorsqu'il est utilisé avec des mots de passe forts.
Note : les "permissions" sont indicatives. Un visualiseur qui les respecte les appliquera. Un visualiseur qui les ignore (ou un outil qui supprime le chiffrement) ne le fait pas.
Comment PDFSub Lit les PDF
PDFSub traite les PDF en utilisant la liaison PDFium de Rust (le même moteur qui alimente le visualiseur PDF de Chromium) ainsi que PaddleOCR pour les documents numérisés. Pour les détails complets de l'architecture et une comparaison avec les outils basés sur le cloud, consultez Sécurité des navigateurs vs. Cloud pour les PDF.
Pour convertir des PDF dans d'autres formats tout en préservant la structure décrite ci-dessus :
- PDF vers Excel - extrait le texte + les tableaux, préserve les coordonnées
- OCR PDF - ajoute une couche de texte consultable aux PDF numérisés
- PDF vers Word - reformate le texte en paragraphes modifiables
- Compresser PDF - sous-échantillonne les images, sous-ensembles de polices
Pour les flux d'archivage spécifiquement, consultez Comment convertir un PDF en PDF/A.
Pour aller plus loin
- ISO 32000-2 (spécification PDF 2.0) - référence faisant autorité, payante
- Archives de référence PDF Adobe - référence gratuite pour PDF 1.7
- PDF Association - groupe de travail industriel, articles gratuits et fichiers de test de conformité
Pour des sujets spécifiques aux PDF : Guide de conformité PDF pour les avocats, Guide de conversion PDF/A.