Przejdź do głównej zawartości
getnextpdf.com

Pro edycja

Output Pipeline — szczegółowa dokumentacja referencyjna

Ta strona jest szczegółową dokumentacją referencyjną publicznej powierzchni NextPDF\Pro\OutputPipeline. Obejmuje budowę i walidację manifestu, topologiczny porządek wykonania, semantykę ponawiania i limitu czasu, zachowanie wznawiania oraz bramkę możliwości Pack działającą w trybie fail-closed. Podaje parametry, wartości domyślne i tryby awarii każdego publicznego symbolu. Najpierw zapoznaj się ze stroną możliwości Output Pipeline, aby uzyskać wskazówki dotyczące przepływu pracy.

Ta funkcja jest dostarczana w NextPDF Pro (nextpdf/pro) i aktywuje się przy użyciu koperty licencyjnej poziomu Pro. Wdrożenie bez tego uprawnienia nie ładuje klas tej funkcji. Porównaj edycje i uzyskaj licencję.

Executor i siedem z dziesięciu typów kroków nie mają flagi dla poszczególnych funkcji. Trzy typy kroków wymagają dodatkowo możliwości Pack:

Typ krokuWartość w manifeścieWymagana możliwośćPack
Redagowanieredactpack.privacy.redactPrivacy Pack
Ekstrakcjaextractpack.intelligence.extractIntelligence Pack
Nakładka OCRocr_overlaypack.intelligence.searchable_pdfIntelligence Pack

Bramka jest egzekwowana w czasie wykonania, w trybie fail-closed, zanim krok dotrze do swojego resolvera. Bramkowany krok bez licencji daje wynik kroku ze statusem Failed, niosący kod SPEC-LIC-001 oraz wymaganą możliwość; resolver nie jest nigdy wywoływany. Potok bez wstrzykniętego resolvera możliwości odrzuca każdy bramkowany krok.

Okno terminala
composer require nextpdf/pro:^3

Metapakiet nextpdf/premium instaluje kod nextpdf/pro; ten moduł znajduje się w przestrzeni nazw NextPDF\Pro\OutputPipeline.

