Zum Inhalt springen
getnextpdf.com

Pro Edition

Compliance — Ausführliche Referenz

Das Compliance-Modul bündelt drei voneinander unabhängige Bereiche unter NextPDF\Pro\Compliance:

  • Sprach-Tag-Reporting — eine strikte PDF/UA-2-/Lang-Richtlinienfassade plus ein strukturierter, PSR-3-förmiger Reporter für Compliance-Ereignisse.
  • E-Rechnungs-Verarbeitung — Validierung von Factur-X 1.08 / ZUGFeRD 2.4 gegen das semantische Modell von EN 16931 sowie Erzeugung hybrider PDF/A-3-Dateien.
  • Provenienz — Einbetten und Extrahieren aufruferseitig bereitgestellter C2PA-Manifest-Stores über einen angriffsgehärteten JUMBF-Parser; die Claim-Synthese bleibt auf Preview beschränkt.

Das Modul meldet, was es prüft. Es zertifiziert keine Dokumente und führt keine kryptografische Signierung durch.

Diese Funktion ist Teil von NextPDF Pro (nextpdf/pro) und wird mit einer Lizenz der Pro-Stufe aktiviert. Eine Bereitstellung ohne diese Berechtigung lädt die Klassen der Funktion nicht. Editionen vergleichen und Lizenz erwerben.

Es gibt kein Lizenz-Flag je Feature. Dies ist eine Funktion der Pro-Edition. Der experimentelle C2PA-Claim-Builder erfordert zusätzlich ein explizites Opt-in über die Umgebung (siehe Sonderfälle & Fehlermodi).

