Pular para o conteúdo
getnextpdf.com

Pro edição

Output Pipeline — Referência Profunda

Esta página é a referência profunda da superfície pública de NextPDF\Pro\OutputPipeline. Ela abrange a construção e validação de manifesto, a ordem de execução topológica, a semântica de repetição e tempo limite, o comportamento de retomada e a restrição por capacidade de Pack fail-closed. Ela declara parâmetros, valores padrão e modos de falha de cada símbolo público. Leia primeiro a página de apresentação do Output Pipeline para orientação sobre fluxo de trabalho.

Este recurso é fornecido no NextPDF Pro (nextpdf/pro) e é ativado com um envelope de licença de nível Pro. Uma implantação sem esse direito não carrega as classes do recurso. Compare edições e obtenha uma licença.

O executor e sete dos dez tipos de etapa não têm sinalizador por recurso. Três tipos de etapa exigem, adicionalmente, uma capacidade de Pack:

Tipo de etapaValor no manifestoCapacidade necessáriaPack
Tarjamentoredactpack.privacy.redactPrivacy Pack
Extraçãoextractpack.intelligence.extractIntelligence Pack
Sobreposição de OCRocr_overlaypack.intelligence.searchable_pdfIntelligence Pack

A restrição é aplicada em tempo de execução, fail-closed, antes de a etapa alcançar seu resolver. Uma etapa restrita sem licença produz um resultado de etapa Failed contendo o código SPEC-LIC-001 e a capacidade necessária; o resolver nunca é invocado. Um pipeline sem resolver de capacidade injetado rejeita todas as etapas restritas.

Terminal window
composer require nextpdf/pro:^3

O metapacote nextpdf/premium instala o código do nextpdf/pro; este módulo reside no namespace NextPDF\Pro\OutputPipeline.

