Zum Inhalt springen
getnextpdf.com

Enterprise Edition

Validierung — Ausführliche Referenz

Das Validierungsmodul führt vorgefertigte, schreibgeschützte strukturelle Compliance-Richtlinien gegen rohe PDF-Bytes aus. Compliance::assess() wendet genau eine CompliancePolicy an und gibt einen ComplianceReport mit nach Schweregrad partitionierten Befunden und einem verpflichtenden rechtlichen Haftungsausschluss zurück. Richtlinien werden ausgeliefert für PDF/A-4 (plus die Varianten e und f), PAdES-Baseline-Struktur, ein eIDAS-Strukturprofil, LTV/DSS-Gesundheit, ZUGFeRD / Factur-X, FDA 21 CFR Part 11 und SEC Rule 17a-4 WORM-Archivierung. Jede Richtlinie ist eine reine Funktion: Bytes hinein, Befunde heraus. Die Validierung verändert das Dokument niemals und führt niemals eine kryptografische Verifizierung durch.

Diese Funktion wird in NextPDF Enterprise (nextpdf/enterprise) ausgeliefert und wird mit einem Lizenzumschlag der Enterprise-Stufe aktiviert. Eine Bereitstellung ohne diese Berechtigung lädt die Klassen der Funktion nicht. Editionen vergleichen und eine Lizenz erwerben.

Die Validierungs-/Evidence-Oberfläche wird durch die Funktion enterprise.compliance.evidence lizenziert. Eine verweigerte Berechtigung verweigert die Funktion, anstatt stillschweigend zu degradieren.

StufeValidierungsoberfläche
CoreIn-Process-Byte-Stream-Validatoren und ein Grammatik-Abgleich; ein Ergebnis ohne Befunde ist ein geprüftes Ergebnis, kein Zertifikat.
ProIn-Process-Validierung von EN 16931 / Factur-X / ZUGFeRD auf der E-Rechnungs-Ebene; keine vorgefertigten PDF/A-4-, PAdES-, LTV-, FDA- oder SEC-Richtlinien.
EnterpriseVorgefertigte Strukturrichtlinien für PDF/A-4, PAdES, LTV, ZUGFeRD, FDA Part 11 und SEC 17a-4 mit einem einheitlichen Bericht (dieses Modul).

Das externe Sidecar-Gateway von Enterprise Compliance ist ein separates, eigenständiges Modul.

