Zum Inhalt springen
getnextpdf.com

Pro Edition

Ausgabe-Pipeline — Ausführliche Referenz

Diese Seite ist die Detailreferenz für die öffentliche Oberfläche von NextPDF\Pro\OutputPipeline. Sie behandelt Manifest-Erstellung und -Validierung, die topologische Ausführungsreihenfolge, die Semantik von Wiederholung und Timeout, das Resume-Verhalten und das fail-closed Pack-Capability-Gate. Sie nennt Parameter, Standardwerte und Fehlermodi für jedes öffentliche Symbol. Lesen Sie zunächst die Capability-Seite der Ausgabe-Pipeline für Workflow-Hinweise.

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

Der Executor und sieben der zehn Schrittarten tragen kein Feature-Flag. Drei Schrittarten erfordern zusätzlich eine Pack-Capability:

SchrittartManifest-WertErforderliche CapabilityPack
Redaktionredactpack.privacy.redactPrivacy Pack
Extraktionextractpack.intelligence.extractIntelligence Pack
OCR-Overlayocr_overlaypack.intelligence.searchable_pdfIntelligence Pack

Das Gate wird zur Ausführungszeit erzwungen, fail-closed, bevor der Schritt seinen Resolver erreicht. Ein nicht lizenzierter gegateter Schritt liefert ein fehlgeschlagenes Schrittergebnis mit dem Code SPEC-LIC-001 und der erforderlichen Capability; der Resolver wird nie aufgerufen. Eine Pipeline ohne injizierten Capability-Resolver weist jeden gegateten Schritt ab.

Terminal-Fenster
composer require nextpdf/pro:^3

Das Metapaket nextpdf/premium installiert den nextpdf/pro-Code; dieses Modul liegt im Namespace NextPDF\Pro\OutputPipeline.