SymbolParametryDomyślne zachowanieZwracaZgłasza lub kończy niepowodzeniem zUwagi
PipelineExecutor::__constructStepResolverRegistry $registry, ?CapabilityResolverInterface $capabilityResolver = nullWiąże wbudowany rejestr resolverów oraz opcjonalne źródło uprawnieńPipelineExecutorNic nie zadeklarowanoResolver możliwości równy null odrzuca każdy krok bramkowany przez Pack
PipelineExecutor::executePipelineManifest $manifest, array $variables = []Uruchamia kroki w porządku topologicznym i agreguje wynikiPipelineResultNic nie zadeklarowano; niepowodzenia resolvera są przechwytywane jako wyniki kroków ze statusem FailedZaprojektowany do działania wewnątrz asynchronicznego workera zadań
PipelineManifest::__constructstring $id, array $steps, PipelineOptions $options = new PipelineOptions(), ?string $resumeFromStepId = nullWaliduje graf kroków podczas konstrukcjiPipelineManifestInvalidArgumentException przy pustej liście kroków, zduplikowanych identyfikatorach kroków, nieznanych zależnościach, cyklach, niezgodności typu wyjścia lub brakującym kroku wznawiania; OverflowException powyżej 10 000 krokówCała walidacja kończy się przed jakimkolwiek wykonaniem
PipelineManifest::topologicalOrderbrakPorządkuje kroki tak, aby zależności były przed elementami zależnymilist<PipelineStep>Nic nie zadeklarowanoDeterministyczny dla danego manifestu
PipelineManifest::getStepstring $stepIdLiniowe wyszukiwanie według identyfikatora kroku?PipelineStepNic nie zadeklarowanonull dla nieznanego identyfikatora
PipelineManifest::rootStepsbrakZwraca kroki bez zależnościlist<PipelineStep>Nic nie zadeklarowanoKroki główne (root) uruchamiają się pierwsze
PipelineManifestBuilder::createstring $manifestIdRozpoczyna nowy builderselfNic nie zadeklarowanoKonstruktor jest prywatny; to jedyne wejście
PipelineManifestBuilder::addStepstring $id, PipelineStepType $type, array $parameters = [], array $dependsOn = [], ?StepOutputType $outputType = nullDodaje krok; typ wyjścia równy null jest wywnioskowany z typu krokuselfNic nie zadeklarowanoWalidacja jest odroczona do build()
PipelineManifestBuilder::stopOnErrorbool $stop = trueUstawia zatrzymanie przy pierwszym niepowodzeniuselfNic nie zadeklarowanoDomyślnie true
PipelineManifestBuilder::maxRetriesint $retriesUstawia górny limit ponawiania dla pojedynczego krokuselfNic nie zadeklarowanoDomyślnie 0 (bez ponawiania)
PipelineManifestBuilder::timeoutint $timeoutMsUstawia globalny limit czasu potokuselfNic nie zadeklarowano0 wyłącza limit czasu
PipelineManifestBuilder::resumeFromstring $stepIdUstawia punkt wznawianiaselfNic nie zadeklarowanoKrok musi istnieć w chwili build()
PipelineManifestBuilder::buildbrakKonstruuje zwalidowany manifestPipelineManifestJak PipelineManifest::__construct
PipelineOptions::__constructbool $stopOnError = true, int $maxRetries = 0, int $timeoutMs = 0Niezmienne opcje wykonaniaPipelineOptionsNic nie zadeklarowanoObiekt wartości readonly
PipelineStep::__constructstring $id, PipelineStepType $type, array $parameters = [], array $dependsOn = [], StepOutputType $outputType = StepOutputType::PdfNiezmienna definicja krokuPipelineStepNic nie zadeklarowanoBezpośrednia konstrukcja domyślnie ustawia typ wyjścia na PDF dla każdego typu
PipelineStep::isRootbrakTrue, gdy krok nie ma zależnościboolNic nie zadeklarowano
PipelineStepType (enum)Dziesięć przypadków opartych na łańcuchach znaków: generate, merge, split, inspect, compress, sign, convert oraz bramkowane redact, extract, ocr_overlayJeden przypadek na każdą wbudowaną operację
PipelineStepType::requiresPackbrakTrue dla Redact, Extract oraz OcrOverlayboolNic nie zadeklarowanoWszystkie pozostałe przypadki zwracają false
PipelineStepType::requiredCapabilitybrakMapuje bramkowane przypadki na ich kody możliwości?stringNic nie zadeklarowanonull dla przypadków niebramkowanych
PipelineStatus (enum)Pięć przypadków: pending, running, completed, failed, cancelledWspółdzielone przez wyniki potoku i kroków
PipelineStatus::isTerminalbrakTrue dla Completed, Failed oraz CancelledboolNic nie zadeklarowanoPending i Running nie są terminalne
StepOutputType (enum)Trzy przypadki: pdf, json, metadataNapędza walidację krawędzi w czasie budowania
StepOutputType::forStepTypePipelineStepType $stepTypeDomyślny typ wyjścia dla danego typu krokuselfNic nie zadeklarowanoInspect i Extract mapują się na JSON; wszystkie pozostałe typy mapują się na PDF
StepOutputType::isCompatibleWithself $expectedInputTrue przy zgodności tego samego typu lub wyjściu PDFboolNic nie zadeklarowanoPomocnik; PDF jest uniwersalnym wejściem
PipelineContext::__constructstring $manifestId, array $variables = [], ?string $resumeFromStepId = nullKontekst w pamięci dla pojedynczego przebieguPipelineContextNic nie zadeklarowanoBrak TTL, wygasania, trwałości lub magazynu zapasowego
PipelineContext::setStepResult / ::getStepResultstring $stepId (+ StepResult przy zapisie)Zapisuje lub odczytuje wynik krokuvoid / ?StepResultNic nie zadeklarowanonull dla kroku jeszcze niewykonanego
PipelineContext::setStepOutput / ::getStepOutputstring $stepId (+ mixed przy zapisie)Zapisuje lub odczytuje wyjście pośrednievoid / mixedNic nie zadeklarowanonull dla brakującego wyjścia
PipelineContext::hasStepResultstring $stepIdCzy krok już się wykonałboolNic nie zadeklarowanoWspiera sprawdzanie wznawiania
PipelineContext::allStepResultsbrakWszystkie wyniki zapisane dotychczasarray<string, StepResult>Nic nie zadeklarowanoKluczowane według identyfikatora kroku
PipelineContext::isResumebrakCzy przebieg wznawia się od krokuboolNic nie zadeklarowano
PipelineResult::isSuccessbrakTrue tylko dla ogólnego statusu CompletedboolNic nie zadeklarowanoWynik jest wytwarzany przez executor
PipelineResult::getStepResultstring $stepIdZnajduje jeden wynik kroku według identyfikatora?StepResultNic nie zadeklarowanonull dla kroków pominiętych lub nieznanych
PipelineResult::failedStepsbrakFiltruje wyniki kroków ze statusem niepowodzenialist<StepResult>Nic nie zadeklarowanoPusta lista przy pełnym powodzeniu
StepResult::isSuccessbrakTrue tylko dla statusu kroku CompletedboolNic nie zadeklarowanoNiesie stepId, type, status, durationMs, error, output
CapabilityResolverInterface::hasCapabilitystring $capabilityTwierdzący test uprawnienia dla jednego kodu możliwościboolNie może zgłaszać wyjątkuOdmowa przez pominięcie (deny-by-omission): false dla nieznanych, wygasłych lub niezmapowanych kodów
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;
}