Terminal-Fenster
composer require nextpdf/enterprise:^3
SymbolParameterStandardverhaltenRückgabeWirft oder scheitert mitHinweise
Compliance::__construct?ClockInterface $clock = nullSystemuhr, wenn keine Uhr injiziert wirdDI-freundliche Instanzform; die Uhr stempelt validatedAt
Compliance::runstring $pdfData, CompliancePolicy $policy, array $context = []Wendet genau eine Richtlinie an und misst die Wall-Clock-DauerComplianceReportReicht Ausnahmen benutzerdefinierter Richtlinien weiter; eingebaute Richtlinien sammeln Befunde, anstatt zu werfenInstanzmethode
Compliance::assess (static)string $pdfData, CompliancePolicy $policy, array $context = []Konstruiert eine Standardinstanz und delegiert an run()ComplianceReportWie run()Konfigurationsfreier Schnellpfad
Policies::pdfA4 / ::pdfA4e / ::pdfA4f (static)PDF/A-4-Strukturrichtlinie gemäß ISO 19005-4:2020CompliancePolicye erlaubt 3D-/Rich-Media-Annotationen; f ergänzt Prüfungen von Beziehungen eingebetteter Dateien
Policies::padesBaseline (static)PAdES-B-B-StrukturprüfungenCompliancePolicyNur Struktur; keine kryptografische Verifizierung
Policies::eidasQualified (static)PAdES-Strukturprüfungen unter einem eIDAS-gekennzeichneten ProfilCompliancePolicyDie Qualifikation hängt vom TSP und dem qualifizierten Zertifikat ab
Policies::ltvHealth (static)DSS-Struktur-GesundheitsprüfungCompliancePolicyDSS-Präsenz aus dem aktiven Objektgraphen aufgelöst, fail-closed
Policies::zugferd (static)string $profile = 'BASIC'Normalisiert den Profil-Alias und erstellt den ZUGFeRD-ValidatorCompliancePolicy\ValueError (unbekanntes Profil)Profile: MINIMUM, BASIC, BASIC_WL, EN16931, EXTENDED
Policies::fdaPart11 (static)FDA-21-CFR-Part-11-StrukturrichtlinieCompliancePolicySieben Strukturprüfungen, einschließlich der Integrität der Hash-Kette des Audit-Trails
Policies::sec17a4 / ::sec17a4Compatible / ::sec17a4Structural / ::sec17a4PreSign (static)SEC-17a-4-WORM-Richtlinie mit der genannten StrengeCompliancePolicyStrenge wird auf WormComplianceLevel abgebildet
CompliancePolicy (interface)Strategie-Vertrag für einen StandardgetName(), getIdentifier(), getStandardReference(), validate(); kundenseitig implementierbar
ComplianceReportReadonly-WertobjektBefunde bei der Konstruktion nach Schweregrad partitioniertpasses(), fails(), totalFindings(), getDisclaimer(); öffentlich findings, errors, warnings, infos, policyName, policyId, standard, validatedAt, durationMs
ComplianceFindingSeverity $severity, string $ruleId, string $message, string $clause = '', string $suggestion = ''Ein Regelergebnis mit Klauselreferenz und BehebungshinweisStatisch error() / warning() / info(); isError()
Severity (enum)3 string-basierte FälleError, Warning, InfoNur Error lässt einen Bericht scheitern
WormComplianceLevel (enum)4 string-basierte FälleFull, Compatible, Structural, PreSignrequiresSignature(), requiresDocMdp(), requiresLtv(), maxDocMdpLevel()
PdfAPolicy, PadesValidator, LtvHealthCheck, ZugferdValidator, Sec17a4WormPolicy, Fda\FdaPart11PolicyKonstruktoren pro KlasseImplementieren jeweils CompliancePolicy für einen Standardlist<ComplianceFinding> aus validate()Zu beziehen über Policies; Sec17a4WormPolicy::getLevel() legt die konfigurierte Strenge offen
Fda\FdaSigningIntent (enum)6 string-basierte FälleAuthoring, Review, Approval, Certification, Verification, RejectiontoPdfReasonString() liefert die kanonische /Reason-Zeichenfolge
Fda\FdaAuditEvent::__constructDateTimeImmutable $timestamp, string $actor, FdaSigningIntent $action, string $documentHash, string $certificateSerial, string $previousEventHash = ''Berechnet den SHA-256-Kettenhash bei der KonstruktionInvalidArgumentException (Zeitstempel nicht UTC)Öffentlich eventHash; toXmpRdf() serialisiert ein XMP-Listenelement
Fda\FdaAuditTrail::addEventFdaAuditEvent $eventHängt das Ereignis an, wenn seine Kettenverknüpfung mit dem Ende des Trails übereinstimmtselfInvalidArgumentException (Hash-Kette unterbrochen)Außerdem createEvent(), verifyChain(), getLastEventHash(), getEvents(), embedInMetadata()
Fda\FdaSignatureEnforcer::configureSeedValueFdaSigningIntent $intent, string $tsaUrlErstellt eine FDA-beschränkte Signatur-Seed-Value-KonfigurationSeedValueConfigErfordert das FDA-Reason-Set, einen Zeitstempel und SHA-256 oder stärkere Digests
Fda\FdaSignatureEnforcer::applyToSequentialSigner $signer, SigningStrategy $strategy, string $signerName, FdaSigningIntent $intent, string $tsaUrl, string $fieldName = '', ?string $reason = nullFügt einem Pro-SequentialSigner einen FDA-beschränkten Signierer hinzuSequentialSignerSerialisiert die Einschränkungen in das erzeugte Signaturfeld
namespace NextPDF\Enterprise\Validation;
final readonly class Compliance
{
public function __construct(?ClockInterface $clock = null);
/** @param array<string, mixed> $context */
public function run(string $pdfData, CompliancePolicy $policy, array $context = []): ComplianceReport;
/** @param array<string, mixed> $context */
public static function assess(string $pdfData, CompliancePolicy $policy, array $context = []): ComplianceReport;
}
final class Policies
{
public static function pdfA4(): CompliancePolicy; // also pdfA4e(), pdfA4f()
public static function padesBaseline(): CompliancePolicy;
public static function eidasQualified(): CompliancePolicy;
public static function ltvHealth(): CompliancePolicy;
public static function zugferd(string $profile = 'BASIC'): CompliancePolicy;
public static function fdaPart11(): CompliancePolicy;
public static function sec17a4(): CompliancePolicy; // also sec17a4Compatible(), sec17a4Structural(), sec17a4PreSign()
}
interface CompliancePolicy
{
public function getName(): string;
public function getIdentifier(): string;
public function getStandardReference(): string;
/**
* @param array<string, mixed> $context
* @return list<ComplianceFinding>
*/
public function validate(string $pdfData, array $context = []): array;
}
final readonly class ComplianceReport
{
public const string LEGAL_DISCLAIMER;
public function passes(): bool;
public function fails(): bool;
public function totalFindings(): int;
public function getDisclaimer(): string;
}