Terminal-Fenster
composer require nextpdf/pro:^3
SymbolParameterStandardverhaltenRückgabeLöst aus oder scheitert mitHinweise
LangComplianceReporter::warn() / ::error()string $tag, string $reason, ?string $clauseReference = nullGibt einen strukturierten JSON-Datensatz pro Sprach-Tag-Ereignis über den PSR-3-Logger ausvoidJsonException, wenn die JSON-Kodierung des Datensatzes fehlschlägtwarn = Ablehnung im Lax-Modus; error = Ablehnung im Strict-Modus
LangComplianceReporter::reportException()InvalidBcp47TagException $exception, string $severity = 'error'Extrahiert Tag und Grund aus der Exception; delegiert an warn() oder error()voidWie obenKomfortpfad
LangComplianceReporter::buildRecord()string $severity, string $tag, string $reason, ?string $clauseReference = nullErstellt das Datensatz-Array ohne LoggingarrayLöst nicht ausFür eigene Senken wie JSON-Zusammenfassungen je Datei
ConformancePolicy::default()?LoggerInterface $logger = nullStrikte UA-2-Richtlinie: fehlerhafte oder nicht registrierte /Lang-Tags werden abgelehntselfLöst nicht ausDer Standard in v5.0 ist strikt
ConformancePolicy::fromCore()CoreConformancePolicy $core, ?LoggerInterface $logger = nullUmschließt eine bestehende Core-Richtlinie unverändert; keine Achse wird umgeschaltetselfLöst nicht ausFür die strikte Haltung default() bevorzugen
ConformancePolicy::withStrictUa2()bool $enabledGibt eine Kopie mit gesetzter Strict-Achse zurück; das Deaktivieren gibt einen PSR-3-notice ausselfLöst nicht ausVeraltetes Opt-out; Entfernungsziel 6.0.0
ConformancePolicy::isStrictUa2() / ::mode()Liest die zugrunde liegende Core-Richtliniebool / ConformanceModeLöst nicht aus
EInvoiceValidator::validate()string $pdfPathVollständige Pipeline: PDF/A-3-Wrapper-Prüfung, Anhang-Extraktion, Profilerkennung, EN-16931-Regeln, SchematronEInvoiceValidationResultEInvoiceException-Unterklasse bei E/A-Fehler, fehlerhafter PDF-Struktur oder Absturz des WerkzeugsEingefrorene SPI-Schnittstelle; eine wohlgeformte Nicht-E-Rechnungs-PDF liefert ein Ergebnis, löst nie aus
EInvoiceXmlValidator::validate()string $xmlPayload, ValidatorContext $contextStrukturelle Vorprüfung plus das tiefensemantische EN-16931-Regelkorpus über eine CII-NutzlastVertrag ValidationResultLöst bei ungültiger Eingabe nicht aus; die Ablehnung erscheint als fehlgeschlagenes Ergebnis mit BefundenKonkreter tierübergreifender Validator; Eingabe über XmlGuard abgesichert
EInvoiceValidationResult::isValid()Nur wahr, wenn Wrapper, Anhang-Spezifikation, Profil und Syntax gelten und keine FATAL-Verletzung vorliegtboolLöst nicht ausEine leere Verletzungsliste allein bedeutet keine Gültigkeit
EInvoiceValidationResult::notAnEInvoice()Deterministisches Ergebnis mit ausschließlich null und falseselfLöst nicht ausFactory für den Fall „keine hybride Rechnung“
EInvoiceProfilestring-basierte EnumFälle MINIMUM, BASIC_WL, BASIC, EN16931, EXTENDED, hinterlegt mit BT-24-URNsisEn16931Conformant() ist false für MINIMUM und BASIC_WL
EInvoiceSyntaxstring-basierte EnumFälle UN_CEFACT_CII, UBL_INVOICE, UBL_CREDIT_NOTENur CII ist isFacturXEligible(); UBL ist nur für den Validator
BusinessRuleViolationstring $ruleId, BusinessRuleSeverity $severity, string $message, ?string $xpath = null, ?string $ramPath = nullUnveränderliches Verletzungs-DTORegel-ID-Familien BR-, BR-CO-, BR-CL-, BR-DEC-, BR-FXEXT-
BusinessRuleSeveritystring-basierte EnumFATAL macht die Rechnung ungültig; WARNING kennzeichnet ein QualitätsproblemSpiegelt die Schematron-Stufen von EN 16931 wider
FacturXEmbedder::embed()siehe Signatur-FenceHängt einen Embedded-File-Stream, eine Filespec und XMP an eine PDF/A-Quelle an; schreibt die xref neuvoidEInvoiceException bei fehlerhaftem XML, nicht lesbarer Quelle, fehlendem Katalog, Objekt-Stream- oder xref-Stream-Quelle oder Schreibfehler der AusgabeDie Quelldatei bleibt unversehrt
FacturXEmbedderOptions::default()/AFRelationship /Alternative, Dateiname factur-x.xml, Typ INVOICE, Version 1.0selfLöst nicht ausDie Standardwerte erfüllen die deutsche Vorgabe und bleiben in Frankreich akzeptiert
FacturXEmbedderOptions::withRelationship() / ::withFilename()stringGibt eine Kopie mit angewandter Überschreibung zurückselfInvalidArgumentException außerhalb der AkzeptanzmengenBeziehungen: Source, Data, Alternative; Dateinamen umfassen zugferd-invoice.xml und xrechnung.xml
FacturXEmbedderOptions::withDocumentType()string $documentTypeGibt eine Kopie mit der XMP-Dokumenttyp-Überschreibung zurückselfLöst nicht ausWerte werden nicht defensiv aufgezählt
FacturXContractEmbedder::embed()string $pdfBytes, string $xmlPayload, EmbedderOptions $optionsByte-in-, Byte-out-Adapter über FacturXEmbedder mittels kurzlebiger temporärer DateienstringEInvoiceException; das XRECHNUNG-Profil wird als Enterprise-only abgelehntTierübergreifende EmbedderInterface-Implementierung
C2paManifestEmbedder::embed()string $pdfBytes, ManifestStore $storeBettet die Byte-Serialisierung des Stores an der Profilposition einstringC2paException bei jedem EinbettungsfehlerEingefrorene SPI-Schnittstelle; nur Bytes, keine E/A
C2paManifestEmbedder::extract()string $pdfBytesParst einen eingebetteten Store über den gehärteten JUMBF-ParserManifestStore|nullC2paException-Unterklasse, wenn ein Store vorhanden ist, aber eine Härtungsgrenze überschreitetNull signalisiert Abwesenheit; Abwesenheit löst nie aus
ManifestStore::fromBoxes() / ::empty()list<JumbfBox> / —Erstellt das unveränderliche Store-WertobjektselfLöst nicht ausDie Box-Reihenfolge ist tragend für die Round-Trip-Gleichheit
ManifestStore::toBytes() / ::isEmpty() / ::size()Serialisiert die Root-Boxen; ein leerer Store serialisiert zu einer leeren Zeichenkettestring / bool / intLöst nicht aus
JumbfBoxParser::parse()string $bytesParst JUMBF-Boxen auf Root-Ebene unter harten Grenzenlist<JumbfBox>MalformedJumbfException, JumbfBombException, JumbfCycleDetectedException, JumbfDepthExceededExceptionGrenzen: Tiefe 8, 64 MiB pro Box, 128 MiB gesamt, MAX_CHILDREN_PER_SUPERBOX 4096
JumbfBox::superbox() / ::leaf()string $tbox, …Erstellt eine validierte Box; toBytes() durchläuft den Round-Trip durch den ParserselfMalformedJumbfException, wenn die TBox nicht exakt 4 Bytes umfasst
C2paCapabilityStatus::current() / ::summary()Meldet den Reifegrad der C2PA-Funktion, aktuell preview-draftself / stringLöst nicht ausMaschinell prüfbarer Preview-Marker
Feature::PREVIEW_C2PA_DRAFT->isEnabled()Liest bei jedem Aufruf die Prozessumgebung; nur das Literal '1' aktiviertboolLöst nicht ausUmgebungsvariable NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT
ExperimentalC2paEmbedder::buildManifestStore()string $sourceBytes, string $producerErstellt einen an den Draft gepinnten Manifest-Store mit einer SHA-256-Hash-Binding-Claim-AssertionManifestStoreDer Konstruktor löst LogicException aus, wenn das Preview-Flag deaktiviert istPreview; Wire-Format an einen Draft-Snapshot gepinnt; keine Claim-Signatur erzeugt

