Enterprise édition
Dépôt électronique de documents — Référence approfondie
EFilingOptimizerprépare un PDF pour un dépôt électronique auprès d’un tribunal en une seule passe à ordre fixe : assainir, linéariser, découper par taille.EFilingProfileencode les contraintes de juridiction. Les fabriques intégrées couvrent US PACER, EU e-Justice et le Judicial Yuan de Taïwan.SizeAwareSplitterimpose un plafond d’octets par segment avec un redécoupage vérifier-puis-corriger.- La sortie est un artefact de livraison. Il ne doit pas réintégrer les pipelines de signature ou d’archivage.
- Le module n’effectue aucune opération cryptographique et ne réalise aucun appel réseau sortant.
Disponibilité et licence
Section intitulée « Disponibilité et licence »Cette capacité est fournie dans NextPDF Enterprise (nextpdf/enterprise) et s’active avec une enveloppe de licence de niveau Enterprise. Un déploiement sans cette autorisation ne charge pas les classes de la capacité. Compare les éditions et obtiens une licence.
La frontière du paquet nextpdf/enterprise protège cette surface ; il n’existe pas de code de capacité distinct par fonctionnalité. Aucune édition Core ou Pro ne fournit d’optimiseur de dépôt électronique.
Surface de l’API publique
Section intitulée « Surface de l’API publique »composer require nextpdf/enterprise:^3| Symbole | Paramètres | Comportement par défaut | Retourne | Lève ou échoue avec | Notes |
|---|---|---|---|---|---|
EFilingOptimizer::optimize() | string $pdfData, ?EFilingProfile $profile = null | Le profil vaut par défaut EFilingProfile::pacer() ; exécute assainir, linéariser, découper par taille dans un ordre fixe | EFilingResult | InvalidArgumentException depuis l’étape de découpage lorsqu’une entrée hors limite n’est pas un PDF valide ; les échecs d’assainissement et de linéarisation se dégradent en avertissements | La sortie est un artefact de livraison |
EFilingProfile::__construct() | $name, $maxFileSizeBytes = 26_214_400, $flattenForms = true, $removeJavaScript = true, $imageQuality = 75, $linearize = true, $compressObjectStreams = true | Profil de juridiction immuable | EFilingProfile | Ne lève pas | Plafonds personnalisés pour les portails sans fabrique intégrée |
EFilingProfile::pacer() | none | Plafond de 25 MiB, qualité d’image 75 | EFilingProfile | Ne lève pas | US PACER |
EFilingProfile::euJustice() | none | Plafond de 10 MiB, qualité d’image 70 | EFilingProfile | Ne lève pas | Portail e-Justice de l’UE |
EFilingProfile::taiwan() | none | Plafond de 10 MiB, qualité d’image 70 | EFilingProfile | Ne lève pas | Judicial Yuan de Taïwan |
SizeAwareSplitter::splitByMaxSize() | string $pdfData, int $maxBytes | Segment unique quand l’entrée tient ; sinon estimer, vérifier, redécouper | list<EFilingSegment> | InvalidArgumentException lorsqu’une entrée hors limite ne comporte pas d’en-tête %PDF | Une entrée sous la limite est retournée en un seul segment sans validation |
EFilingResult::isSplit() | none | true lorsqu’il existe plus d’un segment | bool | Ne lève pas | — |
EFilingResult::segmentCount() | none | Nombre total de segments | int | Ne lève pas | — |
EFilingResult::compressionRatio() | none | optimizedTotalSize / originalSize | float | Ne lève pas ; 0.0 pour une entrée d’origine vide | Plus la valeur est basse, mieux c’est |
EFilingSegment | $pdfData, $pageRange, $sizeBytes, $segmentIndex | Segment de sortie immuable | objet valeur | Ne lève pas | Chaîne de plage de pages telle que 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(): floatContrat de comportement
Section intitulée « Contrat de comportement »EFilingOptimizer::optimize() exécute un pipeline à ordre fixe sur les octets d’entrée. La première étape supprime le contenu actif lorsque removeJavaScript est activé. Elle délègue au moteur de content-disarm-and-reconstruction avec une politique propre au dépôt : le JavaScript, le JavaScript nommé, les actions de lancement, la soumission de formulaire et les actions d’import de données sont supprimés ; les actions URI sont conservées (allowUriActions) car les dépôts peuvent comporter des liens légitimes ; les mises à jour incrémentales sont aplaties en une seule révision (flattenIncrementalUpdates). La deuxième étape linéarise les octets assainis via le NextPDF\Writer\Linearizer de Core lorsque linearize est activé. La troisième étape impose le maxFileSizeBytes du profil via SizeAwareSplitter.
Le découpeur estime le nombre de pages par segment à partir de la taille moyenne des pages, découpe, puis vérifie chaque segment produit par rapport au plafond. Tout segment hors limite qui couvre encore plus d’une page est redécoupé récursivement, en divisant par deux sa propre étendue de pages à chaque passe, jusqu’à ce que chaque enfant tienne ou soit une page unique. Une profondeur de redécoupage bornée protège contre une non-convergence pathologique. Les indices de sortie sont renormalisés pour rester contigus et indexés à partir de zéro.
optimize() consomme trois champs du profil : maxFileSizeBytes, removeJavaScript et linearize. Les champs flattenForms, imageQuality et compressObjectStreams sont des contraintes de profil déclarées sur lesquelles optimize() n’agit pas en 3.1.0.
La sortie du dépôt électronique est un artefact de livraison, pas un état du cycle de vie du document. Un PDF optimisé ou découpé est définitif pour la transmission et ne doit pas réintégrer un pipeline de signature ou d’archivage ; un retraitement romprait les chaînes de hachage et l’intégrité probante.
Ce module prépare des formats pour le dépôt e-court / gouvernemental selon la configuration. Il ne garantit l’acceptation par aucun tribunal, registre, juridiction ou portail de dépôt. Les plafonds des profils intégrés encodent des contraintes couramment publiées à titre de commodité, et non un flux en direct de chaque portail ; les règles des portails varient selon la juridiction et changent. Les vérifier par rapport aux règles actuelles du registre de destination relève de la responsabilité du déposant.
Le traitement s’effectue au sein du processus et en local. Le transport vers un tribunal, un registre ou un portail de dépôt est externe à ce module.
Cas limites et modes de défaillance
Section intitulée « Cas limites et modes de défaillance »- Entrée au niveau du plafond ou en dessous : un seul segment avec la plage de pages
all; l’étape de découpage laisse les octets inchangés. - Rejet de l’assainissement (par exemple une entrée non analysable) : l’avertissement
CDR sanitization rejected: <reason>est enregistré et le pipeline se poursuit avec les octets d’origine. - Passe d’assainissement sans menace détectée : les octets sont tout de même remplacés par le PDF reconstruit, et une entrée d’optimisation consigne la passe propre.
- Échec de linéarisation : l’avertissement
Linearization skipped: <message>est enregistré et le pipeline se poursuit avec des octets non linéarisés. - Page unique au-dessus du plafond : véritablement indivisible, retournée inchangée en un seul segment hors limite. Aucun avertissement n’est enregistré dans ce cas ; compare le
sizeBytesde chaque segment au plafond du profil avant le dépôt. - Profondeur de redécoupage atteinte : le segment hors limite passe inchangé plutôt que de boucler.
compressionRatio()retourne0.0lorsque l’entrée d’origine est vide.- Le module n’effectue aucune opération cryptographique ; le mode FIPS n’est pas applicable.
Conformité
Section intitulée « Conformité »| Comportement | Référence | Statut |
|---|---|---|
| Organisation de la sortie linéarisée (données de première page en début de fichier) | ISO 32000-2:2020 Annex F / Annex G | Construit d’après |
| Sémantique des relations de fichiers associés | ISO 19005-3:2012 §6.7.8 | Respecté là où des porteurs s’appliquent |
| Exigences relatives au porteur de fichier intégré | ISO 19005-4:2020 Annex A | Respecté là où des porteurs s’appliquent |
La linéarisation cible l’organisation du PDF linéarisé, qui place toutes les données requises pour afficher la première page au début du fichier pour un accès incrémental efficace.
Ces lignes décrivent une capacité construite d’après les clauses citées. La prise en charge n’est pas la conformité, et la conformité n’est pas la certification ; NextPDF ne détient aucune certification. Aucune affirmation de cette page ne garantit l’acceptation par un quelconque portail de dépôt.
Cette page porte export_control_class: legal-review-required. NextPDF ne fournit pas de conseil juridique. Les règles de dépôt varient selon la juridiction et changent ; les respecter relève de la responsabilité du déposant. Consulte un conseil juridique et les directives actuelles du registre de destination.
Notes de développement
Section intitulée « Notes de développement »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.}- Inspecte
$result->warningsavant le dépôt. Un assainissement rejeté ou une linéarisation ignorée y apparaît, pas sous forme d’exception. - Signe et archive d’abord le document source ; optimise ensuite une copie pour la livraison. Ne resigne, ne re-tamponne et n’archive jamais un segment optimisé.
- Vérifie le
sizeBytesde chaque segment par rapport au plafond du profil. Une page hors limite indivisible atteint la sortie silencieusement. - Pour les portails sans fabrique intégrée, construis un
EFilingProfilepersonnalisé avec le plafond publié du portail.
Périmètre de publication
Section intitulée « Périmètre de publication »Cette page documente uniquement le comportement observable de l’extérieur et la surface de l’API publique prise en charge. Les chemins d’espaces de noms internes, les classes utilitaires, les tables de mécanismes, les noms de fichiers de runbook et les préfixes de tickets sont hors périmètre.