Bỏ qua để đến nội dung
getnextpdf.com

Pro phiên bản

Output Pipeline — Tài liệu tham chiếu chuyên sâu

Trang này là tài liệu tham chiếu chuyên sâu cho bề mặt công khai của NextPDF\Pro\OutputPipeline. Nó bao quát việc dựng và kiểm tra manifest, thứ tự thực thi topo, ngữ nghĩa thử lại và timeout, hành vi resume, và cổng năng lực Pack fail-closed. Nó nêu rõ tham số, giá trị mặc định, và các chế độ thất bại cho mọi ký hiệu công khai. Hãy đọc trang giới thiệu tính năng Output Pipeline trước để có hướng dẫn quy trình làm việc.

Tính năng này được phát hành trong NextPDF Pro (nextpdf/pro) và được kích hoạt bằng một license envelope cấp Pro. Một triển khai không có entitlement đó sẽ không nạp các lớp của tính năng. So sánh các phiên bản và lấy giấy phép.

Executor và bảy trong số mười kiểu bước không mang cờ theo từng tính năng. Ba kiểu bước còn cần thêm một năng lực Pack:

Kiểu bướcGiá trị manifestNăng lực bắt buộcPack
Redactredactpack.privacy.redactPrivacy Pack
Extractextractpack.intelligence.extractIntelligence Pack
OCR overlayocr_overlaypack.intelligence.searchable_pdfIntelligence Pack

Cổng được thực thi tại thời điểm chạy, fail-closed, trước khi bước đạt tới resolver của nó. Một bước bị kiểm soát mà không có giấy phép sẽ cho ra một kết quả bước Failed mang theo mã SPEC-LIC-001 và năng lực bắt buộc; resolver không bao giờ được gọi. Một pipeline không có capability resolver được tiêm vào sẽ từ chối mọi bước bị kiểm soát.

Terminal window
composer require nextpdf/pro:^3

Metapackage nextpdf/premium cài mã nextpdf/pro; module này nằm dưới namespace NextPDF\Pro\OutputPipeline.

