Aller au contenu
PDFLove

qu'y a-t-il dans un fichier pdf

Ce qu'il y a vraiment dans un fichier PDF

Ouvrez un PDF dans un éditeur de texte et vous trouverez quelque chose de plus proche d'un vidage de base de données que d'un document. Presque toutes les bizarreries des PDF découlent de ce seul fait.

01

Des objets, pas des pages

Un fichier PDF est une collection numérotée d'objets. Chacun est un dictionnaire, un flux d'octets, un tableau, un nombre ou une chaîne, et chacun porte un identifiant. Les objets se renvoient les uns aux autres par numéro : l'objet 3 dit « mon contenu est dans l'objet 47 », l'objet 47 dit « ma police est l'objet 12 ».

L'un de ces objets est le catalogue, la racine de tout. Il pointe vers un arbre de pages. L'arbre de pages pointe vers des objets page. Chaque objet page pointe vers un flux de contenu et vers un dictionnaire des ressources dont ce flux a besoin — polices, images, espaces colorimétriques.

Il n'existe pas d'objet appelé « paragraphe », ni d'objet appelé « titre ». La structure s'arrête à la page. Tout ce qui se trouve en dessous, ce sont des instructions de dessin.

En-tête
Une ligne : %PDF-1.7. La version détermine les fonctionnalités qu'un lecteur peut attendre.
Corps
Les objets numérotés. Polices, images, définitions de page, flux de contenu, métadonnées.
Table de références croisées
Un index de décalages en octets : l'objet 47 commence à l'octet 91 204. C'est ainsi qu'un lecteur saute directement à la page 900 d'un fichier de 1 000 pages sans lire les 899 premières.
Trailer
Il pointe vers le catalogue et vers l'endroit où commence la table de références croisées. C'est la dernière chose du fichier, et c'est pourquoi les lecteurs ouvrent un PDF en allant d'abord à la fin.

02

Le flux de contenu est une liste d'instructions

À l'intérieur du flux de contenu d'une page se trouve une suite d'opérateurs en notation postfixée — les opérandes d'abord, puis la commande. `1 0 0 1 72 720 Tm` fixe une position de texte. `/F1 12 Tf` sélectionne la police F1 en 12 points. `(Bonjour) Tj` dessine la chaîne. `re` construit un rectangle, `f` le remplit, `Do` peint un objet image.

Voilà tout le modèle : un peintre qui exécute des ordres, de haut en bas. La page, c'est ce qui reste sur la toile quand les ordres sont épuisés.

Deux conséquences suivent immédiatement, et à elles deux elles expliquent beaucoup. L'ordre dans le flux est l'ordre de dessin, pas l'ordre de lecture — une note de bas de page peut être dessinée avant le texte qui la cite. Et rien dans le flux ne dit ce qu'une chose *est*. Un titre, c'est du texte qui se trouve avoir été dessiné plus gros.

03

Pourquoi la dernière partie du fichier est la plus importante

La table de références croisées est un index de décalages en octets, et les décalages en octets sont fragiles. Changez quoi que ce soit au milieu d'un PDF et tous les décalages suivants se déplacent. C'est pourquoi modifier un PDF dans un éditeur de texte le corrompt presque toujours, et pourquoi un téléchargement tronqué produit un fichier qui ne s'ouvre pas du tout alors même que 95 % de son contenu est arrivé intact.

C'est aussi pourquoi la réparation est possible et réussit souvent. Quand un lecteur dit que le fichier est endommagé, cela veut d'ordinaire dire que les décalages sont faux, pas que les objets ont disparu. Une passe de réparation ignore la table cassée, balaie tout le fichier à la recherche de tout ce qui ressemble à un en-tête d'objet, et reconstruit l'index à partir de ce qu'elle trouve.

04

Mises à jour incrémentales : les PDF se souviennent

Un PDF peut être modifié par ajout. Plutôt que de réécrire le fichier, un rédacteur ajoute à la fin les nouvelles versions des objets modifiés, puis ajoute une nouvelle table de références croisées qui pointe vers elles et se chaîne en arrière vers l'ancienne. Le lecteur utilise la table la plus récente, il voit donc la nouvelle version.

Les anciens objets sont toujours dans le fichier. C'est délibéré — c'est ce qui rend les signatures numériques vérifiables, parce qu'on peut reconstituer exactement ce qui a été signé. C'est aussi un vrai danger : un caviardage fait en dessinant un rectangle noir laisse le texte dessous parfaitement intact et extractible, et les pages « supprimées » ne le sont souvent pas.

Enregistrer un PDF à neuf, plutôt qu'incrémentalement, jette l'historique. L'aplatissement aussi. Si un document a traversé plusieurs tours de modifications, cela vaut la peine de le savoir avant de l'envoyer.

05

Ce que cela explique

Presque toutes les plaintes visant les PDF remontent au modèle. Le texte copié arrive en désordre parce que l'ordre du flux de contenu est l'ordre de dessin. Les convertisseurs perdent la mise en forme parce qu'il n'y a jamais eu de structure à convertir — seulement des glyphes positionnés. La fusion est rapide et sans perte parce qu'elle renumérote des objets, elle ne redessine pas des pages. Les fichiers restent obstinément lourds parce que le poids est dans les objets image, et aucune suppression de texte n'y touche.

C'est un format conçu pour garantir qu'une page a partout un aspect identique, et il y parvient complètement. Le prix, c'est tout ce qui dépend de savoir ce que la page veut dire.

Questions

Questions liées

Puis-je ouvrir un PDF dans un éditeur de texte ?

Oui, et cela vaut la peine de le faire une fois. Vous verrez l'en-tête, des dictionnaires lisibles et de longues plages binaires là où sont les flux compressés. Ce qu'il ne faut pas faire, c'est l'enregistrer — changer ne serait-ce qu'un octet au milieu décale tous les décalages de références croisées suivants et casse le fichier.

Pourquoi un PDF qui a l'air simple est-il si lourd ?

Parce que le poids habite des objets que vous ne voyez pas sur la page : polices embarquées, données d'image à la résolution du scanner et parfois tout l'historique d'édition laissé par les enregistrements incrémentaux. Le texte visible est en général la chose la plus légère du fichier.

Supprimer une page supprime-t-il son contenu ?

Cela dépend de la manière dont elle a été supprimée. Retirer une page de l'arbre de pages et enregistrer incrémentalement laisse l'objet page dans le fichier. Une vraie réécriture jette tout ce qui n'est plus référencé. Si le contenu est sensible, réécrivez ou aplatissez plutôt que de supposer.

Quelle est la différence entre PDF 1.4 et PDF 2.0 ?

Surtout des capacités ajoutées au fil du temps : la transparence en 1.4, les flux d'objets et de références croisées en 1.5, le chiffrement AES-128 en 1.6, AES-256 et une spécification nettoyée en 2.0. Le modèle objet sous-jacent n'a pas changé depuis 1993, et c'est pourquoi un lecteur d'aujourd'hui ouvre encore un fichier de l'époque.