Compliance::assess() (statisch) und Compliance::run() (Instanz, mit einer injizierbaren Psr\Clock\ClockInterface) wenden genau eine Richtlinie an und geben einen ComplianceReport zurück. Extern beobachtbare Regeln:

  • Rein schreibgeschützt. Jede CompliancePolicy::validate() ist eine reine Funktion: Bytes hinein, Befunde heraus. Eine Richtlinie verändert PDF-Bytes niemals. Diese architektonische Invariante hält die Validierung getrennt von Auto-Fix und vom Evidence-Modul.
  • Schweregrad-Gate. ComplianceReport::passes() ist nur dann wahr, wenn errors === []. Warnungen und Infos lassen einen Bericht niemals scheitern. fails() ist das Komplement.
  • Verpflichtender Haftungsausschluss. ComplianceReport::getDisclaimer() gibt den konstanten Text des rechtlichen Haftungsausschlusses zurück. Seine Darstellung in nutzerseitiger Ausgabe wird vom Vertrag verlangt.
  • Berichtsherkunft. Der Bericht trägt den Richtliniennamen, den Bezeichner und die Standardreferenz aus der Richtlinie, den Validierungszeitstempel aus der injizierten oder der Systemuhr sowie die gemessene Dauer in Millisekunden.
  • Sammeln, nicht abbrechen. Eingebaute Richtlinien führen alle zutreffenden Prüfungen aus und sammeln jeden Befund, anstatt beim ersten Fehler anzuhalten.
  • Nur katalog-erreichbares DSS. LtvHealthCheck löst die DSS-Präsenz aus dem aktiven Objektgraphen auf: aktiver Trailer, dann /Root-Katalog, dann /DSS und seine Unterschlüssel. Markerbytes, die in Kommentaren, Zeichenfolgen, verwaisten Objekten oder überholten Revisionen platziert sind, zählen nicht. Nicht parsebare Eingaben werden als kein DSS behandelt, sodass die Prüfung fail-closed ist. Die Prüfung ist strukturell; sie verifiziert eingebettete OCSP-/CRL-Daten nicht kryptografisch.
  • Strukturelle Signaturprüfungen. Policies::padesBaseline() und Policies::eidasQualified() validieren die PAdES-Struktur nur auf PDF-Ebene. Die Qualifikation unter eIDAS hängt vom TSP und vom qualifizierten Zertifikat ab, die außerhalb dieses Moduls liegen.
  • Richtlinien für regulierte Branchen sind strukturell. FdaPart11Policy prüft das Vorhandensein der Signatur, die /Reason-Absicht, die /M-Signierzeit, die /Name-Identität, das Fehlen von JavaScript, den FDA-Audit-Trail-Namensraum und die Integrität der Hash-Kette. Sec17a4WormPolicy prüft bis zu 13 WORM-Regeln; WormComplianceLevel wählt die Strenge. Full verlangt DocMDP-Level 1, Compatible akzeptiert Level 2, und Structural / PreSign überspringen die Signatur-, DocMDP- und DSS-Regeln. Keine der Richtlinien begründet rechtliche Compliance.
  • ZUGFeRD-Kontext. Policies::zugferd() prüft stets die Anforderungen auf PDF-Ebene. Es validiert das Rechnungs-XML nur, wenn der Aufrufer ['xml' => $xmlData] in $context übergibt; andernfalls gibt es den Info-Befund zugferd-xml-skipped aus.
  • Manipulationssicherer Audit-Trail. FdaAuditTrail ist eine ausschließlich anfügende SHA-256-Hash-Kette. addEvent() weist eine unterbrochene Verknüpfung zurück, verifyChain() leitet jeden Hash neu ab, und embedInMetadata() schreibt den Trail in XMP unter http://ns.nextpdf.dev/fda/1.0/ mit einem PDF/A-Erweiterungsschema.
  • Eine Nicht-PDF- oder leere Eingabe liefert in den eingebauten Richtlinien Fehlerbefunde statt einer Ausnahme. Prüfen Sie stets passes() und stellen Sie den Haftungsausschluss dar.
  • Policies::zugferd() normalisiert Profil-Aliasse (BASIC_WL, EN16931, EN_16931). Ein unbekanntes Profil löst zur Factory-Zeit \ValueError aus, bevor irgendeine Validierung läuft.
  • Ein DSS mit CRLs, aber ohne OCSP-Antworten erfüllt die Prüfung des Revocation-Materials; der Befund vermerkt die akzeptable Alternative. Wenn keines von beiden vorhanden ist, ist dies ein Fehler.
  • Ein fehlendes /VRI-Dictionary oder /Certs-Array erzeugt Warnungen, keine Fehler; der Bericht kann dennoch bestehen.
  • FdaAuditEvent weist jeden Nicht-UTC-Zeitstempel bei der Konstruktion mit InvalidArgumentException zurück.
  • FdaAuditTrail::verifyChain() gibt bei jedem manipulierten oder umgeordneten Ereignis false zurück; es wirft niemals.
  • Benutzerdefinierte CompliancePolicy-Implementierungen können aus validate() werfen; Compliance::run() fängt nicht ab, sodass solche Ausnahmen an den Aufrufer weitergereicht werden.

