Enterprise edição
Document E-Filing — Referência Profunda
Visão geral
Seção intitulada “Visão geral”EFilingOptimizerprepara um PDF para protocolo judicial eletrônico em uma única passagem de ordem fixa: saneamento, linearização, divisão por tamanho.EFilingProfilecodifica restrições de jurisdição. Fábricas integradas cobrem US PACER, EU e-Justice e Taiwan Judicial Yuan.SizeAwareSplitterimpõe um limite de bytes por segmento com redivisão do tipo verificar-então-corrigir.- A saída é um artefato de entrega. Ela não deve reentrar em pipelines de assinatura ou arquivamento.
- O módulo não realiza nenhuma operação criptográfica e não faz chamadas de rede de saída.
Disponibilidade e licenciamento
Seção intitulada “Disponibilidade e licenciamento”Esta capacidade é distribuída no NextPDF Enterprise (nextpdf/enterprise) e é ativada com um envelope de licença de nível Enterprise. Uma implantação sem esse direito não carrega as classes da capacidade. Compare edições e obtenha uma licença.
O limite do pacote nextpdf/enterprise restringe esta superfície; não há código de capacidade separado por recurso. Nenhuma edição Core ou Pro fornece um otimizador de e-filing.
Superfície da API pública
Seção intitulada “Superfície da API pública”composer require nextpdf/enterprise:^3| Símbolo | Parâmetros | Comportamento padrão | Retorna | Lança ou falha com | Observações |
|---|---|---|---|---|---|
EFilingOptimizer::optimize() | string $pdfData, ?EFilingProfile $profile = null | O perfil assume EFilingProfile::pacer() por padrão; executa saneamento, linearização e divisão por tamanho em ordem fixa | EFilingResult | InvalidArgumentException na etapa de divisão quando uma entrada acima do limite não é um PDF válido; falhas de saneamento e linearização são rebaixadas a avisos | A saída é um artefato de entrega |
EFilingProfile::__construct() | $name, $maxFileSizeBytes = 26_214_400, $flattenForms = true, $removeJavaScript = true, $imageQuality = 75, $linearize = true, $compressObjectStreams = true | Perfil de jurisdição imutável | EFilingProfile | Não lança | Limites personalizados para portais sem uma fábrica integrada |
EFilingProfile::pacer() | nenhum | Limite de 25 MiB, qualidade de imagem 75 | EFilingProfile | Não lança | US PACER |
EFilingProfile::euJustice() | nenhum | Limite de 10 MiB, qualidade de imagem 70 | EFilingProfile | Não lança | EU e-Justice Portal |
EFilingProfile::taiwan() | nenhum | Limite de 10 MiB, qualidade de imagem 70 | EFilingProfile | Não lança | Taiwan Judicial Yuan |
SizeAwareSplitter::splitByMaxSize() | string $pdfData, int $maxBytes | Um único segmento quando a entrada cabe; caso contrário, estima, verifica e redivide | list<EFilingSegment> | InvalidArgumentException quando uma entrada acima do limite não tem um cabeçalho %PDF | Entrada abaixo do limite retorna como um único segmento sem validação |
EFilingResult::isSplit() | nenhum | true quando existe mais de um segmento | bool | Não lança | — |
EFilingResult::segmentCount() | nenhum | Número total de segmentos | int | Não lança | — |
EFilingResult::compressionRatio() | nenhum | optimizedTotalSize / originalSize | float | Não lança; 0.0 para entrada original vazia | Quanto menor, melhor |
EFilingSegment | $pdfData, $pageRange, $sizeBytes, $segmentIndex | Segmento de saída imutável | objeto de valor | Não lança | String de intervalo de páginas como 1-25 ou all |
public function optimize(string $pdfData, ?EFilingProfile $profile = null): EFilingResultpublic function __construct( public string $name, public int $maxFileSizeBytes = 26_214_400, public bool $flattenForms = true, public bool $removeJavaScript = true, public int $imageQuality = 75, public bool $linearize = true, public bool $compressObjectStreams = true,) {}
public static function pacer(): selfpublic static function euJustice(): selfpublic static function taiwan(): selfpublic function splitByMaxSize(string $pdfData, int $maxBytes): arraypublic function __construct( public array $segments, public int $originalSize, public int $optimizedTotalSize, public array $optimizations = [], public array $warnings = [],) {}
public function isSplit(): boolpublic function segmentCount(): intpublic function compressionRatio(): floatContrato de comportamento
Seção intitulada “Contrato de comportamento”EFilingOptimizer::optimize() executa um pipeline de ordem fixa sobre os bytes de entrada. A etapa um remove conteúdo ativo quando removeJavaScript está definido. Ela delega ao mecanismo de content-disarm-and-reconstruction com uma política específica de protocolo: JavaScript, JavaScript nomeado, ações de launch, submissão de formulário e ações de importação de dados são removidas; ações URI são mantidas (allowUriActions) porque protocolos podem conter links legítimos; atualizações incrementais são achatadas em uma única revisão (flattenIncrementalUpdates). A etapa dois lineariza os bytes saneados por meio do NextPDF\Writer\Linearizer do Core quando linearize está definido. A etapa três impõe o maxFileSizeBytes do perfil por meio do SizeAwareSplitter.
O divisor estima as páginas por segmento a partir do tamanho médio de página, divide e então verifica cada segmento produzido em relação ao limite. Qualquer segmento acima do limite que ainda abranja mais de uma página é redividido recursivamente, reduzindo pela metade seu próprio intervalo de páginas a cada passagem, até que cada filho caiba ou seja uma única página. Uma profundidade de redivisão limitada protege contra não convergência patológica. Os índices de saída são renormalizados para permanecerem contíguos e baseados em zero.
optimize() consome três campos do perfil: maxFileSizeBytes, removeJavaScript e linearize. Os campos flattenForms, imageQuality e compressObjectStreams são restrições declaradas do perfil sobre as quais optimize() não age na 3.1.0.
A saída de e-filing é um artefato de entrega, não um estado de ciclo de vida de documento. Um PDF otimizado ou dividido é final para transmissão e não deve reentrar em um pipeline de assinatura ou arquivamento; o reprocessamento quebraria as cadeias de hash e a integridade probatória.
Este módulo prepara formatos para protocolo eletrônico judicial/governamental conforme configurado. Ele não garante a aceitação por nenhum tribunal, registro, tribunal administrativo ou portal de protocolo. Os limites dos perfis integrados codificam restrições comumente publicadas por conveniência, não um feed ao vivo de cada portal; as regras dos portais variam por jurisdição e mudam. Verificá-las em relação às regras atuais do registro de destino é responsabilidade do protocolante.
O processamento é em processo e local. O transporte para um tribunal, registro ou portal de protocolo é externo a este módulo.
Casos extremos e modos de falha
Seção intitulada “Casos extremos e modos de falha”- Entrada no limite ou abaixo dele: um único segmento com intervalo de páginas
all; a etapa de divisão deixa os bytes inalterados. - Rejeição de saneamento (por exemplo, uma entrada não analisável): o aviso
CDR sanitization rejected: <reason>é registrado e o pipeline continua com os bytes originais. - Passagem de saneamento sem ameaças encontradas: os bytes ainda são substituídos pelo PDF reconstruído, e uma entrada de otimização registra a passagem limpa.
- Falha de linearização: o aviso
Linearization skipped: <message>é registrado e o pipeline continua com bytes não linearizados. - Página única acima do limite: genuinamente indivisível, retornada inalterada como um único segmento acima do limite. Nenhum aviso é registrado nesse caso; compare o
sizeBytesde cada segmento com o limite do perfil antes de protocolar. - Limite de profundidade de redivisão atingido: o segmento acima do limite passa inalterado em vez de entrar em laço.
compressionRatio()retorna0.0quando a entrada original está vazia.- O módulo não realiza nenhuma operação criptográfica; o modo FIPS não é aplicável.
Conformidade
Seção intitulada “Conformidade”| Comportamento | Referência | Status |
|---|---|---|
| Organização da saída linearizada (dados da primeira página no início do arquivo) | ISO 32000-2:2020 Annex F / Annex G | Construído em relação a |
| Semântica de relacionamento de arquivo associado | ISO 19005-3:2012 §6.7.8 | Respeitada onde os carregadores se aplicam |
| Requisitos do carregador de arquivo incorporado | ISO 19005-4:2020 Annex A | Respeitados onde os carregadores se aplicam |
A linearização visa a organização de PDF Linearizado, que coloca todos os dados necessários para exibir a primeira página no início do arquivo para acesso incremental eficiente.
Estas linhas descrevem a capacidade construída em relação às cláusulas citadas. Suporte não é conformidade, e conformidade não é certificação; o NextPDF não possui nenhuma certificação. Nenhuma afirmação nesta página garante a aceitação por nenhum portal de protocolo.
Esta página carrega export_control_class: legal-review-required. O NextPDF não fornece aconselhamento jurídico. As regras de protocolo variam por jurisdição e mudam; cumpri-las é responsabilidade do protocolante. Consulte advogados e a orientação atual do registro de destino.
Notas de desenvolvimento
Seção intitulada “Notas de desenvolvimento”use NextPDF\Enterprise\Document\EFiling\EFilingOptimizer;use NextPDF\Enterprise\Document\EFiling\EFilingProfile;
$optimizer = new EFilingOptimizer();$result = $optimizer->optimize($pdfBytes, EFilingProfile::euJustice());
foreach ($result->segments as $segment) { // Persist $segment->pdfData; confirm $segment->sizeBytes fits the cap.}- Inspecione
$result->warningsantes de protocolar. Um saneamento rejeitado ou uma linearização ignorada aparece ali, não como uma exceção. - Assine e arquive o documento de origem primeiro; depois otimize uma cópia para entrega. Nunca reassine, recarimbe ou arquive um segmento otimizado.
- Verifique o
sizeBytesde cada segmento em relação ao limite do perfil. Uma página indivisível acima do limite chega à saída silenciosamente. - Para portais sem uma fábrica integrada, construa um
EFilingProfilepersonalizado com o limite publicado do portal.
Limite de publicação
Seção intitulada “Limite de publicação”Esta página documenta apenas o comportamento observável externamente e a superfície da API pública suportada. Caminhos de namespace internos, classes auxiliares, tabelas de mecanismo, nomes de arquivo de runbook e prefixos de tíquete estão fora do escopo.