Ký hiệuTham sốHành vi mặc địnhTrả vềNém hoặc thất bại vớiGhi chú
PipelineExecutor::__constructStepResolverRegistry $registry, ?CapabilityResolverInterface $capabilityResolver = nullGắn registry resolver dựng sẵn và nguồn entitlement tùy chọnPipelineExecutorKhông khai báo gìMột capability resolver null sẽ từ chối mọi bước bị kiểm soát theo Pack
PipelineExecutor::executePipelineManifest $manifest, array $variables = []Chạy các bước theo thứ tự topo và tổng hợp kết quảPipelineResultKhông khai báo gì; các thất bại của resolver được ghi nhận thành kết quả bước FailedĐược thiết kế để chạy bên trong một job worker bất đồng bộ
PipelineManifest::__constructstring $id, array $steps, PipelineOptions $options = new PipelineOptions(), ?string $resumeFromStepId = nullKiểm tra đồ thị bước tại thời điểm khởi tạoPipelineManifestInvalidArgumentException khi danh sách bước rỗng, ID bước trùng lặp, phụ thuộc không xác định, chu trình, kiểu đầu ra không khớp, hoặc thiếu bước resume; OverflowException khi vượt quá 10 000 bướcToàn bộ kiểm tra hoàn tất trước bất kỳ lần thực thi nào
PipelineManifest::topologicalOrderkhông cóSắp xếp các bước sao cho phụ thuộc đứng trước bên phụ thuộc vào nólist<PipelineStep>Không khai báo gìXác định (deterministic) với một manifest cho trước
PipelineManifest::getStepstring $stepIdTra cứu tuyến tính theo step ID?PipelineStepKhông khai báo gìnull với một ID không xác định
PipelineManifest::rootStepskhông cóTrả về các bước không có phụ thuộclist<PipelineStep>Không khai báo gìCác bước gốc chạy trước
PipelineManifestBuilder::createstring $manifestIdKhởi tạo một builder mớiselfKhông khai báo gìHàm khởi tạo là private; đây là lối vào duy nhất
PipelineManifestBuilder::addStepstring $id, PipelineStepType $type, array $parameters = [], array $dependsOn = [], ?StepOutputType $outputType = nullThêm một bước; kiểu đầu ra null được suy ra từ kiểu bướcselfKhông khai báo gìViệc kiểm tra được hoãn tới build()
PipelineManifestBuilder::stopOnErrorbool $stop = trueĐặt chế độ dừng khi gặp thất bại đầu tiênselfKhông khai báo gìMặc định là true
PipelineManifestBuilder::maxRetriesint $retriesĐặt trần số lần thử lại theo từng bướcselfKhông khai báo gìMặc định là 0 (không thử lại)
PipelineManifestBuilder::timeoutint $timeoutMsĐặt timeout toàn cục của pipelineselfKhông khai báo gì0 vô hiệu hóa timeout
PipelineManifestBuilder::resumeFromstring $stepIdĐặt điểm resumeselfKhông khai báo gìBước đó phải tồn tại tại thời điểm build()
PipelineManifestBuilder::buildkhông cóDựng manifest đã được kiểm traPipelineManifestNhư PipelineManifest::__construct
PipelineOptions::__constructbool $stopOnError = true, int $maxRetries = 0, int $timeoutMs = 0Tùy chọn thực thi bất biếnPipelineOptionsKhông khai báo gìValue object readonly
PipelineStep::__constructstring $id, PipelineStepType $type, array $parameters = [], array $dependsOn = [], StepOutputType $outputType = StepOutputType::PdfĐịnh nghĩa bước bất biếnPipelineStepKhông khai báo gìKhởi tạo trực tiếp mặc định kiểu đầu ra là PDF cho mọi kiểu
PipelineStep::isRootkhông cóTrue khi bước không có phụ thuộcboolKhông khai báo gì
PipelineStepType (enum)Mười case dựa trên chuỗi: generate, merge, split, inspect, compress, sign, convert, cùng các bước bị kiểm soát redact, extract, ocr_overlayMỗi case ứng với một thao tác dựng sẵn
PipelineStepType::requiresPackkhông cóTrue với Redact, Extract, và OcrOverlayboolKhông khai báo gìMọi case còn lại trả về false
PipelineStepType::requiredCapabilitykhông cóÁnh xạ các case bị kiểm soát tới mã năng lực của chúng?stringKhông khai báo gìnull với các case không bị kiểm soát
PipelineStatus (enum)Năm case: pending, running, completed, failed, cancelledDùng chung cho kết quả pipeline và kết quả bước
PipelineStatus::isTerminalkhông cóTrue với Completed, Failed, và CancelledboolKhông khai báo gìPending và Running không phải trạng thái cuối
StepOutputType (enum)Ba case: pdf, json, metadataĐiều khiển việc kiểm tra cạnh lúc build
StepOutputType::forStepTypePipelineStepType $stepTypeKiểu đầu ra mặc định cho một kiểu bướcselfKhông khai báo gìInspect và Extract ánh xạ sang JSON; mọi kiểu khác ánh xạ sang PDF
StepOutputType::isCompatibleWithself $expectedInputTrue khi cùng kiểu hoặc khi đầu ra là PDFboolKhông khai báo gìHàm hỗ trợ; PDF là đầu vào phổ quát
PipelineContext::__constructstring $manifestId, array $variables = [], ?string $resumeFromStepId = nullContext trong bộ nhớ theo từng lượt chạyPipelineContextKhông khai báo gìKhông có TTL, hết hạn, lưu bền, hay kho lưu trữ nền
PipelineContext::setStepResult / ::getStepResultstring $stepId (+ StepResult khi set)Ghi hoặc đọc một kết quả bướcvoid / ?StepResultKhông khai báo gìnull với một bước chưa được thực thi
PipelineContext::setStepOutput / ::getStepOutputstring $stepId (+ mixed khi set)Lưu hoặc đọc một đầu ra trung gianvoid / mixedKhông khai báo gìnull với một đầu ra thiếu vắng
PipelineContext::hasStepResultstring $stepIdCho biết một bước đã được thực thi hay chưaboolKhông khai báo gìHỗ trợ kiểm tra resume
PipelineContext::allStepResultskhông cóMọi kết quả đã ghi cho đến hiện tạiarray<string, StepResult>Không khai báo gìKhóa theo step ID
PipelineContext::isResumekhông cóCho biết lượt chạy có resume từ một bước hay khôngboolKhông khai báo gì
PipelineResult::isSuccesskhông cóChỉ True khi trạng thái tổng thể là CompletedboolKhông khai báo gìKết quả do executor tạo ra
PipelineResult::getStepResultstring $stepIdTìm một kết quả bước theo ID?StepResultKhông khai báo gìnull với các bước bị bỏ qua hoặc không xác định
PipelineResult::failedStepskhông cóLọc ra các kết quả bước thất bạilist<StepResult>Không khai báo gìDanh sách rỗng khi thành công hoàn toàn
StepResult::isSuccesskhông cóChỉ True khi trạng thái bước là CompletedboolKhông khai báo gìMang theo stepId, type, status, durationMs, error, output
CapabilityResolverInterface::hasCapabilitystring $capabilityKiểm tra entitlement khẳng định cho một mã năng lựcboolKhông được ném ngoại lệTừ chối theo mặc định thiếu vắng: false với các mã không xác định, hết hạn, hoặc không được ánh xạ
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;
}

