Enterprise edizione
Document E-Filing — Riferimento approfondito
In sintesi
Sezione intitolata “In sintesi”EFilingOptimizerprepara un PDF per il deposito elettronico presso i tribunali in un unico passaggio a ordine fisso: sanitizza, linearizza, suddividi per dimensione.EFilingProfilecodifica i vincoli di giurisdizione. Le factory predefinite coprono US PACER, EU e-Justice e Taiwan Judicial Yuan.SizeAwareSplitterimpone un limite di byte per segmento con una nuova suddivisione secondo lo schema verifica-poi-correggi.- L’output è un artefatto di consegna. Non deve rientrare nelle pipeline di firma o di archiviazione.
- Il modulo non esegue alcuna operazione crittografica e non effettua alcuna chiamata di rete in uscita.
Disponibilità e licenza
Sezione intitolata “Disponibilità e licenza”Questa funzionalità viene distribuita in NextPDF Enterprise (nextpdf/enterprise) e si attiva con un envelope di licenza di livello Enterprise. Una distribuzione priva di tale entitlement non carica le classi della funzionalità. Confronta le edizioni e ottieni una licenza.
Il confine del pacchetto nextpdf/enterprise sottopone a gate questa superficie; non esiste alcun codice di capability separato per funzionalità. Nessuna edizione Core o Pro fornisce un ottimizzatore di deposito elettronico.
Superficie API pubblica
Sezione intitolata “Superficie API pubblica”composer require nextpdf/enterprise:^3| Simbolo | Parametri | Comportamento predefinito | Restituisce | Solleva o fallisce con | Note |
|---|---|---|---|---|---|
EFilingOptimizer::optimize() | string $pdfData, ?EFilingProfile $profile = null | Il profilo predefinito è EFilingProfile::pacer(); esegue sanitizza, linearizza, suddividi per dimensione in ordine fisso | EFilingResult | InvalidArgumentException dal passaggio di suddivisione quando un input oltre il limite non è un PDF valido; i fallimenti di sanitizzazione e linearizzazione degradano ad avvisi | L’output è un artefatto di consegna |
EFilingProfile::__construct() | $name, $maxFileSizeBytes = 26_214_400, $flattenForms = true, $removeJavaScript = true, $imageQuality = 75, $linearize = true, $compressObjectStreams = true | Profilo di giurisdizione immutabile | EFilingProfile | Non solleva eccezioni | Limiti personalizzati per portali privi di una factory predefinita |
EFilingProfile::pacer() | nessuno | Limite 25 MiB, qualità immagine 75 | EFilingProfile | Non solleva eccezioni | US PACER |
EFilingProfile::euJustice() | nessuno | Limite 10 MiB, qualità immagine 70 | EFilingProfile | Non solleva eccezioni | EU e-Justice Portal |
EFilingProfile::taiwan() | nessuno | Limite 10 MiB, qualità immagine 70 | EFilingProfile | Non solleva eccezioni | Taiwan Judicial Yuan |
SizeAwareSplitter::splitByMaxSize() | string $pdfData, int $maxBytes | Singolo segmento quando l’input rientra nel limite; altrimenti stima, verifica, nuova suddivisione | list<EFilingSegment> | InvalidArgumentException quando un input oltre il limite è privo di un header %PDF | Un input sotto il limite viene restituito come un unico segmento senza convalida |
EFilingResult::isSplit() | nessuno | true quando esiste più di un segmento | bool | Non solleva eccezioni | — |
EFilingResult::segmentCount() | nessuno | Numero totale di segmenti | int | Non solleva eccezioni | — |
EFilingResult::compressionRatio() | nessuno | optimizedTotalSize / originalSize | float | Non solleva eccezioni; 0.0 per input originale vuoto | Più basso è, meglio è |
EFilingSegment | $pdfData, $pageRange, $sizeBytes, $segmentIndex | Segmento di output immutabile | value object | Non solleva eccezioni | Stringa di intervallo di pagine come 1-25 o 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(): floatContratto di comportamento
Sezione intitolata “Contratto di comportamento”EFilingOptimizer::optimize() esegue una pipeline a ordine fisso sui byte di input. Il primo passaggio rimuove i contenuti attivi quando removeJavaScript è impostato. Delega al motore di content-disarm-and-reconstruction con una policy specifica per il deposito: JavaScript, JavaScript con nome, azioni di lancio, invio di moduli e azioni di importazione dati vengono rimossi; le azioni URI vengono conservate (allowUriActions) perché i depositi possono contenere collegamenti legittimi; gli aggiornamenti incrementali vengono appiattiti in un’unica revisione (flattenIncrementalUpdates). Il secondo passaggio linearizza i byte sanitizzati tramite il NextPDF\Writer\Linearizer di Core quando linearize è impostato. Il terzo passaggio impone il maxFileSizeBytes del profilo tramite SizeAwareSplitter.
Lo splitter stima il numero di pagine per segmento a partire dalla dimensione media di pagina, suddivide, quindi verifica ogni segmento prodotto rispetto al limite. Qualsiasi segmento oltre il limite che copre ancora più di una pagina viene suddiviso ricorsivamente, dimezzando a ogni passaggio il proprio intervallo di pagine, finché ogni figlio non rientra nel limite o non è costituito da una singola pagina. Un limite di profondità della nuova suddivisione previene una non convergenza patologica. Gli indici di output vengono rinormalizzati per rimanere contigui e a base zero.
optimize() consuma tre campi del profilo: maxFileSizeBytes, removeJavaScript e linearize. I campi flattenForms, imageQuality e compressObjectStreams sono vincoli di profilo dichiarati su cui optimize() non agisce in 3.1.0.
L’output del deposito elettronico è un artefatto di consegna, non uno stato del ciclo di vita del documento. Un PDF ottimizzato o suddiviso è definitivo per la trasmissione e non deve rientrare in una pipeline di firma o di archiviazione; un riprocesso romperebbe le catene di hash e l’integrità probatoria.
Questo modulo prepara formati per il deposito presso tribunali elettronici / enti governativi così come configurato. Non garantisce l’accettazione da parte di alcun tribunale, registro, organo giurisdizionale o portale di deposito. I limiti dei profili predefiniti codificano per comodità i vincoli comunemente pubblicati, non un feed in tempo reale da ciascun portale; le regole dei portali variano per giurisdizione e cambiano nel tempo. La verifica rispetto alle regole correnti del registro di destinazione è responsabilità del depositante.
L’elaborazione è in-process e locale. Il trasporto verso un tribunale, un registro o un portale di deposito è esterno a questo modulo.
Casi limite e modalità di errore
Sezione intitolata “Casi limite e modalità di errore”- Input pari o inferiore al limite: un singolo segmento con intervallo di pagine
all; il passaggio di suddivisione lascia i byte invariati. - Rifiuto della sanitizzazione (per esempio un input non analizzabile): viene registrato l’avviso
CDR sanitization rejected: <reason>e la pipeline continua con i byte originali. - Passaggio di sanitizzazione senza minacce rilevate: i byte vengono comunque sostituiti dal PDF ricostruito e una voce di ottimizzazione registra il passaggio pulito.
- Fallimento della linearizzazione: viene registrato l’avviso
Linearization skipped: <message>e la pipeline continua con byte non linearizzati. - Singola pagina oltre il limite: genuinamente indivisibile, restituita invariata come un unico segmento oltre il limite. Per questo caso non viene registrato alcun avviso; confrontare il
sizeBytesdi ogni segmento con il limite del profilo prima del deposito. - Limite di profondità della nuova suddivisione raggiunto: il segmento oltre il limite passa invariato anziché entrare in ciclo.
compressionRatio()restituisce0.0quando l’input originale è vuoto.- Il modulo non esegue alcuna operazione crittografica; la modalità FIPS non è applicabile.
Conformità
Sezione intitolata “Conformità”| Comportamento | Riferimento | Stato |
|---|---|---|
| Organizzazione dell’output linearizzato (dati della prima pagina all’inizio del file) | ISO 32000-2:2020 Annex F / Annex G | Sviluppato rispetto a |
| Semantica della relazione dei file associati | ISO 19005-3:2012 §6.7.8 | Rispettata ove si applicano i contenitori |
| Requisiti del contenitore di file incorporati | ISO 19005-4:2020 Annex A | Rispettata ove si applicano i contenitori |
La linearizzazione mira all’organizzazione Linearized PDF, che colloca tutti i dati necessari a visualizzare la prima pagina all’inizio del file per un accesso incrementale efficiente.
Queste righe descrivono una capability sviluppata rispetto alle clausole citate. Il supporto non è conformità e la conformità non è certificazione; NextPDF non detiene alcuna certificazione. Nessuna affermazione in questa pagina garantisce l’accettazione da parte di alcun portale di deposito.
Questa pagina è contrassegnata con export_control_class: legal-review-required. NextPDF non fornisce consulenza legale. Le regole di deposito variano per giurisdizione e cambiano nel tempo; soddisfarle è responsabilità del depositante. Consultare i propri consulenti legali e le indicazioni correnti del registro di destinazione.
Note di sviluppo
Sezione intitolata “Note di sviluppo”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.}- Ispezionare
$result->warningsprima del deposito. Una sanitizzazione rifiutata o una linearizzazione saltata emergono lì, non come eccezione. - Firmare e archiviare prima il documento sorgente; quindi ottimizzare una copia per la consegna. Non firmare, timbrare o archiviare mai di nuovo un segmento ottimizzato.
- Verificare il
sizeBytesdi ogni segmento rispetto al limite del profilo. Una pagina indivisibile oltre il limite raggiunge l’output silenziosamente. - Per i portali privi di una factory predefinita, costruire un
EFilingProfilepersonalizzato con il limite pubblicato dal portale.
Confine di distribuzione
Sezione intitolata “Confine di distribuzione”Questa pagina documenta esclusivamente il comportamento osservabile esternamente e la superficie API pubblica supportata. I percorsi di namespace interni, le classi helper, le tabelle dei meccanismi, i nomi di file dei runbook e i prefissi di ticket sono fuori ambito.