ISO 19005-4 (PDF/A-4) : correspondance des fonctionnalités NextPDF
ISO 19005-4:2020 (PDF/A-4) est le profil d’archivage de PDF 2.0. Cette page le met en regard de NextPDF sans rien masquer : ce que Core émet, ce que l’extension nextpdf/pro ajoute et ce que NextPDF ne couvre explicitement pas. NextPDF émet des structures pertinentes pour PDF/A-4 ; seul un validateur peut affirmer qu’un fichier est conforme.
Installation
Section intitulée « Installation »composer require nextpdf/core:^3# PDF/A-4 file authoring (OutputIntent + ICC + XMP) requires:# composer require nextpdf/proVue d’ensemble conceptuelle
Section intitulée « Vue d’ensemble conceptuelle »ISO 19005-4:2020 s’appuie sur ISO 32000-2:2020 (PDF 2.0), contrairement à PDF/A-2 et PDF/A-3, qui s’appuient sur ISO 32000-1:2008 (PDF 1.7). NextPDF encode cette différence de filiation dans ConformanceMode::requiresPdf17(). Cette méthode renvoie false pour chaque cas PDF/A-4 et true pour PDF/A-2 et PDF/A-3.
PDF/A-4 définit trois formes de conformité. Le profil de base n’a pas de lettre pdfa:conformance. PDF/A-4e (annexe B, ingénierie / contenu 3D) fixe pdfa:conformance = E. PDF/A-4f (annexe A, fichiers embarqués) fixe pdfa:conformance = F. ISO 19005-4:2020 §6.7.3 spécifie le schéma d’identification PDF/A dans l’espace de noms AIIM. Cette clause impose qu’un fichier conforme ni à PDF/A-4e ni à PDF/A-4f ne fournisse aucune entrée pdfa:conformance. NextPDF reproduit cela exactement dans ConformanceMode::pdfaConformanceLetter() : PdfA4 renvoie la chaîne vide, PdfA4e renvoie E, PdfA4f renvoie F.
La limite critique entre éditions est la suivante : la production de fichiers PDF/A-4 — le dictionnaire OutputIntent, le profil ICC embarqué, le schéma d’extension XMP, les garanties de sous-ensemble de polices et l’interdiction du chiffrement — est implémentée dans le PdfAManager Enterprise. Le PdfAManager Enterprise est livré dans l’extension nextpdf/pro. Dans une installation Core seule, Document::enablePdfA() lève InvalidConfigException parce que la capacité security.pdfa n’est pas enregistrée. L’exemple exécutable (examples/32-pdfa4-icc.php) le démontre en sondant le registre des capacités et en échouant proprement avec un message clair, plutôt qu’avec une trace de pile.
Par conséquent, avec Core uniquement, la surface PDF/A-4 se limite au discriminateur : NextPDF enregistre la variante PDF/A-4 déclarée par un document. NextPDF émet les marqueurs pdfaid:part = 4 / pdfa:conformance définis par le schéma. Produire un fichier PDF/A-4 complet — puis valider qu’il est conforme — sont deux étapes distinctes. La première requiert nextpdf/pro. La seconde requiert veraPDF.
Surface d’API
Section intitulée « Surface d’API »| Surface | Édition | Ce qu’elle fournit |
|---|---|---|
ConformanceMode::PdfA4 / PdfA4e / PdfA4f | core | Le discriminateur de variante |
ConformanceMode::pdfaPart() → 4 | core | Numéro de partie ISO 19005 |
ConformanceMode::pdfaConformanceLetter() → '' / 'E' / 'F' | core | Lettre de conformité §6.7.3 |
ConformanceMode::requiresPdf17() → false | core | Garde-fou de filiation PDF 2.0 |
Document::enablePdfA() | pro | Production OutputIntent + ICC + XMP ; lève InvalidConfigException en Core |
Exemple de code — Démarrage rapide
Section intitulée « Exemple de code — Démarrage rapide »<?php
declare(strict_types=1);
use NextPDF\Conformance\ConformanceMode;
// Core: introspect the declared PDF/A-4f contract.$mode = ConformanceMode::PdfA4f;$mode->pdfaPart(); // 4$mode->pdfaConformanceLetter(); // 'F' (ISO 19005-4:2020 §6.7.3 / Annex A)$mode->requiresPdf17(); // false (PDF/A-4 is PDF 2.0 lineage)Exemple de code — Production
Section intitulée « Exemple de code — Production »<?php
declare(strict_types=1);
use NextPDF\Core\Document;use NextPDF\Exception\InvalidConfigException;use NextPDF\Support\CapabilityRegistry;
// PDF/A-4 file authoring requires the Premium extension. Probe first so a// Core-only install gets a clear rationale, not a stack trace.$registry = CapabilityRegistry::getInstance();if (!$registry->get('security.pdfa')->isAvailable()) { throw new InvalidConfigException( configKey: 'security.pdfa', givenValue: 'Core-only install', expectedType: 'nextpdf/pro extension (Enterprise PdfAManager)', );}
$doc = Document::createStandalone();$doc->enablePdfA(); // Emits OutputIntent + ICC + pdfaid XMP (Premium).// … write content …$doc->save(__DIR__ . '/out/archive-a4.pdf');
// The file now CARRIES PDF/A-4 structures. Conformance is still unproven// until veraPDF asserts it://// verapdf --flavour 4 out/archive-a4.pdfCas limites & pièges
Section intitulée « Cas limites & pièges »- Core ne peut pas produire un fichier PDF/A-4.
enablePdfA()lève une exception en Core. Seuls le discriminateur et les marqueurs XMP relèvent de la surface Core. - Le PDF/A-4 de base n’émet aucun
pdfa:conformance. Selon ISO 19005-4:2020 §6.7.3, seuls PDF/A-4e et PDF/A-4f fixent la lettre.ConformanceMode::PdfA4renvoie la chaîne vide par conception. - Filiation PDF 2.0, pas PDF 1.7. Une erreur fréquente consiste à réutiliser un pipeline PDF/A-3 en s’attendant à
%PDF-1.7. PDF/A-4 est du PDF 2.0 ;requiresPdf17()renvoiefalsepour tous les cas PDF/A-4. - La validation ICC est Premium. La validation ICC de l’OutputIntent (ISO 19005-4:2020 §6.2.2 : nombre magique
acsp, table de balises, point blanc D50) relève duPdfAManagerEnterprise, pas de Core. - La bibliothèque ne certifie pas le fichier. Fixer
PdfA4fet émettre les marqueurs ne rend pas la sortie un fichier PDF/A-4f valide. Lance veraPDF.
Performances
Section intitulée « Performances »La surface PDF/A-4 de Core est une simple introspection de type-valeur (répartition par enum match, O(1), sans allocation). Le chemin de production Premium ajoute l’OutputIntent et le paquet ICC à l’écriture. Son coût correspond à la taille du profil embarqué, gérée à l’intérieur du budget du writer. La validation veraPDF est une étape hors bande et ne fait pas partie de la génération.
Notes de sécurité
Section intitulée « Notes de sécurité »PDF/A-4 interdit le chiffrement. Le PdfAManager Enterprise applique l’invariant d’interdiction du chiffrement. Le PdfAManager Enterprise place cet invariant dans la séquence de enablePdfA() afin qu’un appelant ne puisse pas combiner accidentellement AES-GCM avec le mode archivage. Le garde-fou en amont de Core, dans HasSecurity::enablePdfA(), rejette la combinaison non prise en charge avant qu’aucun octet ne soit écrit. Consulte le modèle de menace du projet pour le détail du pipeline d’archivage.
Conformité
Section intitulée « Conformité »Cette page présente une correspondance de fonctionnalités, pas une affirmation de conformité.
| Domaine ISO 19005-4:2020 | Article | Couverture NextPDF | Statut |
|---|---|---|---|
| Schéma d’identification de variante | §6.7.3 | ConformanceMode émet pdfaid:part = 4 et la lettre pdfa:conformance correspondante | Pris en charge (Core ; testé unitairement dans tests/Unit/Conformance/) |
| Garde-fou de filiation PDF 2.0 | §6.7.3 / base | requiresPdf17() renvoie false pour tous les cas PDF/A-4 | Vérifié (testé unitairement) |
| OutputIntent + ICC embarqué | §6.2.2 | Le PdfAManager Enterprise (nextpdf/pro) | Premium uniquement (pas Core) |
| Schéma d’extension XMP, sous-ensemble de polices, interdiction du chiffrement | §6 / annexe A/B | Le PdfAManager Enterprise (nextpdf/pro) | Premium uniquement (pas Core) |
| Détermination de la conformité | Article 5 | Non effectuée par NextPDF — relève de veraPDF | Non-couverture explicite |
La prise en charge n’est pas la conformité — et cette page distingue délibérément les deux. (a) NextPDF Core émet les structures que ISO 19005-4:2020 §6.7.3 définit pour l’identification de variante — c’est de l’implémentation, attestée par tests/Unit/Conformance/ConformanceModePdfAVariantTest.php (qui passe). (b) Le fait qu’un fichier soit conforme à PDF/A-4 est une affirmation distincte que seul un validateur peut établir, selon ISO 19005-4:2020 Article 5. L’article 5 énonce que la détermination réelle de la conformité est effectuée par rapport aux exigences normatives par un outil de vérification. NextPDF formule l’affirmation (a). NextPDF ne formule pas l’affirmation (b). Valide avec veraPDF (verapdf --flavour 4 …, ou php oracle/run.php pour le harnais oracle — qui ne s’exécute que lorsque le binaire veraPDF est présent, un garde-fou en opt-in).
Les expressions « PDF/A-4 compliant », « fully conformant » et « PDF/A-4 certified » sont délibérément absentes de cette page. NextPDF émet des structures pertinentes pour PDF/A-4 ; il ne garantit pas qu’un fichier est conforme.
Les citations sont paraphrasées à partir du corpus de conformité NextPDF. Les empreintes reference_id complètes de 64 caractères sont enregistrées dans le front-matter de la page et dans docs/public/modules/core/_normative-evidence-conf.md.
Voir aussi
Section intitulée « Voir aussi »- Module Conformance — routage de
ConformanceModeet oracle veraPDF - Module Compliance — validateur PDF/R-1 et grammaire Arlington
- Correspondance de spécification PDF/UA-2 — le pendant du profil d’accessibilité