Việc kiểm tra chạy trong hàm khởi tạo của PipelineManifest, trước bất kỳ lần thực thi nào. Theo thứ tự: danh sách bước phải không rỗng; số lượng bước bị giới hạn ở 10 000, biến những chuỗi phụ thuộc sâu mang tính đối kháng thành một OverflowException có thể bắt được thay vì cạn kiệt ngăn xếp ở tầng native; ID bước phải là duy nhất; mọi tham chiếu dependsOn phải phân giải được; đồ thị phụ thuộc phải không có chu trình; các kiểu đầu ra phải tương thích; một bước resume được khai báo phải tồn tại. Mỗi vi phạm sẽ ném ra InvalidArgumentException kèm một thông báo cụ thể.

Phép kiểm tra kiểu đầu ra áp dụng cho các bước có kiểu ánh xạ sang đầu ra PDF: mọi phụ thuộc của một bước như vậy tự nó cũng phải tạo ra đầu ra PDF. Các cạnh phụ thuộc đi vào những kiểu bước tạo ra JSON (inspect, extract) không bị kiểm tra kiểu trong bản phát hành này.

execute($manifest, $variables) dựng một PipelineContext mới, tính thứ tự topo, và chạy các bước tuần tự theo thứ tự đó. Khi có đặt điểm resume, các bước trước đó bị bỏ qua cho đến khi đạt tới bước được nêu tên. Các bước tiền nhiệm bị bỏ qua sẽ không được thực thi lại và đầu ra của chúng không được khôi phục: context là theo từng lượt chạy và nằm trong bộ nhớ, nên một bước được resume mà đọc đầu ra của một tiền nhiệm bị bỏ qua sẽ thấy null.

Timeout toàn cục, khi dương, được đánh giá giữa các bước, trước khi mỗi bước bắt đầu. Khi hết hạn, trạng thái pipeline trở thành Failed và các bước còn lại không khởi động. Một bước đang chạy sẽ không bao giờ bị ngắt giữa chừng, nên một bước kéo dài có thể làm vượt ngân sách.

Mỗi bước nhận tối đa maxRetries + 1 lần thử. Một lần thử thành công sẽ trả về ngay lập tức. Bất kỳ lần thử thất bại nào — một kết quả Failed từ resolver, hoặc một Throwable được ném ra — đều được thử lại khi còn lượt thử; kết quả của lần thử cuối cùng được trả về. Một Throwable phát sinh bên trong một resolver bị hạ cấp thành một kết quả bước Failed mang theo thông báo ngoại lệ, hoặc Unknown error khi thông báo rỗng. Do đó execute() luôn trả về một PipelineResult; nó không bao giờ lan truyền một thất bại của resolver.

Một kiểu bước không có resolver nào được đăng ký sẽ cho ra một kết quả bước Failed kèm thông báo rõ ràng; lượt chạy không bị hủy bỏ. Khi stopOnError là true (mặc định), việc thực thi dừng lại ở bước thất bại đầu tiên và trạng thái pipeline là Failed. Khi nó là false, việc thực thi tiếp tục và trạng thái cuối cùng là Failed nếu có bất kỳ bước nào thất bại, ngược lại là Completed.

Trước bất kỳ lần điều phối resolver nào, mọi bước bị kiểm soát theo Pack (Redact, Extract, OcrOverlay) đều được kiểm tra với CapabilityResolverInterface được tiêm vào. Cổng này fail-closed: một resolver thiếu vắng, một câu trả lời false, hoặc một mã năng lực không được ánh xạ đều từ chối bước. Việc từ chối tạo ra một kết quả bước Failed mà lỗi của nó mang theo mã SPEC-LIC-001, kiểu bước, và năng lực bắt buộc. Một lần từ chối bởi cổng không tiêu tốn lượt thử lại nào và báo cáo thời lượng là 0.0. Các hiện thực của resolver chỉ được trả về true cho một entitlement được nắm giữ một cách khẳng định và không được ném ngoại lệ.

