Le core 0.6.0 introduit les premiers mécanismes ISO 32000-2:2020, avec des corrections vérifiées d'Errata Collection 3 (EC3, 2026-06-01). Il conserve PHP 8.3 minimum et la construction explicite, avec des objets propres au document et sans registre global. Cette version ne prétend pas implémenter tout PDF 2.0 ni garantir sa conformité complète.

Périmètre de cette version

Domaine Construction implémentée Limite
Version du fichier PdfVersion::PDF20, en-tête et version effective du catalogue Déclarer une version ne garantit pas la conformité.
Texte des dictionnaires Objets d'encodage PDFDoc/UTF-16BE et UTF-8 avec BOM, décodage explicite et contrôles de version Le texte des pages utilise toujours les codes de la police choisie.
Fichiers associés AFRelationship, tableaux AF sur les propriétaires pris en charge, ressources MCAF nommées, contrôles de graphe et de révision Aucun chargement automatique de fichier ou d'URL.
Modèle de spécification Quatre tableaux ISO 32000-2 EC3 et 53 entrées typées Le catalogue complet reste à construire.
Applicabilité et sécurité Distinction introduit/déprécié/interdit, refus de R=5 en PDF 2.0 et contraintes des permissions à clé publique Le chiffrement par mot de passe R=6 n'est pas implémenté.

L'exemple expliqué relie ces objets à un PDF réel, avec des métadonnées Unicode et un CSV.

Édition, corrections et version du fichier

SourceEdition identifie la norme indépendamment du SHA-256 de la copie source et de la version du fichier produit. ErrataCollection sélectionne EC3 sans renommer l'édition de base 2020. Un SourceReference conserve la page PDF physique, le tableau, la clause, l'identité de copie et l'édition sélectionnée.

ISO 32000-1:2008, le supplément Adobe PDF 1.7 et ISO 32000-2:2020 restent des corpus séparés. Des numéros de tableaux identiques ont des sens différents : le tableau 29 définit un nœud de pages dans ISO 32000-1 et le catalogue dans ISO 32000-2. Catalogue refuse le mélange ISO1/ISO2 et les profils ISO2 avec corrections différentes ; la composition ISO1 + extensions Adobe reste disponible.

EC3 ajoute des corrections, pas seulement du texte sur les pages. Le PDF fourni contient des annotations de révision, leurs réponses et des pages de remplacement ajoutées. Completed signifie une approbation ISO TC 171 SC 2 WG 8 ; Accepted signifie une approbation du PDF Technical Working Group de la PDF Association. ErrataResolution conserve cette distinction. Ces états ne doivent pas devenir une affirmation générique d'approbation ISO.

Chaînes textuelles Unicode

TextString reçoit du texte applicatif Unicode valide et un objet d'encodage. Son PdfDocOrUtf16TextStringEncoding par défaut conserve la stratégie PDFDocEncoding avec repli UTF-16BE. Utf16BETextStringEncoding sélectionne explicitement UTF-16BE ; Utf8TextStringEncoding sélectionne UTF-8 PDF 2.0 et son BOM de trois octets.

$title = new TextString('Résumé – fichiers associés', new Utf8TextStringEncoding());

Le writer contrôle la version effective des véritables objets textuels du graphe. Les chaînes UTF-8 nécessitent PDF 2.0. TextStringDecoder interprète explicitement le texte encodé des dictionnaires ; LiteralString et HexadecimalString restent des octets.

Une chaîne textuelle de dictionnaire et une chaîne de police Tj/TJ ont des rôles différents. Écrire des octets UTF-8 après Tj ne fournit pas au lecteur une correspondance Unicode de police. L'exemple incorpore séparément un programme TrueType et utilise son encodage CID et sa CMap ToUnicode pour le texte visible. Voir les polices incorporées.

Fichiers associés et contenu marqué corrigé

Une spécification décrit le fichier fourni ; sa relation explique le lien avec un objet PDF. AssociatedFileRelationship encapsule un nom PDF ; AFRelationship expose les valeurs standard Source, Data, Alternative, Supplement, EncryptedPayload, FormData, Schema et Unspecified. Les noms de relations personnalisées restent des valeurs explicites.

AssociatedFiles contient des dictionnaires de spécification de fichier ; AssociatedFilesEntry fournit /AF. Le validateur du graphe vérifie le véritable propriétaire, le tableau non vide, ses membres et chaque AFRelationship. Une pièce jointe et un fichier associé restent distincts : Names.EmbeddedFiles permet de retrouver une pièce jointe ; /AF exprime sa relation avec un objet. La même spécification de fichier peut participer aux deux constructions.