SymbolParameterStandardverhaltenRückgabeWirft oder scheitert mitHinweise
PipelineExecutor::__constructStepResolverRegistry $registry, ?CapabilityResolverInterface $capabilityResolver = nullBindet die eingebaute Resolver-Registry und die optionale BerechtigungsquellePipelineExecutorNichts deklariertEin null-Capability-Resolver weist jeden pack-gegateten Schritt ab
PipelineExecutor::executePipelineManifest $manifest, array $variables = []Führt Schritte in topologischer Reihenfolge aus und aggregiert die ErgebnissePipelineResultNichts deklariert; Resolver-Fehler werden als fehlgeschlagene Schrittergebnisse erfasstFür die Ausführung innerhalb eines asynchronen Job-Workers ausgelegt
PipelineManifest::__constructstring $id, array $steps, PipelineOptions $options = new PipelineOptions(), ?string $resumeFromStepId = nullValidiert den Schrittgraphen bei der KonstruktionPipelineManifestInvalidArgumentException bei leerer Schrittliste, doppelten Schritt-IDs, unbekannten Abhängigkeiten, Zyklen, Ausgabetyp-Diskrepanz oder einem fehlenden Resume-Schritt; OverflowException oberhalb von 10 000 SchrittenDie gesamte Validierung wird vor jeder Ausführung abgeschlossen
PipelineManifest::topologicalOrderkeineOrdnet Schritte so, dass Abhängigkeiten vor den abhängigen Schritten stehenlist<PipelineStep>Nichts deklariertDeterministisch für ein gegebenes Manifest
PipelineManifest::getStepstring $stepIdLineare Suche anhand der Schritt-ID?PipelineStepNichts deklariertnull bei unbekannter ID
PipelineManifest::rootStepskeineGibt die Schritte ohne Abhängigkeiten zurücklist<PipelineStep>Nichts deklariertWurzelschritte laufen zuerst
PipelineManifestBuilder::createstring $manifestIdStartet einen neuen BuilderselfNichts deklariertDer Konstruktor ist privat; dies ist der einzige Einstiegspunkt
PipelineManifestBuilder::addStepstring $id, PipelineStepType $type, array $parameters = [], array $dependsOn = [], ?StepOutputType $outputType = nullHängt einen Schritt an; ein null-Ausgabetyp wird aus der Schrittart abgeleitetselfNichts deklariertDie Validierung wird auf build() verschoben
PipelineManifestBuilder::stopOnErrorbool $stop = trueLegt das Anhalten beim ersten Fehler festselfNichts deklariertStandard ist true
PipelineManifestBuilder::maxRetriesint $retriesLegt die Obergrenze für Wiederholungen pro Schritt festselfNichts deklariertStandard ist 0 (keine Wiederholungen)
PipelineManifestBuilder::timeoutint $timeoutMsLegt das globale Pipeline-Timeout festselfNichts deklariert0 deaktiviert das Timeout
PipelineManifestBuilder::resumeFromstring $stepIdLegt den Resume-Punkt festselfNichts deklariertDer Schritt muss zum Zeitpunkt von build() existieren
PipelineManifestBuilder::buildkeineKonstruiert das validierte ManifestPipelineManifestWie PipelineManifest::__construct
PipelineOptions::__constructbool $stopOnError = true, int $maxRetries = 0, int $timeoutMs = 0Unveränderliche AusführungsoptionenPipelineOptionsNichts deklariertReadonly-Wertobjekt
PipelineStep::__constructstring $id, PipelineStepType $type, array $parameters = [], array $dependsOn = [], StepOutputType $outputType = StepOutputType::PdfUnveränderliche SchrittdefinitionPipelineStepNichts deklariertBei direkter Konstruktion wird der Ausgabetyp für jede Art standardmäßig auf PDF gesetzt
PipelineStep::isRootkeineTrue, wenn der Schritt keine Abhängigkeiten hatboolNichts deklariert
PipelineStepType (enum)Zehn string-basierte Fälle: generate, merge, split, inspect, compress, sign, convert sowie die gegateten redact, extract, ocr_overlayEin Fall pro eingebauter Operation
PipelineStepType::requiresPackkeineTrue für Redact, Extract und OcrOverlayboolNichts deklariertAlle anderen Fälle geben false zurück
PipelineStepType::requiredCapabilitykeineOrdnet gegateten Fällen ihre Capability-Codes zu?stringNichts deklariertnull für nicht gegatete Fälle
PipelineStatus (enum)Fünf Fälle: pending, running, completed, failed, cancelledVon Pipeline- und Schrittergebnissen gemeinsam genutzt
PipelineStatus::isTerminalkeineTrue für Completed, Failed und CancelledboolNichts deklariertPending und Running sind nicht-terminal
StepOutputType (enum)Drei Fälle: pdf, json, metadataSteuert die Kantenvalidierung zur Build-Zeit
StepOutputType::forStepTypePipelineStepType $stepTypeStandard-Ausgabetyp für eine SchrittartselfNichts deklariertInspect und Extract werden auf JSON abgebildet; alle anderen Arten auf PDF
StepOutputType::isCompatibleWithself $expectedInputTrue bei Übereinstimmung des gleichen Typs oder einer PDF-AusgabeboolNichts deklariertHilfsfunktion; PDF ist die universelle Eingabe
PipelineContext::__constructstring $manifestId, array $variables = [], ?string $resumeFromStepId = nullIn-Memory-Kontext pro DurchlaufPipelineContextNichts deklariertKein TTL, kein Ablauf, keine Persistenz, kein Backing-Store
PipelineContext::setStepResult / ::getStepResultstring $stepId (+ StepResult beim Setzen)Erfasst oder liest ein Schrittergebnisvoid / ?StepResultNichts deklariertnull für einen noch nicht ausgeführten Schritt
PipelineContext::setStepOutput / ::getStepOutputstring $stepId (+ mixed beim Setzen)Speichert oder liest eine Zwischenausgabevoid / mixedNichts deklariertnull bei fehlender Ausgabe
PipelineContext::hasStepResultstring $stepIdOb ein Schritt bereits ausgeführt wurdeboolNichts deklariertUnterstützt Resume-Prüfungen
PipelineContext::allStepResultskeineAlle bislang erfassten Ergebnissearray<string, StepResult>Nichts deklariertNach Schritt-ID indiziert
PipelineContext::isResumekeineOb der Lauf ab einem Schritt fortgesetzt wirdboolNichts deklariert
PipelineResult::isSuccesskeineTrue nur beim Gesamtstatus CompletedboolNichts deklariertDas Ergebnis wird vom Executor erzeugt
PipelineResult::getStepResultstring $stepIdFindet ein Schrittergebnis anhand der ID?StepResultNichts deklariertnull für übersprungene oder unbekannte Schritte
PipelineResult::failedStepskeineFiltert die fehlgeschlagenen Schrittergebnisselist<StepResult>Nichts deklariertLeere Liste bei vollständigem Erfolg
StepResult::isSuccesskeineTrue nur beim Schrittstatus CompletedboolNichts deklariertTrägt stepId, type, status, durationMs, error, output
CapabilityResolverInterface::hasCapabilitystring $capabilityBejahende Berechtigungsprüfung für einen Capability-CodeboolDarf nicht werfenDeny-by-omission: false für unbekannte, abgelaufene oder nicht zugeordnete Codes
final class PipelineExecutor
{
public function __construct(
private readonly StepResolverRegistry $registry,
private readonly ?CapabilityResolverInterface $capabilityResolver = null,
)
public function execute(PipelineManifest $manifest, array $variables = []): PipelineResult
}
final class PipelineManifestBuilder
{
public static function create(string $manifestId): self
public function addStep(
string $id,
PipelineStepType $type,
array $parameters = [],
array $dependsOn = [],
?StepOutputType $outputType = null,
): self
public function stopOnError(bool $stop = true): self
public function maxRetries(int $retries): self
public function timeout(int $timeoutMs): self
public function resumeFrom(string $stepId): self
public function build(): PipelineManifest
}
interface CapabilityResolverInterface
{
public function hasCapability(string $capability): bool;
}