SímboloParâmetrosComportamento padrãoRetornaLança ou falha comNotas
PipelineExecutor::__constructStepResolverRegistry $registry, ?CapabilityResolverInterface $capabilityResolver = nullVincula o registro de resolvers integrado e a fonte opcional de direitosPipelineExecutorNada declaradoUm resolver de capacidade nulo rejeita todas as etapas restritas por Pack
PipelineExecutor::executePipelineManifest $manifest, array $variables = []Executa as etapas em ordem topológica e agrega os resultadosPipelineResultNada declarado; falhas de resolver são capturadas como resultados de etapa FailedProjetado para ser executado dentro de um worker de jobs assíncrono
PipelineManifest::__constructstring $id, array $steps, PipelineOptions $options = new PipelineOptions(), ?string $resumeFromStepId = nullValida o grafo de etapas na construçãoPipelineManifestInvalidArgumentException para uma lista de etapas vazia, IDs de etapa duplicados, dependências desconhecidas, ciclos, incompatibilidade de tipo de saída ou uma etapa de retomada ausente; OverflowException acima de 10 000 etapasToda a validação é concluída antes de qualquer execução
PipelineManifest::topologicalOrdernenhumOrdena as etapas com dependências antes dos dependenteslist<PipelineStep>Nada declaradoDeterminístico para um dado manifesto
PipelineManifest::getStepstring $stepIdBusca linear por ID de etapa?PipelineStepNada declaradonull para um ID desconhecido
PipelineManifest::rootStepsnenhumRetorna as etapas sem dependênciaslist<PipelineStep>Nada declaradoAs etapas raiz são executadas primeiro
PipelineManifestBuilder::createstring $manifestIdInicia um novo builderselfNada declaradoO construtor é privado; este é o único ponto de entrada
PipelineManifestBuilder::addStepstring $id, PipelineStepType $type, array $parameters = [], array $dependsOn = [], ?StepOutputType $outputType = nullAnexa uma etapa; um tipo de saída nulo é inferido a partir do tipo de etapaselfNada declaradoA validação é adiada para build()
PipelineManifestBuilder::stopOnErrorbool $stop = trueDefine a interrupção na primeira falhaselfNada declaradoPadrão true
PipelineManifestBuilder::maxRetriesint $retriesDefine o teto de repetições por etapaselfNada declaradoPadrão 0 (sem repetições)
PipelineManifestBuilder::timeoutint $timeoutMsDefine o tempo limite global do pipelineselfNada declarado0 desativa o tempo limite
PipelineManifestBuilder::resumeFromstring $stepIdDefine o ponto de retomadaselfNada declaradoA etapa deve existir no momento de build()
PipelineManifestBuilder::buildnenhumConstrói o manifesto validadoPipelineManifestComo PipelineManifest::__construct
PipelineOptions::__constructbool $stopOnError = true, int $maxRetries = 0, int $timeoutMs = 0Opções de execução imutáveisPipelineOptionsNada declaradoObjeto de valor readonly
PipelineStep::__constructstring $id, PipelineStepType $type, array $parameters = [], array $dependsOn = [], StepOutputType $outputType = StepOutputType::PdfDefinição de etapa imutávelPipelineStepNada declaradoA construção direta usa PDF como tipo de saída padrão para todos os tipos
PipelineStep::isRootnenhumVerdadeiro quando a etapa não tem dependênciasboolNada declarado
PipelineStepType (enum)Dez casos com backing de string: generate, merge, split, inspect, compress, sign, convert, além dos restritos redact, extract, ocr_overlayUm caso por operação integrada
PipelineStepType::requiresPacknenhumVerdadeiro para Redact, Extract e OcrOverlayboolNada declaradoTodos os outros casos retornam false
PipelineStepType::requiredCapabilitynenhumMapeia os casos restritos para seus códigos de capacidade?stringNada declaradonull para casos não restritos
PipelineStatus (enum)Cinco casos: pending, running, completed, failed, cancelledCompartilhado por resultados de pipeline e de etapa
PipelineStatus::isTerminalnenhumVerdadeiro para Completed, Failed e CancelledboolNada declaradoPending e Running não são terminais
StepOutputType (enum)Três casos: pdf, json, metadataDireciona a validação de arestas em tempo de build
StepOutputType::forStepTypePipelineStepType $stepTypeTipo de saída padrão para um tipo de etapaselfNada declaradoInspect e Extract mapeiam para JSON; todos os outros tipos mapeiam para PDF
StepOutputType::isCompatibleWithself $expectedInputVerdadeiro para correspondência do mesmo tipo ou uma saída PDFboolNada declaradoAuxiliar; PDF é a entrada universal
PipelineContext::__constructstring $manifestId, array $variables = [], ?string $resumeFromStepId = nullContexto em memória por execuçãoPipelineContextNada declaradoSem TTL, expiração, persistência ou armazenamento de apoio
PipelineContext::setStepResult / ::getStepResultstring $stepId (+ StepResult no set)Registra ou lê um resultado de etapavoid / ?StepResultNada declaradonull para uma etapa ainda não executada
PipelineContext::setStepOutput / ::getStepOutputstring $stepId (+ mixed no set)Armazena ou lê uma saída intermediáriavoid / mixedNada declaradonull para uma saída ausente
PipelineContext::hasStepResultstring $stepIdSe uma etapa já foi executadaboolNada declaradoDá suporte às verificações de retomada
PipelineContext::allStepResultsnenhumTodos os resultados registrados até o momentoarray<string, StepResult>Nada declaradoIndexado por ID de etapa
PipelineContext::isResumenenhumSe a execução é retomada a partir de uma etapaboolNada declarado
PipelineResult::isSuccessnenhumVerdadeiro apenas para o status geral CompletedboolNada declaradoO resultado é produzido pelo executor
PipelineResult::getStepResultstring $stepIdEncontra um resultado de etapa por ID?StepResultNada declaradonull para etapas puladas ou desconhecidas
PipelineResult::failedStepsnenhumFiltra os resultados de etapa com falhalist<StepResult>Nada declaradoLista vazia em caso de sucesso total
StepResult::isSuccessnenhumVerdadeiro apenas para o status de etapa CompletedboolNada declaradoContém stepId, type, status, durationMs, error, output
CapabilityResolverInterface::hasCapabilitystring $capabilityTeste afirmativo de direito para um código de capacidadeboolNão deve lançarNegação por omissão: false para códigos desconhecidos, expirados ou não mapeados
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;
}

A validação é executada no construtor de PipelineManifest, antes de qualquer execução. Em ordem: a lista de etapas não pode ser vazia; a contagem de etapas é limitada a 10 000, convertendo cadeias de dependência adversarialmente profundas em uma OverflowException capturável em vez de esgotamento nativo da pilha; os IDs de etapa devem ser únicos; toda referência em dependsOn deve ser resolvida; o grafo de dependências deve ser acíclico; os tipos de saída devem ser compatíveis; uma etapa de retomada declarada deve existir. Cada violação lança InvalidArgumentException com uma mensagem específica.

A verificação de tipo de saída se aplica às etapas cujo tipo mapeia para saída PDF: toda dependência de tal etapa deve, ela própria, produzir saída PDF. Arestas de dependência para tipos de etapa que produzem JSON (inspect, extract) não têm o tipo verificado nesta versão.

execute($manifest, $variables) monta um novo PipelineContext, calcula a ordem topológica e executa as etapas sequencialmente nessa ordem. Com um ponto de retomada definido, as etapas anteriores são puladas até alcançar a etapa nomeada. Os predecessores pulados não são reexecutados e suas saídas não são restauradas: o contexto é por execução e em memória, portanto uma etapa retomada que lê a saída de um predecessor pulado observa null.

O tempo limite global, quando positivo, é avaliado entre as etapas, antes do início de cada etapa. Ao expirar, o status do pipeline torna-se Failed e as etapas restantes não são iniciadas. Uma etapa já em execução nunca é interrompida no meio da execução, portanto uma etapa longa pode ultrapassar o orçamento.