Walidacja przebiega w konstruktorze PipelineManifest, przed jakimkolwiek wykonaniem. W kolejności: lista kroków musi być niepusta; liczba kroków jest ograniczona do 10 000, co zamienia wrogo głębokie łańcuchy zależności w przechwytywalny OverflowException zamiast natywnego wyczerpania stosu; identyfikatory kroków muszą być unikalne; każde odwołanie dependsOn musi się rozwiązać; graf zależności musi być acykliczny; typy wyjścia muszą być zgodne; zadeklarowany krok wznawiania musi istnieć. Każde naruszenie zgłasza InvalidArgumentException z konkretnym komunikatem.

Kontrola typu wyjścia dotyczy kroków, których typ mapuje się na wyjście PDF: każda zależność takiego kroku musi sama produkować wyjście PDF. Krawędzie zależności prowadzące do typów kroków produkujących JSON (inspect, extract) nie są sprawdzane pod kątem typu w tej wersji.

execute($manifest, $variables) buduje nowy PipelineContext, oblicza porządek topologiczny i uruchamia kroki sekwencyjnie w tym porządku. Gdy ustawiony jest punkt wznawiania, wcześniejsze kroki są pomijane, aż osiągnięty zostanie nazwany krok. Pominięci poprzednicy nie są wykonywani ponownie, a ich wyjścia nie są przywracane: kontekst dotyczy pojedynczego przebiegu i jest w pamięci, więc wznowiony krok odczytujący wyjście pominiętego poprzednika obserwuje null.

Globalny limit czasu, gdy jest dodatni, jest oceniany między krokami, przed startem każdego kroku. Po jego upływie status potoku staje się Failed, a pozostałe kroki się nie rozpoczynają. Już wykonywany krok nigdy nie jest przerywany w trakcie wykonania, więc jeden długi krok może przekroczyć budżet.

Każdy krok otrzymuje najwyżej maxRetries + 1 prób. Udana próba zwraca natychmiast. Każda nieudana próba — wynik Failed z resolvera lub zgłoszony Throwable — jest ponawiana, dopóki pozostają próby; zwracany jest wynik ostatniej próby. Throwable zgłoszony wewnątrz resolvera jest degradowany do wyniku kroku ze statusem Failed niosącego komunikat wyjątku lub Unknown error, gdy komunikat jest pusty. execute() zawsze zatem zwraca PipelineResult; nigdy nie propaguje niepowodzenia resolvera.

Typ kroku bez zarejestrowanego resolvera daje wynik kroku ze statusem Failed wraz z jawnym komunikatem; przebieg nie jest przerywany. Przy stopOnError równym true (domyślnie) wykonanie zatrzymuje się na pierwszym nieudanym kroku, a status potoku to Failed. Przy false wykonanie jest kontynuowane, a końcowy status to Failed, jeśli którykolwiek krok się nie powiódł, w przeciwnym razie Completed.

Przed jakimkolwiek wywołaniem resolvera każdy krok bramkowany przez Pack (Redact, Extract, OcrOverlay) jest sprawdzany względem wstrzykniętego CapabilityResolverInterface. Bramka działa w trybie fail-closed: brakujący resolver, odpowiedź false lub niezmapowany kod możliwości — wszystkie odrzucają krok. Odrzucenie wytwarza wynik kroku ze statusem Failed, którego błąd niesie kod SPEC-LIC-001, typ kroku oraz wymaganą możliwość. Bramkowe odrzucenie nie zużywa żadnych prób ponawiania i raportuje czas trwania równy 0.0. Implementacje resolvera muszą zwracać true tylko dla twierdząco posiadanego uprawnienia i nie mogą zgłaszać wyjątku.