Die Validierung läuft im Konstruktor von PipelineManifest, vor jeder Ausführung. Der Reihe nach: Die Schrittliste darf nicht leer sein; die Schrittanzahl ist auf 10 000 begrenzt, wodurch adversariell tiefe Abhängigkeitsketten in eine abfangbare OverflowException statt in eine native Stacküberlastung umgewandelt werden; Schritt-IDs müssen eindeutig sein; jede dependsOn-Referenz muss auflösbar sein; der Abhängigkeitsgraph muss azyklisch sein; Ausgabetypen müssen kompatibel sein; ein deklarierter Resume-Schritt muss existieren. Jede Verletzung löst eine InvalidArgumentException mit einer spezifischen Meldung aus.

Die Ausgabetyp-Prüfung gilt für Schritte, deren Art auf PDF-Ausgabe abgebildet wird: Jede Abhängigkeit eines solchen Schritts muss selbst PDF-Ausgabe erzeugen. Abhängigkeitskanten zu JSON-erzeugenden Schrittarten (inspect, extract) werden in diesem Release nicht typgeprüft.

execute($manifest, $variables) baut einen frischen PipelineContext auf, berechnet die topologische Reihenfolge und führt die Schritte sequenziell in dieser Reihenfolge aus. Ist ein Resume-Punkt gesetzt, werden frühere Schritte übersprungen, bis der benannte Schritt erreicht ist. Übersprungene Vorgänger werden nicht erneut ausgeführt und ihre Ausgaben nicht wiederhergestellt: Der Kontext gilt pro Durchlauf und liegt im Speicher, sodass ein fortgesetzter Schritt, der die Ausgabe eines übersprungenen Vorgängers liest, null beobachtet.

Das globale Timeout wird, wenn positiv, zwischen den Schritten ausgewertet, bevor jeder Schritt startet. Bei Ablauf wird der Pipeline-Status zu Failed und verbleibende Schritte starten nicht. Ein bereits laufender Schritt wird niemals mitten in der Ausführung unterbrochen, sodass ein langer Schritt das Budget überschreiten kann.

Jeder Schritt erhält höchstens maxRetries + 1 Versuche. Ein erfolgreicher Versuch kehrt sofort zurück. Jeder fehlgeschlagene Versuch — ein Failed-Ergebnis des Resolvers oder ein geworfenes Throwable — wird wiederholt, solange Versuche verbleiben; das Ergebnis des letzten Versuchs wird zurückgegeben. Ein innerhalb eines Resolvers ausgelöstes Throwable wird zu einem fehlgeschlagenen Schrittergebnis herabgestuft, das die Ausnahmemeldung trägt, oder Unknown error, wenn die Meldung leer ist. execute() gibt daher immer ein PipelineResult zurück; ein Resolver-Fehler wird niemals propagiert.

Eine Schrittart ohne registrierten Resolver liefert ein fehlgeschlagenes Schrittergebnis mit einer expliziten Meldung; der Lauf wird nicht abgebrochen. Ist stopOnError true (der Standard), hält die Ausführung beim ersten fehlgeschlagenen Schritt an und der Pipeline-Status ist Failed. Ist es false, läuft die Ausführung weiter und der Endstatus ist Failed, wenn irgendein Schritt fehlgeschlagen ist, andernfalls Completed.