Einstiegspunkt-Signaturen, wortgetreu:

public static function default(?LoggerInterface $logger = null): self
public function withStrictUa2(bool $enabled): self
public function isStrictUa2(): bool
public function validate(string $pdfPath): EInvoiceValidationResult
public function embed(
string $sourcePdfPath,
string $xml,
EInvoiceProfile $profile,
string $outputPdfPath,
?FacturXEmbedderOptions $options = null,
): void
public function embed(string $pdfBytes, ManifestStore $store): string
public function extract(string $pdfBytes): ?ManifestStore

Sprach-Tag-Reporting. LangComplianceReporter gibt einen strukturierten JSON-Datensatz pro PDF/UA-2-Sprach-Tag-Ereignis aus. Jeder Datensatz trägt den festen Ereignis-Diskriminator, eine Schweregrad-Angabe (warn für eine Ablehnung im Lax-Modus, error für eine Ablehnung im Strict-Modus), den beanstandeten Tag wortgetreu, einen maschinenlesbaren Grund, die geparsten Tag-Komponenten (oder null, wenn der Tag die Formgrammatik nach RFC 5646 nicht erfüllt), eine Klauselreferenz zu ISO 14289-2 §8.4.4 sowie einen UTC-Zeitstempel mit Mikrosekunden. Das JSON reist als PSR-3-Nachrichtentext; nachgelagerte Senken parsen das Nachrichtenfeld direkt. ConformancePolicy ist die Premium-Fassade über der Core-Konformitätsrichtlinie. Ihr Standard wendet strikte UA-2-Sprachbehandlung an und lehnt einen fehlerhaften oder nicht registrierten Tag ab, der /Lang erreicht. Der Opt-out-Helfer withStrictUa2(false) kehrt zum alten Lax-Verhalten zurück und protokolliert einen PSR-3-Notice, wenn sich der effektive Wert tatsächlich ändert. NextPDF kennzeichnet diesen Helfer seit v5.0 als deprecated mit Entfernungsziel 6.0.0. Zur Migration: den Bestand mit composer pdfua2:audit-lang-tags <pdf-or-dir> auf fehlerhafte /Lang-Werte prüfen, sie korrigieren und dann den Opt-out-Aufruf entfernen.