PipelineResult báo cáo manifest ID, trạng thái tổng thể, kết quả theo từng bước theo thứ tự thực thi, tổng thời lượng tính bằng mili-giây, và số bước tổng cộng, đã hoàn tất, và đã thất bại. stepsTotal đếm mọi bước trong manifest, bao gồm các bước bị bỏ qua do resume hoặc chưa được chạm tới sau một lần dừng; stepsCompletedstepsFailed chỉ đếm các bước đã được thực thi.

  • Executor được thiết kế cho việc thực thi bất đồng bộ bên trong một job worker. Việc dùng trực tiếp (inline) sẽ chặn bên gọi trong suốt toàn bộ thời gian pipeline chạy.
  • Timeout toàn cục là một phép kiểm tra giữa các bước. Một bước đơn lẻ kéo dài có thể làm vượt ngân sách; không bước nào bị ngắt giữa chừng.
  • Resume chỉ bỏ qua các bước trong cùng một lần thực thi. Nó không khôi phục đầu ra từ bất kỳ kho lưu trữ nào; resume xuyên lượt chạy với đầu ra đã cache không được hiện thực.
  • Khởi tạo PipelineStep trực tiếp sẽ mặc định kiểu đầu ra là PDF cho mọi kiểu bước. Hãy dùng builder, hoặc truyền kiểu đầu ra một cách tường minh, để các bước inspectextract khai báo đầu ra JSON và việc kiểm tra cạnh vẫn có ý nghĩa.
  • Một ngoại lệ của resolver với thông báo rỗng được chuẩn hóa thành Unknown error trong kết quả bước.
  • Các kết quả bước Failed do cổng hoặc do một resolver thiếu vắng tạo ra sẽ báo cáo thời lượng là 0.0.
  • PipelineResult::getStepResult() trả về null cho cả các ID không xác định lẫn các bước bị bỏ qua do resume hoặc do một lần dừng; phân biệt qua stepsTotal so với độ dài của danh sách kết quả.
  • Module này không thực hiện thao tác mã hóa nào và không định nghĩa hành vi đặc thù FIPS nào. Tư thế FIPS cho bước sign được điều chỉnh bởi module ký, không phải bởi pipeline.

Pipeline không tự thực hiện công việc kiểm tra phù hợp định dạng nào. Tính phù hợp của mỗi artifact được tạo ra thuộc về module đứng sau bước đang thực thi — ký, tối ưu hóa, chuyển đổi, v.v. — và được ghi lại trên các trang tham chiếu của những module đó. Trang này không khẳng định định danh điều khoản bên ngoài nào; mọi phát biểu đều được đặt nền trên mã nguồn sản phẩm. NextPDF không đưa ra tuyên bố chứng nhận nào.

  • Mã nguồn module mang @since 2.2.0; tài liệu tham chiếu này mô tả bề mặt như được phát hành trong nextpdf/pro 3.1.0.
  • Mọi lớp đều là final; các kiểu manifest, options, step, và result là các value object readonly. Hãy khởi tạo instance mới thay vì thay đổi tại chỗ.
  • StepResolverInterfaceStepResolverRegistry@internal. Các step resolver chỉ có sẵn dựng sẵn; các trình xử lý bước tùy chỉnh do người dùng định nghĩa không được hỗ trợ trong bản phát hành này.
  • CapabilityResolverInterface là điểm nối entitlement công khai. Các hiện thực phải theo nguyên tắc từ chối-theo-thiếu-vắng và không được mặc định cho phép.
  • Executor PHP này là đường kiểm tra manifest và thực thi tuần tự; các triển khai production có thể điều phối qua sidecar để dàn xếp song song. Cổng năng lực trên đường PHP luôn fail-closed một cách độc lập trong cả hai trường hợp.
  • Chi tiết cơ chế nội bộ nằm trong tài liệu nội bộ của kho mã nguồn và nằm ngoài phạm vi của tài liệu hướng dẫn này.

Trang này chỉ ghi lại hành vi có thể quan sát từ bên ngoài và bề mặt API công khai được hỗ trợ. Các đường dẫn namespace nội bộ, lớp hỗ trợ, bảng cơ chế, tên file runbook, và tiền tố ticket đều nằm ngoài phạm vi.