Dieses Modul führt keine Signierung, keine kryptografische Verifizierung und keine Schlüsselverwahrung durch. Die Algorithmusrichtlinie im FIPS-Modus wird von den Modulen Security und Signature geregelt. FdaSignatureEnforcer-Seed-Values beschränken FDA-gebundene Signaturfelder auf die Digest-Methoden SHA-256, SHA-384 oder SHA-512.

Diese Richtlinien prüfen strukturelle Attribute gegen die genannten Standards. Das Konformitätsurteil für ISO-/ETSI-Profile bleibt eine Eigenschaft der endgültigen Datei plus eines externen Validators.

VerhaltenReferenz
Konformität wird gegen den Standard bestimmt, nicht gegen den ProduzentenISO 19005-4:2020 §5.2
Digitales Signatur-Dictionary / DSS für die LangzeitvalidierungISO 32000-2:2020 §12.8
DSS ist ein Dictionary, das vom DSS-Schlüssel des Dokumentkatalogs gehalten wirdISO 32000-2:2020 §12.8.4.3
PAdES-Baseline-SignaturstufenETSI EN 319 142-1 §5.4.3
Semantisches Modell des EN-16931-Profils (unterstützende Referenz)Factur-X 1.08 (EN 16931)

Die Richtlinien für FDA 21 CFR Part 11 und SEC 17a-4 prüfen ausschließlich strukturelle Attribute; diese Vorschriften liegen außerhalb des Verifizierungskorpus und tragen keinen verifizierten Konformitätsanspruch. Die Klausel-Zeichenfolgen innerhalb von FDA-Befunden (zum Beispiel §11.50, §11.10(e)) sind vom Produkt ausgegebene Regelreferenzen. Die EN-16931-Zeile ist eine unterstützende Referenz unterhalb der Retrieval-Schwelle; sie ist kein harter Konformitätsanspruch. Die Unterstützung eines Standards ist keine Konformität mit ihm, und Konformität ist keine Zertifizierung — NextPDF besitzt keine Zertifizierung und gewährt keine. Diese Referenz ist kein Rechtsgutachten; konsultieren Sie Ihr Compliance-Team hinsichtlich der rechtlichen Hinlänglichkeit.

  • Die Validierung läuft in-process und lokal ohne Netzwerk-I/O. Eine Richtlinie kann die Eingabe nicht verändern.
  • Behandeln Sie PDF-Bytes aus nicht vertrauenswürdigen Quellen als feindlich. Die eingebauten Richtlinien sind total über beliebige Bytes und sind fail-closed, wo die Struktur nicht aufgelöst werden kann.
  • Stellen Sie ComplianceReport::getDisclaimer() in jeder nutzerseitigen Darstellung eines Berichts dar.
  • Berichte und Befunde können personenbezogene Daten aus signierten Dokumenten und Audit-Trail-Metadaten enthalten (Signierernamen, Zertifikatsseriennummern). Der Betreiber verantwortet die Aufbewahrungs- und Minimierungskontrollen.
  • Benutzerdefinierte Richtlinien implementieren CompliancePolicy; halten Sie getIdentifier() über alle Richtlinien hinweg eindeutig für Serialisierung und Caching.
  • Dieses Modul betrifft kryptografische Funktionalität; behandeln Sie es in Ihrer eigenen Prüfung als sicherheitsrelevant.
  • Interne Mechanismusdetails verbleiben in der internen Dokumentation des Quell-Repositorys und liegen außerhalb des Umfangs dieses Handbuchs.

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