E-Rechnungs-Verarbeitung. EInvoiceValidator ist der eingefrorene SPI-Vertrag für die Validierung hybrider PDFs: PDF/A-3-Wrapper-Prüfung, /AF-Anhang-Extraktion, Profilerkennung aus dem BT-24-Spezifikationskennzeichen, die EN-16931-Geschäftsregel-Engine und ein Schematron-Durchlauf. Eine wohlgeformte Nicht-Factur-X-PDF liefert EInvoiceValidationResult::notAnEInvoice() zurück, anstatt auszulösen; nur E/A-Fehler, fehlerhafte PDF-Struktur oder Werkzeugabstürze lösen eine EInvoiceException-Unterklasse aus. EInvoiceXmlValidator ist der konkrete tierübergreifende XML-Validator: Er sichert die Eingabe über den Core-XmlGuard, führt eine strukturelle Vorprüfung und das tiefensemantische EN-16931-Regelkorpus aus und schlägt fail-closed fehl — Engine-Fehler erscheinen als Error-Befunde, nie als stille Erfolge. FacturXEmbedder erweitert eine PDF/A-Quelle zu einer hybriden PDF/A-3: Er hängt einen Embedded-File-Stream, eine Filespec mit konfigurierbarer /AFRelationship und ein Factur-X-XMP-Erweiterungspaket an und schreibt anschließend die klassische Cross-Reference-Tabelle neu. Sowohl das Katalog-/AF-Array als auch der /Names /EmbeddedFiles-Namensbaum referenzieren den Anhang, sodass ältere ZUGFeRD-Reader ihn auflösen.

Provenienz. C2paManifestEmbedder bettet einen aufruferseitig bereitgestellten C2PA-Manifest-Store in eine PDF-Byte-Zeichenkette ein oder extrahiert einen. ManifestStore ist das unveränderliche Wertobjekt, das die Grenze überschreitet. Die Naht ist reine Bytes und herstellerneutral: Sie synthetisiert keine Claims, verarbeitet keine URI-Referenzen und löst keine Hash-Bindings auf, und sie führt keine Netzwerk- oder Dateisystem-E/A durch. extract() gibt bei einem Fehltreffer null zurück und ist auf PDFs ohne Store günstig. Jede nicht-null-Extraktion hat die Härtungsgrenzen des JumbfBoxParser bereits passiert.

Dieses Modul meldet, was es prüft. Es zertifiziert kein Dokument, macht es nicht rechtsverbindlich und garantiert nicht, dass eine Ausgabe eine Regelung erfüllt. Der E-Rechnungs-Validator ist kein Validator einer Steuerbehörde und schließt nationale Erweiterungen aus (zum Beispiel italienisches SDI, französisches Chorus Pro, deutsches XRechnung). Wie EN 16931-1 festhält, bleibt der Rechnungsaussteller dafür verantwortlich, die Regeln der einschlägigen Gesetzgebung einzuhalten. Die Unterstützung eines Standards ist keine Konformität mit ihm. Wenden Sie sich für die aufsichtsrechtliche Hinlänglichkeit an Ihr Compliance-Team.

  • Eine wohlgeformte Nicht-Factur-X-PDF liefert ein „keine E-Rechnung“-Ergebnis; sie löst nicht aus.
  • Eine leere Geschäftsregel-Verletzungsliste bedeutet für sich genommen nicht, dass das Dokument gültig ist; Wrapper- und Anhang-Prüfungen gelten ebenfalls.
  • FacturXEmbedder schlägt fail-closed bei Quellen fehl, die komprimierte Objekt-Streams (/Type /ObjStm) oder Cross-Reference-Streams (/Type /XRef, hybrid /XRefStm) verwenden. Speichern Sie solche Quellen zunächst mit einer klassischen Cross-Reference-Tabelle neu.
  • XML-Nutzlasten werden über den Core-XmlGuard abgesichert: DOCTYPE- oder Entity-Deklarationen, übergroße Eingaben und ungültiges UTF-8 werden auf dem Einbettungspfad mit einer EInvoiceException abgelehnt oder auf dem Validator-Pfad als fehlgeschlagenes Ergebnis.
  • FacturXContractEmbedder lehnt das XRECHNUNG-Profil laut ab, anstatt es stillschweigend herabzustufen; die XRechnung-Erzeugung ist eine Enterprise-Funktion.
  • C2paManifestEmbedder::extract() unterscheidet Abwesenheit (null) von Fehlerhaftigkeit (C2paException-Unterklasse, die die verletzte Invariante benennt: fehlerhafte Struktur, Größen- oder Anzahl-Bombe, Offset-Zyklus, Verschachtelungstiefe).
  • Die Konstruktion von ExperimentalC2paEmbedder löst eine LogicException aus, sofern das Preview-Umgebungs-Flag nicht '1' ist. Sein Wire-Format ist an einen C2PA-Draft-Snapshot gepinnt und kann sich ohne Vorankündigung ändern; es erzeugt keine Claim-Signatur. Diese Funktion bleibt Preview, bis das C2PA-PDF-Profil eingefroren wird.
  • Das Lax-Opt-out für strikte UA-2 ist veraltet; migrieren Sie zum strikten Standard (siehe Verhaltensvertrag).
  • Dieses Modul führt keine kryptografische Signierung durch. C2PA-Claim-Signierung und Schlüsselverwahrung liegen außerhalb des Geltungsbereichs; siehe das Security-Modul für das Signierverhalten im FIPS-Modus.