Cada etapa recebe no máximo maxRetries + 1 tentativas. Uma tentativa bem-sucedida retorna imediatamente. Qualquer tentativa com falha — um resultado Failed do resolver ou um Throwable lançado — é repetida enquanto houver tentativas restantes; o resultado da tentativa final é retornado. Um Throwable lançado dentro de um resolver é rebaixado a um resultado de etapa Failed contendo a mensagem da exceção, ou Unknown error quando a mensagem está vazia. Portanto, execute() sempre retorna um PipelineResult; ele nunca propaga uma falha de resolver.

Um tipo de etapa sem resolver registrado produz um resultado de etapa Failed com uma mensagem explícita; a execução não é abortada. Com stopOnError true (o padrão), a execução é interrompida na primeira etapa com falha e o status do pipeline é Failed. Com ele false, a execução continua e o status final é Failed se qualquer etapa falhou, caso contrário Completed.

Antes de qualquer despacho de resolver, toda etapa restrita por Pack (Redact, Extract, OcrOverlay) é verificada contra o CapabilityResolverInterface injetado. A restrição é fail-closed: um resolver ausente, uma resposta false ou um código de capacidade não mapeado rejeitam a etapa. A rejeição produz um resultado de etapa Failed cujo erro contém o código SPEC-LIC-001, o tipo de etapa e a capacidade necessária. Uma rejeição restrita não consome tentativas de repetição e informa uma duração de 0.0. As implementações do resolver devem retornar true apenas para um direito afirmativamente mantido e não devem lançar.

PipelineResult informa o ID do manifesto, o status geral, os resultados por etapa em ordem de execução, a duração total em milissegundos e as contagens total, concluídas e com falha de etapas. stepsTotal conta todas as etapas do manifesto, incluindo as etapas puladas pela retomada ou não alcançadas após uma interrupção; stepsCompleted e stepsFailed contam apenas as etapas executadas.

  • O executor é projetado para execução assíncrona dentro de um worker de jobs. O uso inline bloqueia o chamador durante toda a duração do pipeline.
  • O tempo limite global é uma verificação entre etapas. Uma única etapa longa pode ultrapassar o orçamento; nenhuma etapa é interrompida no meio do processamento.
  • A retomada pula etapas apenas dentro da mesma execução. Ela não restaura saídas de nenhum armazenamento; a retomada entre execuções com saídas em cache não está implementada.
  • Construir PipelineStep diretamente usa PDF como tipo de saída padrão para todos os tipos de etapa. Use o builder, ou passe o tipo de saída explicitamente, para que as etapas inspect e extract declarem saída JSON e a validação de arestas continue significativa.
  • Uma exceção de resolver com mensagem vazia é normalizada para Unknown error no resultado da etapa.
  • Resultados de etapa Failed produzidos pela restrição ou por um resolver ausente informam uma duração de 0.0.
  • PipelineResult::getStepResult() retorna null tanto para IDs desconhecidos quanto para etapas puladas pela retomada ou por uma interrupção; distinga por meio de stepsTotal versus o comprimento da lista de resultados.
  • Este módulo não realiza operações criptográficas e não define comportamento específico de FIPS. A postura FIPS da etapa sign é regida pelo módulo de assinatura, não pelo pipeline.

O pipeline não realiza nenhum trabalho próprio de conformidade de formato. A conformidade de cada artefato produzido pertence ao módulo por trás da etapa em execução — assinatura, otimização, conversão e assim por diante — e é documentada nas páginas de referência desses módulos. Esta página não afirma nenhum identificador de cláusula externo; cada afirmação está fundamentada na fonte do produto. A NextPDF não faz nenhuma alegação de certificação.

  • A fonte do módulo traz @since 2.2.0; esta referência documenta a superfície conforme fornecida no nextpdf/pro 3.1.0.
  • Todas as classes são final; os tipos de manifesto, opções, etapa e resultado são objetos de valor readonly. Construa novas instâncias em vez de mutar.
  • StepResolverInterface e StepResolverRegistry são @internal. Os resolvers de etapa são apenas integrados; manipuladores de etapa personalizados definidos pelo usuário não são suportados nesta versão.
  • CapabilityResolverInterface é a costura pública de direitos. As implementações devem ser de negação por omissão e não devem permitir por padrão.
  • Este executor PHP é o caminho de validação de manifesto e execução sequencial; implantações de produção podem despachar por meio do sidecar para orquestração paralela. A restrição por capacidade no caminho PHP é independentemente fail-closed em qualquer caso.
  • Detalhes internos de mecanismo permanecem na documentação interna do repositório de código e estão fora do escopo deste manual.

Esta página documenta apenas o comportamento observável externamente e a superfície pública suportada da API. Caminhos de namespace internos, classes auxiliares, tabelas de mecanismo, nomes de arquivo de runbook e prefixos de ticket estão fora do escopo.