Pour le contenu marqué, l'erratum EC3 374 remplace la liste de propriétés en tableau contradictoire par un dictionnaire contenant /MCAF. Placer ce dictionnaire dans Resources.Properties avec un nom, puis le référencer avec /AF /nom BDC … EMC. Les références indirectes ne peuvent pas apparaître directement dans un flux de contenu. Les opérateurs ponctuels DP et MP ne décrivent pas une séquence associée. La validation native applique aussi ces règles aux révisions générées effectives.

PDF\Document\Files\BeginAssociatedFilesMarkedContent compose l’opérateur BDC existant avec /AF et un nom de ressource ; il n’ajoute aucun jeton à l’annexe A. Les faits natifs sont figés avec les octets écrits : une modification non préparée du builder ou un callback de filtre ne réécrit pas le sens d’une ancienne révision. Les remplacements effectifs de ressources et de Filespec restent vérifiés. Les octets de flux déclarés opaques restent hors de cette interprétation native.

Les Form XObjects PDF 2.0 doivent avoir leur propre dictionnaire de ressources. Le MCAF d’une forme utilise ces ressources effectives, y compris les dictionnaires indirects. Lorsqu’un Params de fichier associé est fourni, il nécessite une ModDate source valide ; PdfDateValidation vérifie syntaxe bornée, calendrier et décalages en conservant la représentation d’origine. Aucune date n’est inventée.

Sécurité et applicabilité des versions

FeatureApplicability distingue l'introduction, la dépréciation et l'interdiction d'une fonctionnalité. Une fonctionnalité dépréciée n'est pas automatiquement interdite. Une fonctionnalité explicitement interdite ne devient pas valide parce qu'on écrit un en-tête plus récent. Le graphe et le writer utilisent la version effective après la déclaration du catalogue.

ISO 32000-2 interdit explicitement la révision 5 historique du gestionnaire standard de sécurité. Le backend Adobe R=5 reste disponible pour les fichiers antérieurs ; PDF 2.0 refuse cette combinaison. R=6 reste à implémenter. Les permissions CMS à clé publique portant sur le document exigent l’ordre de l’octet le plus significatif en premier, le bit d’accessibilité 10 et les bits réservés 13–32 à 1. Des octets opaques de destinataire seuls ne prouvent pas ces faits de permissions. Le chiffrement natif AES-256 à clé publique est disponible en PDF 2.0 sans déclaration d’extension Adobe historique ; il est distinct du gestionnaire par mot de passe R=6 restant à implémenter. Le chiffrement n'authentifie pas à lui seul le contenu des pages et ne définit pas la confiance envers le document.

Implémentations restantes

Le pilote couvre le tableau 29 (32 entrées, pages physiques 113–117), le tableau 43 (16 entrées, pages 149–152), le tableau 356 (quatre entrées, page 744) et le tableau 409a (une entrée, page 1015). Les classes générées utilisent PDF\Specification\Iso32000_2, séparément des classes ISO1 et Adobe. Les types, noms Type fixes, entrées requises sans condition et certaines contraintes de références vérifiées sont exécutables. Les règles contextuelles demandent des mécanismes natifs.

Le catalogue complet, le chiffrement R=6, les mappings de rôles et graphes natifs d'espaces de noms, DSS/informations de validation/horodatages, arbres de parties documentaires, sémantique des enveloppes chiffrées, fonctions géospatiales et autres mécanismes PDF 2.0 restent à implémenter. Un schéma d'entrée Namespace, DSS ou DPartRoot n'implémente pas son mécanisme. Le lecteur optionnel reste limité à son périmètre PDF 1.0–1.7 documenté ; cette étape du writer ne l'étend pas.

Source et vérifications

L'original fourni ISO_32000-2_sponsored_EC3.pdf est conservé dans le dépôt public du core, avec son nom et ses octets d'origine, après autorisation de redistribution confirmée par le propriétaire du projet. Son identité, ses pages physiques et son empreinte figurent dans les métadonnées du pilote et l'inventaire de couverture. Le fichier fourni provient de la PDF Association, via son accès sponsorisé officiel.

Les errata publics présentent les règles corrigées des fichiers associés. Les descriptions du pilote sont des résumés concis rédigés pour le projet, sans recopier les paragraphes normatifs. Le générateur compare les fichiers reproductibles ; les tests exercent les types invalides, collisions d'éditions et provenance des corrections. La validation PDF indépendante contrôle les objets émis et les octets incorporés. Voir la couverture des mécanismes pour les autres corpus et leurs limites.

Source de ce guide au commit documenté ↗