VerhaltenReferenzStatus
Deklaration der natürlichen Sprache (/Lang)ISO 14289-2:2024 §8.4.4Geprüft / gemeldet
Semantisches Kernmodell der RechnungEN 16931-1:2026Geprüft (Aussteller bleibt verantwortlich)
Zugeordnete Dateien / Embedded-File-StreamsISO 32000-2:2020 §14.13.2Erzeugt (/AF, /EF, /Params)
Anhangbeziehung und Container-RegelnFactur-X 1.08 §3.1, §6.2Erzeugt / geprüft (Standard /AFRelationship /Alternative)
C2PA-Manifest-Store / JUMBFC2PA 2.1 §11.1Einbetten / Extrahieren unterstützt; Claim-Synthese Preview

Dies dokumentiert die Spezifikationen, gegen die das Modul entwickelt wurde, und was es prüft oder erzeugt. Es ist keine Aussage über Zertifizierung oder aufsichtsrechtliche Hinlänglichkeit. NextPDF hält keine Zertifizierung für diese Standards.

  • Die Datensatzform des Reporters ist ein stabiler Vertrag; nachgelagerte Alerting-Regeln dürfen sich am festen Ereignis-Diskriminator festmachen.
  • Das Deaktivieren von striktem UA-2 gibt nur dann einen telemetriesichtbaren Deprecation-Notice aus, wenn sich der effektive Wert ändert; das erneute Setzen des aktuellen Werts bleibt still.
  • Der Factur-X-Embedder bewahrt die Quell-Bytes wortgetreu und hängt neue Objekte an; er zielt darauf ab, die PDF/A-3-Konformität zu erhalten, validiert aber nicht erneut. Leiten Sie die Ausgabe für eine harte Attestierung durch einen externen PDF/A-Validator.
  • Die C2PA-Naht friert fünf Invarianten ein: keine Drittanbieter-Importe, reiner Byte-Vertrag, keine E/A, null-bei-Fehltreffer-Extraktion und keine Claim-Synthese in der stabilen Schicht.
  • Die Grenzen des JumbfBoxParser sind öffentliche Konstanten; bemessen Sie die Eingaben, die Sie akzeptieren, an ihnen, anstatt Grenzen neu abzuleiten.

Diese Seite dokumentiert ausschließlich extern beobachtbares Verhalten und die unterstützte öffentliche API-Oberfläche. Interne Namespace-Pfade, Hilfsklassen, Mechanismus-Tabellen, Runbook-Dateinamen und Ticket-Präfixe liegen außerhalb des Geltungsbereichs.