Vor jeder Resolver-Weiterleitung wird jeder pack-gegatete Schritt (Redact, Extract, OcrOverlay) gegen den injizierten CapabilityResolverInterface geprüft. Das Gate ist fail-closed: ein fehlender Resolver, eine false-Antwort oder ein nicht zugeordneter Capability-Code weisen den Schritt jeweils ab. Die Ablehnung erzeugt ein fehlgeschlagenes Schrittergebnis, dessen Fehler den Code SPEC-LIC-001, die Schrittart und die erforderliche Capability trägt. Eine gegatete Ablehnung verbraucht keine Wiederholungsversuche und meldet eine Dauer von 0.0. Implementierungen des Resolvers dürfen nur bei einer bejahend gehaltenen Berechtigung true zurückgeben und dürfen nicht werfen.

PipelineResult meldet die Manifest-ID, den Gesamtstatus, die Ergebnisse pro Schritt in Ausführungsreihenfolge, die Gesamtdauer in Millisekunden sowie die Gesamtanzahl der Schritte und die Anzahl der abgeschlossenen und fehlgeschlagenen Schritte. stepsTotal zählt jeden Schritt im Manifest, einschließlich durch Resume übersprungener oder nach einem Halt nicht erreichter Schritte; stepsCompleted und stepsFailed zählen nur ausgeführte Schritte.

  • Der Executor ist für die asynchrone Ausführung innerhalb eines Job-Workers ausgelegt. Eine Inline-Verwendung blockiert den Aufrufer für die gesamte Pipeline-Dauer.
  • Das globale Timeout ist eine Prüfung zwischen den Schritten. Ein einzelner langer Schritt kann das Budget überschreiten; kein Schritt wird mitten im Lauf unterbrochen.
  • Resume überspringt Schritte nur innerhalb derselben Ausführung. Es stellt keine Ausgaben aus einem Store wieder her; ein durchlaufübergreifendes Resume mit zwischengespeicherten Ausgaben ist nicht implementiert.
  • Die direkte Konstruktion von PipelineStep setzt den Ausgabetyp für jede Schrittart standardmäßig auf PDF. Verwenden Sie den Builder oder übergeben Sie den Ausgabetyp explizit, damit inspect- und extract-Schritte JSON-Ausgabe deklarieren und die Kantenvalidierung aussagekräftig bleibt.
  • Eine Resolver-Ausnahme mit leerer Meldung wird im Schrittergebnis zu Unknown error normalisiert.
  • Fehlgeschlagene Schrittergebnisse, die vom Gate oder von einem fehlenden Resolver erzeugt werden, melden eine Dauer von 0.0.
  • PipelineResult::getStepResult() gibt sowohl bei unbekannten IDs als auch bei durch Resume oder einen Halt übersprungenen Schritten null zurück; unterscheiden Sie über stepsTotal gegenüber der Länge der Ergebnisliste.
  • Dieses Modul führt keine kryptografischen Operationen durch und definiert kein FIPS-spezifisches Verhalten. Die FIPS-Haltung für den sign-Schritt wird vom Signaturmodul bestimmt, nicht von der Pipeline.

Die Pipeline führt keine eigene Formatkonformitätsarbeit durch. Die Konformität jedes erzeugten Artefakts liegt beim Modul hinter dem ausführenden Schritt — Signieren, Optimierung, Konvertierung usw. — und ist auf den Referenzseiten dieser Module dokumentiert. Diese Seite behauptet keine externen Klauselbezeichner; jede Aussage ist im Produkt-Quellcode begründet. NextPDF erhebt keinen Zertifizierungsanspruch.

  • Der Modul-Quellcode trägt @since 2.2.0; diese Referenz dokumentiert die Oberfläche, wie sie in nextpdf/pro 3.1.0 ausgeliefert wird.
  • Alle Klassen sind final; die Manifest-, Options-, Schritt- und Ergebnistypen sind readonly Wertobjekte. Konstruieren Sie neue Instanzen, statt zu mutieren.
  • StepResolverInterface und StepResolverRegistry sind @internal. Schritt-Resolver sind ausschließlich eingebaut; benutzerdefinierte eigene Schritt-Handler werden in diesem Release nicht unterstützt.
  • CapabilityResolverInterface ist die öffentliche Berechtigungsschnittstelle. Implementierungen müssen deny-by-omission sein und dürfen nicht standardmäßig zulassen.
  • Dieser PHP-Executor ist der Pfad für Manifest-Validierung und sequenzielle Ausführung; Produktionsbereitstellungen können für die parallele Orchestrierung über den Sidecar weiterleiten. Das Capability-Gate auf dem PHP-Pfad ist in beiden Fällen unabhängig fail-closed.
  • Interne Mechanismus-Details 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 Namespace-Pfade, Hilfsklassen, Mechanismustabellen, Runbook-Dateinamen und Ticket-Präfixe liegen außerhalb des Umfangs.