Enterprise edición
Presentación electrónica de documentos — Referencia detallada
De un vistazo
Sección titulada «De un vistazo»EFilingOptimizerprepara un PDF para la presentación judicial electrónica en una única pasada de orden fijo: saneamiento, linearización, división por tamaño.EFilingProfilecodifica las restricciones jurisdiccionales. Las factorías integradas cubren US PACER, EU e-Justice y el Poder Judicial de Taiwán.SizeAwareSplitterimpone un límite de bytes por segmento con una nueva división del tipo verificar-y-luego-corregir.- La salida es un artefacto de entrega. No debe volver a entrar en pipelines de firma o de archivado.
- El módulo no realiza operaciones criptográficas ni efectúa llamadas de red salientes.
Disponibilidad y licencias
Sección titulada «Disponibilidad y licencias»Esta capacidad se distribuye en NextPDF Enterprise (nextpdf/enterprise) y se activa con un sobre de licencia de nivel Enterprise. Una implementación sin ese derecho no carga las clases de la capacidad. Comparar ediciones y obtener una licencia.
El límite del paquete nextpdf/enterprise restringe esta superficie; no existe un código de capacidad separado por función. Ninguna edición Core o Pro proporciona un optimizador de e-filing.
Superficie pública de la API
Sección titulada «Superficie pública de la API»composer require nextpdf/enterprise:^3| Símbolo | Parámetros | Comportamiento por defecto | Devuelve | Lanza o falla con | Notas |
|---|---|---|---|---|---|
EFilingOptimizer::optimize() | string $pdfData, ?EFilingProfile $profile = null | El perfil por defecto es EFilingProfile::pacer(); ejecuta saneamiento, linearización y división por tamaño en orden fijo | EFilingResult | InvalidArgumentException del paso de división cuando una entrada por encima del límite no es un PDF válido; los fallos de saneamiento y linearización se degradan a advertencias | La salida es un artefacto de entrega |
EFilingProfile::__construct() | $name, $maxFileSizeBytes = 26_214_400, $flattenForms = true, $removeJavaScript = true, $imageQuality = 75, $linearize = true, $compressObjectStreams = true | Perfil jurisdiccional inmutable | EFilingProfile | No lanza | Límites personalizados para portales sin factoría integrada |
EFilingProfile::pacer() | ninguno | Límite de 25 MiB, calidad de imagen 75 | EFilingProfile | No lanza | US PACER |
EFilingProfile::euJustice() | ninguno | Límite de 10 MiB, calidad de imagen 70 | EFilingProfile | No lanza | EU e-Justice Portal |
EFilingProfile::taiwan() | ninguno | Límite de 10 MiB, calidad de imagen 70 | EFilingProfile | No lanza | Poder Judicial de Taiwán |
SizeAwareSplitter::splitByMaxSize() | string $pdfData, int $maxBytes | Un único segmento cuando la entrada cabe; de lo contrario estima, verifica y vuelve a dividir | list<EFilingSegment> | InvalidArgumentException cuando una entrada por encima del límite carece de una cabecera %PDF | Una entrada bajo el límite se devuelve como un único segmento sin validación |
EFilingResult::isSplit() | ninguno | true cuando existe más de un segmento | bool | No lanza | — |
EFilingResult::segmentCount() | ninguno | Número total de segmentos | int | No lanza | — |
EFilingResult::compressionRatio() | ninguno | optimizedTotalSize / originalSize | float | No lanza; 0.0 para una entrada original vacía | Cuanto menor, mejor |
EFilingSegment | $pdfData, $pageRange, $sizeBytes, $segmentIndex | Segmento de salida inmutable | value object | No lanza | Cadena de rango de páginas como 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(): floatContrato de comportamiento
Sección titulada «Contrato de comportamiento»EFilingOptimizer::optimize() ejecuta un pipeline de orden fijo sobre los bytes de entrada. El paso uno elimina el contenido activo cuando removeJavaScript está establecido. Delega en el motor de desarme y reconstrucción de contenido con una política específica de presentación: se eliminan JavaScript, JavaScript nombrado, acciones de lanzamiento, envío de formularios y acciones de importación de datos; las acciones URI se conservan (allowUriActions) porque las presentaciones pueden llevar enlaces legítimos; las actualizaciones incrementales se aplanan en una única revisión (flattenIncrementalUpdates). El paso dos lineariza los bytes saneados a través del NextPDF\Writer\Linearizer de Core cuando linearize está establecido. El paso tres impone el maxFileSizeBytes del perfil mediante SizeAwareSplitter.
El divisor estima las páginas por segmento a partir del tamaño medio de página, divide y luego verifica cada segmento producido frente al límite. Cualquier segmento por encima del límite que aún abarque más de una página se vuelve a dividir de forma recursiva, reduciendo a la mitad su propio tramo de páginas en cada pasada, hasta que cada hijo cabe o es una única página. Una profundidad de re-división acotada protege contra la no convergencia patológica. Los índices de salida se renormalizan para permanecer contiguos y de base cero.
optimize() consume tres campos del perfil: maxFileSizeBytes, removeJavaScript y linearize. Los campos flattenForms, imageQuality y compressObjectStreams son restricciones de perfil declaradas sobre las que optimize() no actúa en 3.1.0.
La salida del e-filing es un artefacto de entrega, no un estado del ciclo de vida del documento. Un PDF optimizado o dividido es final para su transmisión y no debe volver a entrar en un pipeline de firma o de archivado; el reprocesamiento rompería las cadenas de hash y la integridad probatoria.
Este módulo prepara formatos para la presentación ante tribunales electrónicos / administraciones según se configure. No garantiza la aceptación por parte de ningún tribunal, registro, órgano jurisdiccional o portal de presentación. Los límites de los perfiles integrados codifican las restricciones publicadas habitualmente como una comodidad, no como una fuente en vivo de cada portal; las reglas de los portales varían según la jurisdicción y cambian. Verificarlas frente a las reglas vigentes del registro de destino es responsabilidad de quien presenta.
El procesamiento es en proceso y local. El transporte a un tribunal, registro o portal de presentación es externo a este módulo.
Casos límite y modos de fallo
Sección titulada «Casos límite y modos de fallo»- Entrada en o por debajo del límite: un único segmento con rango de páginas
all; el paso de división deja los bytes sin cambios. - Rechazo del saneamiento (por ejemplo, una entrada no analizable): se registra la advertencia
CDR sanitization rejected: <reason>y el pipeline continúa con los bytes originales. - Pasada de saneamiento sin amenazas encontradas: los bytes se sustituyen igualmente por el PDF reconstruido y una entrada de optimización registra la pasada limpia.
- Fallo de linearización: se registra la advertencia
Linearization skipped: <message>y el pipeline continúa con los bytes no linearizados. - Una única página por encima del límite: genuinamente indivisible, se devuelve sin cambios como un único segmento por encima del límite. No se registra ninguna advertencia para este caso; comparar el
sizeBytesde cada segmento con el límite del perfil antes de presentar. - Límite de profundidad de re-división alcanzado: el segmento por encima del límite pasa sin cambios en lugar de entrar en bucle.
compressionRatio()devuelve0.0cuando la entrada original está vacía.- El módulo no realiza operaciones criptográficas; el modo FIPS no es aplicable.
Conformidad
Sección titulada «Conformidad»| Comportamiento | Referencia | Estado |
|---|---|---|
| Organización de la salida linearizada (datos de la primera página al inicio del archivo) | ISO 32000-2:2020 Annex F / Annex G | Construido conforme a |
| Semántica de la relación de archivos asociados | ISO 19005-3:2012 §6.7.8 | Respetado donde se aplican portadores |
| Requisitos del portador de archivos incrustados | ISO 19005-4:2020 Annex A | Respetado donde se aplican portadores |
La linearización tiene como objetivo la organización del PDF linearizado, que coloca todos los datos necesarios para mostrar la primera página al comienzo del archivo para un acceso incremental eficiente.
Estas filas describen una capacidad construida conforme a las cláusulas citadas. El soporte no es conformidad, y la conformidad no es certificación; NextPDF no posee ninguna certificación. Ninguna afirmación de esta página garantiza la aceptación por parte de ningún portal de presentación.
Esta página lleva export_control_class: legal-review-required. NextPDF no proporciona asesoramiento jurídico. Las reglas de presentación varían según la jurisdicción y cambian; cumplirlas es responsabilidad de quien presenta. Consultar con un asesor legal y con la guía vigente del registro de destino.
Notas de desarrollo
Sección titulada «Notas de desarrollo»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.}- Inspeccionar
$result->warningsantes de presentar. Un saneamiento rechazado o una linearización omitida aparecen ahí, no como una excepción. - Firmar y archivar primero el documento fuente; luego optimizar una copia para la entrega. Nunca volver a firmar, resellar ni archivar un segmento optimizado.
- Verificar el
sizeBytesde cada segmento frente al límite del perfil. Una página indivisible por encima del límite llega a la salida de forma silenciosa. - Para portales sin factoría integrada, construir un
EFilingProfilepersonalizado con el límite publicado del portal.
Límite de publicación
Sección titulada «Límite de publicación»Esta página documenta únicamente el comportamiento observable externamente y la superficie pública soportada de la API. Las rutas de espacios de nombres internos, las clases auxiliares, las tablas de mecanismos, los nombres de archivo de runbooks y los prefijos de tickets quedan fuera de alcance.