Conformité PDF/A-4 : ce que NextPDF émet pour ISO 19005-4
Délimitation du périmètre. NextPDF produit une sortie destinée à être conforme à PDF/A-4 ; la bibliothèque n’affirme pas elle-même la conformité — ce rôle revient à un validateur comme veraPDF.
PDF/A-4 correspond à ISO 19005-4:2020, le profil d’archivage basé sur PDF 2.0. NextPDF Core expose le discriminateur ConformanceMode (PdfA4, PdfA4e, PdfA4f). Le moteur Premium nextpdf/pro émet l’OutputIntent, le profil ICC incorporé et le schéma d’identification XMP pdfaid lors de save(). La bibliothèque produit les artefacts ; veraPDF décide de la conformité. ISO 19005-4 §6.7.3 est explicite : les propriétés pdfaid:part/pdfaid:rev « ne déterminent pas à elles seules la conformité ».
Installation
Section intitulée « Installation »composer require nextpdf/core:^3composer require nextpdf/pro # OutputIntent + ICC + XMP authoringLa capacité Core security.pdfa est enregistrée, mais se déclare indisponible sans nextpdf/pro. enablePdfA() lève alors InvalidConfigException avec un chemin de mise à niveau, au lieu d’émettre un fichier non conforme.
Vue d’ensemble conceptuelle
Section intitulée « Vue d’ensemble conceptuelle »Document::enablePdfA(?object $version = null) associe une entrée de l’énumération PdfAVersion à un cas ConformanceMode. La méthode se rabat par défaut sur ConformanceMode::PdfA4 si l’entrée n’est pas reconnue ('4e' → PdfA4e, '4f' → PdfA4f). Le mode pilote trois obligations d’émission que la norme impose à tout fichier conforme :
- OutputIntent + ICC — §6.2.3 permet à un fichier conforme de spécifier ses caractéristiques colorimétriques au moyen d’un OutputIntent PDF/A-4 qui référence un flux ICC
DestOutputProfile. Selon §6.2.4.1, c’est l’une des deux voies autorisées vers une couleur indépendante du périphérique (l’autre étant des espaces colorimétriques indépendants du périphérique spécifiés directement). L’OutputIntent est donc la voie que NextPDF utilise, pas une exigence inconditionnelle de la norme. - Identification
pdfaid— §6.7.3 exige le schéma d’identification PDF/A dans le XMP au niveau du document (l’espace de noms AIIMpdfaid) avecpdfaid:part/pdfaid:rev. PDF/A-4e et PDF/A-4f ajoutentpdfa:conformance(E / F). §6.7.3 indique aussi qu’un fichier qui n’est conforme ni à PDF/A-4e ni à PDF/A-4f ne doit pas fournir de valeurpdfa:conformance. - Incorporation des polices — §6.2.10 exige que toutes les polices utilisées pour le rendu soient incorporées.
NextPDF émet ces éléments ; il ne réalise pas la détermination de conformité du §5. Ce rôle revient à veraPDF, et §6.7.3 réserve la détermination à ce processus.
Surface d’API
Section intitulée « Surface d’API »| Méthode | Effet |
|---|---|
enablePdfA(?object $version = null): static | Sélectionne ConformanceMode::PdfA4/PdfA4e/PdfA4f ; planifie OutputIntent + ICC + XMP lors de save(). Lève InvalidConfigException|PageLayoutException|CompressionException si nextpdf/pro est absent. |
ConformanceMode::pdfaPart(): ?int | Renvoie la partie d’ISO 19005 pour le mode actif (4 pour PdfA4*). |
ConformanceMode::pdfaConformanceLetter(): string | Renvoie la lettre pdfa:conformance (E / F) ou une chaîne vide. |
Exemple de code — Démarrage rapide
Section intitulée « Exemple de code — Démarrage rapide »<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;use NextPDF\Exception\InvalidConfigException;use NextPDF\Support\CapabilityRegistry;
$out = getenv('NEXTPDF_COOKBOOK_OUTPUT') ?: __DIR__ . '/archival.pdf';
$registry = CapabilityRegistry::getInstance();if (!$registry->get('security.pdfa')->isAvailable()) { fwrite(STDERR, "PDF/A-4 requires nextpdf/pro.\n"); exit(1);}
try { $doc = Document::createStandalone(); $doc->enablePdfA(); // ConformanceMode::PdfA4 $doc->setTitle('Archival Record 2026-0042'); $doc->setLanguage('en'); $doc->writeHtml('<h1>Archival record</h1><p>Body.</p>'); $doc->save($out); // OutputIntent + ICC + XMP scheduled here} catch (InvalidConfigException $e) { fwrite(STDERR, $e->getMessage() . "\n"); exit(1);}
echo "Wrote {$out} — validate: verapdf --flavour 4 {$out}\n";Exemple de code — Production
Section intitulée « Exemple de code — Production »Utilise le verdict du validateur comme barrière de build. Exécute verapdf --flavour 4 sur la sortie et fais échouer le build sur un code de sortie non nul. Le verdict du validateur est cette barrière : l’émission de la bibliothèque lui sert d’entrée, elle n’est jamais le verdict lui-même. Consulte /cookbook/php/pdfa4-conformance-gate/ pour le pipeline complet avec cette barrière.
Cas limites & pièges
Section intitulée « Cas limites & pièges »- Active avant le contenu. Appelle
enablePdfA()avant d’ajouter du contenu ; une activation rétroactive ne retraitera pas les objets déjà écrits. - Pas de chiffrement. PDF/A interdit la clé
Encrypt. N’appelle passetEncryption()sur un document PDF/A. Le chiffrement relève de la confidentialité, pas de l’intégrité archivistique ; ici, les deux s’excluent mutuellement. pdfa:conformanceest conditionnel. Seuls PDF/A-4e et PDF/A-4f le définissent. L’émettre sur un fichier PDF/A-4 simple constitue en soi une violation de conformité (§6.7.3) — le casConformanceModeempêche cela par construction.- Pièces jointes PDF/A-4f. Les fichiers incorporés à un fichier PDF/A-4f doivent porter les clés
FetUF(Desc recommandé) selon §6.7.5. C’est la base de la voie hybride ZUGFeRD/Factur-X.
Performances
Section intitulée « Performances »L’incorporation d’OutputIntent + ICC ajoute un flux ICC de taille fixe (le profil de l’espace de travail) et le paquet XMP à save(). Le budget est un temps mural ≤ 1500 ms et un pic ≤ 128 Mo pour un document typique.
Notes de sécurité
Section intitulée « Notes de sécurité »PDF/A-4 interdit le chiffrement. Le profil impose une contrainte d’archivage et de longévité, pas un contrôle de sécurité. La gestion des clés et la politique du vérificateur sont hors du périmètre de ce profil ; consulte le centre de confiance.
Résidence des données & atténuations des données personnelles
Section intitulée « Résidence des données & atténuations des données personnelles »L’émission PDF/A-4 s’exécute dans le processus et n’écrit que le document, le profil ICC incorporé et le paquet XMP. Aucun contenu ne quitte le processus. Les données personnelles présentes dans le contenu source relèvent de la responsabilité de l’intégrateur — le profil ne caviarde rien.
Télémétrie sûre & nettoyage des journaux
Section intitulée « Télémétrie sûre & nettoyage des journaux »L’exemple n’écrit que le chemin de sortie et la commande du validateur sur STDERR. Aucun octet du document n’est écrit dans les journaux. Le recipe respecte NEXTPDF_COOKBOOK_OUTPUT et n’envoie jamais le PDF vers STDOUT.
Modèle de menace
Section intitulée « Modèle de menace »Un fichier PDF/A-4 n’est protégé par aucun contrôle d’accès. Quiconque possède le fichier peut le lire ; le profil garantit la longévité du rendu, pas la confidentialité. Traite le flux ICC de l’OutputIntent comme public.
Comportement en mode FIPS
Section intitulée « Comportement en mode FIPS »L’émission PDF/A-4 n’effectue aucune cryptographie. Une signature numérique sur un fichier PDF/A-4 (PDF/A-4 §6.5 permet les profils PAdES) relève d’un sujet distinct, traité par le recipe de signature, et reprend la posture FIPS de ce recipe. Cette page n’émet aucune affirmation sur les signatures.
Conformité
Section intitulée « Conformité »| Affirmation | Spécification | Clause | reference_id |
|---|---|---|---|
| Un fichier PDF/A-4 peut spécifier ses caractéristiques colorimétriques avec un OutputIntent PDF/A référençant un profil ICC DestOutputProfile. | ISO 19005-4 | §6.2.3 | |
| La couleur indépendante du périphérique peut être spécifiée directement ou indirectement via le DestOutputProfile de l’OutputIntent (l’une des deux voies permises). | ISO 19005-4 | §6.2.4.1 | |
| La version PDF/A est identifiée via le schéma d’identification PDF/A (pdfaid) dans le XMP du document. | ISO 19005-4 | §6.7.3 | |
| pdfaid:part / pdfaid:rev ne déterminent pas à eux seuls la conformité ; la détermination est effectuée selon la Clause 5. | ISO 19005-4 | §6.7.3 | |
| Un fichier qui n’est conforme ni à PDF/A-4e ni à PDF/A-4f ne doit pas fournir de valeur pdfa:conformance. | ISO 19005-4 | §6.7.3 | |
| Dans PDF/A-4f, les fichiers incorporés doivent comporter les clés F et UF (Desc recommandé). | ISO 19005-4 | §6.7.5 | |
| Toutes les polices utilisées pour le rendu doivent être incorporées. | ISO 19005-4 | §6.2.10 | |
| L’usage de la transparence / des couleurs dépend d’un OutputIntent déclaré. | ISO 19005-4 | §6.2.9 |
Les citations sont des pointeurs clause-id + reference_id vers le corpus de vérification. Aucun texte de la norme n’est reproduit ; les clauses sont résumées avec les mots de NextPDF.