PipelineResult raportuje identyfikator manifestu, status ogólny, wyniki poszczególnych kroków w porządku wykonania, całkowity czas trwania w milisekundach oraz liczby kroków: całkowitą, ukończonych i nieudanych. stepsTotal liczy każdy krok w manifeście, w tym kroki pominięte przez wznawianie lub nieosiągnięte po zatrzymaniu; stepsCompleted i stepsFailed liczą wyłącznie kroki wykonane.

  • Executor jest zaprojektowany do asynchronicznego wykonywania wewnątrz workera zadań. Użycie inline blokuje wywołującego na cały czas trwania potoku.
  • Globalny limit czasu to sprawdzenie między krokami. Pojedynczy długi krok może przekroczyć budżet; żaden krok nie jest przerywany w trakcie.
  • Wznawianie pomija kroki wyłącznie w obrębie tego samego wykonania. Nie przywraca wyjść z żadnego magazynu; wznawianie międzyprzebiegowe z buforowanymi wyjściami nie jest zaimplementowane.
  • Bezpośrednia konstrukcja PipelineStep domyślnie ustawia typ wyjścia na PDF dla każdego typu kroku. Użyj buildera lub przekaż typ wyjścia jawnie, aby kroki inspect i extract deklarowały wyjście JSON, a walidacja krawędzi pozostała znacząca.
  • Wyjątek resolvera z pustym komunikatem jest normalizowany do Unknown error w wyniku kroku.
  • Wyniki kroków ze statusem Failed wytworzone przez bramkę lub przez brakujący resolver raportują czas trwania równy 0.0.
  • PipelineResult::getStepResult() zwraca null zarówno dla nieznanych identyfikatorów, jak i dla kroków pominiętych przez wznawianie lub zatrzymanie; rozróżnij za pomocą stepsTotal względem długości listy wyników.
  • Ten moduł nie wykonuje żadnych operacji kryptograficznych i nie definiuje zachowania specyficznego dla FIPS. Postawa FIPS dla kroku sign jest rządzona przez moduł podpisywania, a nie przez potok.

Potok nie wykonuje żadnej własnej pracy zgodności formatu. Zgodność każdego wytworzonego artefaktu należy do modułu stojącego za wykonywanym krokiem — podpisywania, optymalizacji, konwersji i tak dalej — i jest udokumentowana na stronach referencyjnych tych modułów. Ta strona nie formułuje żadnych zewnętrznych identyfikatorów klauzul; każde stwierdzenie jest oparte na źródle produktu. NextPDF nie formułuje żadnego roszczenia certyfikacyjnego.

  • Źródło modułu niesie @since 2.2.0; ta dokumentacja opisuje powierzchnię w postaci dostarczonej w nextpdf/pro 3.1.0.
  • Wszystkie klasy są final; typy manifestu, opcji, kroku i wyniku to obiekty wartości readonly. Konstruuj nowe instancje zamiast mutować.
  • StepResolverInterface i StepResolverRegistry@internal. Resolvery kroków są wyłącznie wbudowane; niestandardowe procedury obsługi kroków definiowane przez użytkownika nie są wspierane w tej wersji.
  • CapabilityResolverInterface to publiczny szew uprawnień. Implementacje muszą stosować odmowę przez pominięcie (deny-by-omission) i nie mogą domyślnie zezwalać.
  • Ten executor PHP to ścieżka walidacji manifestu i sekwencyjnego wykonania; wdrożenia produkcyjne mogą kierować pracę przez sidecar w celu równoległej orkiestracji. Bramka możliwości na ścieżce PHP jest niezależnie fail-closed w obu przypadkach.
  • Szczegóły wewnętrznego mechanizmu pozostają w wewnętrznej dokumentacji repozytorium źródłowego i są poza zakresem tego podręcznika.

Ta strona dokumentuje wyłącznie zewnętrznie obserwowalne zachowanie oraz wspieraną powierzchnię publicznego API. Wewnętrzne ścieżki przestrzeni nazw, klasy pomocnicze, tabele mechanizmów, nazwy plików runbooków oraz prefiksy zgłoszeń są poza zakresem.