Conformiteit: ConformanceMode-routering en validatiegrens
In een oogopslag
Sectie met titel “In een oogopslag”NextPDF\Conformance is de enige discriminator die de writer vertelt op welk contract van de International Organization for Standardization (ISO) een bestand in Portable Document Format (PDF) is gericht. De bibliotheek stuurt de structuren uit die dat contract definieert. Ze certificeert het resulterende bestand niet als conform en kan dat ook niet. Alleen een externe validator kan conformiteit vaststellen.
Installatie
Sectie met titel “Installatie”composer require nextpdf/core:^3Conceptueel overzicht
Sectie met titel “Conceptueel overzicht”De Conformance-module stelt twee publieke typen beschikbaar. ConformanceMode is een backed enum die het doelcontract benoemt (Plain, PdfUa1, PdfUa2, PdfA2, PdfA3, PdfA3b, PdfA3u, PdfA4, PdfA4e, PdfA4f). ConformancePolicy is een onveranderlijk waardeobject dat een modus combineert met onafhankelijke striktheidsschakelaars.
De modus is de enige bron van waarheid voor de downstream writer-gates. Voordat deze enum bestond, leidde de engine uit verspreide vlaggen af of een document volgens de specificatie getagd was. ConformanceMode::isTagged(), isAccessibility(), isArchival(), pdfaPart(), pdfaConformanceLetter() en requiresPdf17() leveren elk een getypeerd antwoord dat de writer rechtstreeks leest. De catalog, /MarkInfo, de herkomst van de bestandsheader en de Extensible Metadata Platform (XMP) pdfaid-markeringen blijven afgestemd op de gedeclareerde intentie.
Neem de ondersteuningsgrens letterlijk. NextPDF Core stuurt de structuren uit die deze standaarden definiëren. ISO 19005-4:2020 §6.7.3 specificeert het identificatieschema dat vastlegt welke PDF/A-variant een bestand claimt. ISO 19005-4:2020 stelt dat conformiteit wordt bepaald zoals gespecificeerd in clausule 5 ervan: aan de hand van de normatieve vereisten en door een validator, niet door de producerende bibliotheek. ISO 14289-2:2024 §6 omschrijft conformiteit als een eigenschap waaraan een bestand voldoet. Het instellen van een NextPDF-modus is noodzakelijke invoer voor een conform bestand. Op zichzelf is het geen conformiteitsresultaat.
Dit volgt dezelfde Geverifieerd-versus-Geclaimd-discipline als de ondersteuningsmatrix voor Cascading Style Sheets (CSS). Een mogelijkheid is alleen Geverifieerd als die zowel een geslaagde test- of oracle-run als een geciteerde clausule heeft. Al het andere is iets wat de bibliotheek uitstuurt: nuttig, maar geen conformiteitsgarantie. Conformiteit hoort bij het uiteindelijke bestand en bij een validator, niet bij de belofte van een bibliotheek. Valideer de uitvoer met veraPDF (zie “Conformiteit” hieronder).
Een tweede grens is belangrijk voor archiveringswerk. Het authoren van PDF/A-4, inclusief het OutputIntent-woordenboek, het ingebedde International Color Consortium (ICC)-profiel en het XMP-uitbreidingsschema, is ondergebracht in de nextpdf/pro-uitbreiding, niet in Core. In een Core-only-installatie werpt Document::enablePdfA() een InvalidConfigException op omdat de security.pdfa-capability niet is geregistreerd. Core blijft eigenaar van de ConformanceMode-discriminator, zodat introspectie en het PDF/Universal Accessibility (PDF/UA-2)-getagde pad werken, maar Core authort niet zelfstandig een PDF/A-4-bestand.
API-oppervlak
Sectie met titel “API-oppervlak”| Type | Soort | Belangrijkste leden |
|---|---|---|
NextPDF\Conformance\ConformanceMode | enum: string | Plain, PdfUa1, PdfUa2, PdfA2, PdfA3, PdfA3b, PdfA3u, PdfA4, PdfA4e, PdfA4f; isTagged(), isAccessibility(), isArchival(), requiresPdfUa2PageTabs(), pdfaPart(): ?int, pdfaConformanceLetter(): string, requiresPdf17(): bool |
NextPDF\Conformance\ConformancePolicy | final readonly class | __construct(ConformanceMode $mode = PdfUa2, bool $strictUa2 = false, bool $rejectUnvalidatedLang = false, …); lax(), strictUa2(), withUax9IsolateSupport(), withoutAstShadowMode(), withBlackPointCompensation(), withStrictOcspProducedAtTolerance(), withAllowStaleOcsp() |
ConformancePolicy handhaaft één invariant in de constructor: de strikte PDF/UA-2-schakelaars gelden alleen wanneer de modus PdfUa2 is, en strictUa2 = true forceert rejectUnvalidatedLang = true. Incoherente combinaties werpen een InvalidConfigException in plaats van stilzwijgend te degraderen.
Codevoorbeeld — Snelstart
Sectie met titel “Codevoorbeeld — Snelstart”<?php
declare(strict_types=1);
use NextPDF\Conformance\ConformanceMode;
$mode = ConformanceMode::PdfA4f;
// Introspect the declared contract — these drive writer-side gates.$mode->pdfaPart(); // 4$mode->pdfaConformanceLetter(); // 'F'$mode->requiresPdf17(); // false (PDF/A-4 is PDF 2.0 lineage)$mode->isArchival(); // trueCodevoorbeeld — Productie
Sectie met titel “Codevoorbeeld — Productie”De route die met Core wordt meegeleverd en een conformiteitscontract van begin tot eind doorloopt, is de PDF/UA-2-getagde route. Dit uitvoerbare voorbeeld staat in examples/31-pdfua2-tagged.php. Het is ook het oracle-doel voor het strikte PDF/UA-2-profiel.
<?php
declare(strict_types=1);
use NextPDF\Core\Document;
$doc = Document::createStandalone();
// Set the tagged-PDF contract BEFORE writing content so the HTML pipeline// wires the TaggedContentEmitter at parser-construction time.$doc->enableTaggedPdf(lang: 'en');
$doc->setTitle('Accessible report');// … write content …
$doc->save(__DIR__ . '/out/report-ua2.pdf');
// The library has now emitted PDF/UA-2 structures. It has NOT asserted// conformance. Verify the file with the pinned veraPDF oracle://// php oracle/run.php pdfua.strict//// (Requires the veraPDF Docker image — opt-in; see "Conformance" below.)Randgevallen en valkuilen
Sectie met titel “Randgevallen en valkuilen”- Het authoren van PDF/A-4 is Premium. In een Core-only-installatie werpt
Document::enablePdfA()eenInvalidConfigException(security.pdfaniet beschikbaar). Core beheert de discriminator, niet de OutputIntent/ICC/XMP-emissie. Zie/specifications/pdfa4/. - Paraplugeval versus variantgevallen.
PdfA4is het paraplugeval en rapporteert een legepdfaConformanceLetter(). ISO 19005-4:2020 §6.7.3 schrijft voor dat een bestand dat noch aan PDF/A-4e noch aan PDF/A-4f voldoet, geenpdfa:conformanceopgeeft. GebruikPdfA4e/PdfA4falleen voor de varianten uit bijlage B / bijlage A. - Strikte PDF/UA-2 is opt-in.
ConformancePolicy::lax()is de achterwaarts compatibele standaard.strictUa2()forceert/MarkInfo /Marked trueen afwijzing van niet-gevalideerde taalwaarden volgens Best Current Practice (BCP) 47. Het inschakelen ervan op een modus die geenPdfUa2is, werpt een uitzondering. isTagged()is variantbewust.Plain,PdfA2,PdfA3benPdfA4erapporteren ongetagd. De writer mag geen structuurboom afleiden uit alleen de archiveringsmodus.- Een ingestelde modus is geen geslaagd bestand. Het instellen van
PdfA4maakt de uitvoer niet tot een geldig PDF/A-4-bestand. Voer een validator uit.
Prestaties
Sectie met titel “Prestaties”ConformanceMode en ConformancePolicy zijn pure waardetypen. Het oplossen van enum-cases en match-dispatch gebeurt in O(1), zonder allocatie buiten het onveranderlijke policy-object om. Ze voegen geen meetbare kosten toe aan het schrijfpad. De writer, niet de discriminator, domineert het modulebudget (wall_ms: 1500). De veraPDF-oracle is een out-of-band stap in continuous integration (CI), geen onderdeel van de documentgeneratie.
Beveiligingsopmerkingen
Sectie met titel “Beveiligingsopmerkingen”De strikte schakelaars in ConformancePolicy reguleren fail-closed beveiligingsgedrag: securityPkiRfc5280Strict (Request for Comments (RFC) 5280 §6 padvalidatie), strictOcspProducedAtTolerance (RFC 6960 §4.2.2.1 afwijkingsvenster) en allowStaleOcsp (standaard false; wijst Open Certification Status Protocol (OCSP)-responses af die geen nextUpdate bevatten). Deze standaardwaarden zijn conservatief en gaan in een toekomstige major over op strikt gedrag, conform de gedocumenteerde strategie voor achterwaartse compatibiliteit. Zie de beveiligingsmodule en het dreigingsmodel van het project voor details over het handtekeningpad.
Conformiteit
Sectie met titel “Conformiteit”NextPDF certificeert geen conformiteit. Het stuurt structuren uit die door de onderstaande standaarden zijn gedefinieerd. Een afzonderlijke validator beslist of een bestand conform is.
| Standaard | Clausule | Wat NextPDF Core doet | Status |
|---|---|---|---|
| ISO 14289-2:2024 (PDF/UA-2) | §6 | Stuurt de structuurboom, /MarkInfo /Marked true (strikt), /Lang en pdfuaid XMP uit via het getagde Core-pad | Geverifieerd profiel: pdfua.strict gevalideerd door de veraPDF-oracle (php oracle/run.php pdfua.strict) wanneer de veraPDF-binary aanwezig is (opt-in gate) |
| ISO 19005-4:2020 (PDF/A-4) | §6.7.3 | Stuurt de pdfaid:part / pdfa:conformance-discriminator uit via ConformanceMode | Geclaimd (emissie van de discriminator, unit-getest); het authoren van een PDF/A-4-bestand is alleen Premium |
| ISO 32000-2:2020 (PDF 2.0) | §7.5.2 | Basis catalog/document-structuur | Geclaimd (basisgedrag van de engine) |
Ondersteuning is geen conformiteit. NextPDF Core stuurt PDF/UA-2- en PDF/A-4-identificatiestructuren uit, met implementatiebewijs in tests/Unit/Conformance/. Alleen een validator die het bijbehorende profiel uitvoert, kan vaststellen dat een bestand conform is aan PDF/A-4 of PDF/UA-2. Volgens ISO 19005-4:2020 clausule 5 is het bepalen van conformiteit de taak van de validator, niet van de producerende bibliotheek.
De veraPDF-gating is expliciet over haar vereiste. De oracle (oracle/run.php, oracle/lib/OracleRunner.php) roept een vastgepinde veraPDF Docker-image aan. Wanneer Docker of de image ontbreekt, sluit de runner af met code 2 (infrastructuurfout) en verifieert niets. Het pdfua.strict-profiel is daarom een opt-in conformiteitsgate. Het bewijst conformiteit alleen op machines waar de veraPDF-binary aanwezig is. NextPDF levert geen ingebedde validator mee en doet bij afwezigheid daarvan geen conformiteitsclaim.
Citaten zijn geparafraseerd uit het NextPDF compliance-corpus. De volledige reference_id-digests van 64 tekens zijn vastgelegd in de frontmatter van de pagina en in _normative-evidence-conf.md.
Zie ook
Sectie met titel “Zie ook”- Compliance-module — PDF/R-1-validator, Arlington-grammatica en levenscyclustools
- Toegankelijkheidsmodule — PDF/UA-2-emitter voor getagde inhoud
- Specificatietoewijzing voor PDF/A-4 — ISO 19005-4 functiedekking en expliciete niet-dekking
- Specificatietoewijzing voor PDF/UA-2 — ISO 14289-2 toegankelijkheidstoewijzing
- Beveiligingsmodule — strikte schakelaars voor het handtekeningpad