Enterprise редакция
Document E-Filing — глубокий справочник
Краткий обзор
Заголовок раздела «Краткий обзор»EFilingOptimizerподготавливает PDF к электронной судебной подаче за один проход с фиксированным порядком: санитизация, линеаризация, разбиение по размеру.EFilingProfileкодирует ограничения юрисдикции. Встроенные фабрики охватывают US PACER, EU e-Justice и Taiwan Judicial Yuan.SizeAwareSplitterобеспечивает байтовый лимит на сегмент с повторным разбиением по схеме «проверить, затем скорректировать».- Вывод — это артефакт доставки. Он не должен повторно входить в конвейеры подписания или архивирования.
- Модуль не выполняет криптографических операций и не совершает исходящих сетевых вызовов.
Доступность и лицензирование
Заголовок раздела «Доступность и лицензирование»Эта возможность поставляется в составе NextPDF Enterprise (nextpdf/enterprise) и активируется лицензионным конвертом уровня Enterprise. Развёртывание без этого права не загружает классы возможности. Сравнить редакции и получить лицензию.
Границей этой поверхности служит пакет nextpdf/enterprise; отдельного кода возможности на каждую функцию нет. Ни Core, ни Pro не предоставляют оптимизатор электронной подачи.
Публичная поверхность API
Заголовок раздела «Публичная поверхность API»composer require nextpdf/enterprise:^3| Символ | Параметры | Поведение по умолчанию | Возвращает | Бросает или завершается с ошибкой | Примечания |
|---|---|---|---|---|---|
EFilingOptimizer::optimize() | string $pdfData, ?EFilingProfile $profile = null | Профиль по умолчанию — EFilingProfile::pacer(); выполняет санитизацию, линеаризацию, разбиение по размеру в фиксированном порядке | EFilingResult | InvalidArgumentException на шаге разбиения, когда вход сверх лимита не является корректным PDF; сбои санитизации и линеаризации понижаются до предупреждений | Вывод — это артефакт доставки |
EFilingProfile::__construct() | $name, $maxFileSizeBytes = 26_214_400, $flattenForms = true, $removeJavaScript = true, $imageQuality = 75, $linearize = true, $compressObjectStreams = true | Неизменяемый профиль юрисдикции | EFilingProfile | Не бросает | Собственные лимиты для порталов без встроенной фабрики |
EFilingProfile::pacer() | нет | Лимит 25 MiB, качество изображения 75 | EFilingProfile | Не бросает | US PACER |
EFilingProfile::euJustice() | нет | Лимит 10 MiB, качество изображения 70 | EFilingProfile | Не бросает | Портал EU e-Justice |
EFilingProfile::taiwan() | нет | Лимит 10 MiB, качество изображения 70 | EFilingProfile | Не бросает | Taiwan Judicial Yuan |
SizeAwareSplitter::splitByMaxSize() | string $pdfData, int $maxBytes | Один сегмент, когда вход помещается; иначе оценка, проверка, повторное разбиение | list<EFilingSegment> | InvalidArgumentException, когда вход сверх лимита не имеет заголовка %PDF | Вход под лимитом возвращается как один сегмент без проверки |
EFilingResult::isSplit() | нет | true, когда сегментов больше одного | bool | Не бросает | — |
EFilingResult::segmentCount() | нет | Общее число сегментов | int | Не бросает | — |
EFilingResult::compressionRatio() | нет | optimizedTotalSize / originalSize | float | Не бросает; 0.0 при пустом исходном входе | Меньше — лучше |
EFilingSegment | $pdfData, $pageRange, $sizeBytes, $segmentIndex | Неизменяемый выходной сегмент | объект-значение | Не бросает | Строка диапазона страниц, например 1-25 или 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(): floatКонтракт поведения
Заголовок раздела «Контракт поведения»EFilingOptimizer::optimize() запускает конвейер с фиксированным порядком над входными байтами. Шаг первый удаляет активное содержимое, когда установлен removeJavaScript. Он делегирует движку обезвреживания и реконструкции содержимого с политикой, специфичной для подачи: JavaScript, именованный JavaScript, действия launch, отправка форм и действия импорта данных удаляются; действия URI сохраняются (allowUriActions), поскольку подачи могут нести легитимные ссылки; инкрементальные обновления сводятся в одну ревизию (flattenIncrementalUpdates). Шаг второй линеаризует санитизированные байты через Core NextPDF\Writer\Linearizer, когда установлен linearize. Шаг третий обеспечивает соблюдение maxFileSizeBytes профиля через SizeAwareSplitter.
Разделитель оценивает число страниц на сегмент по среднему размеру страницы, разбивает, затем проверяет каждый полученный сегмент относительно лимита. Любой сегмент сверх лимита, всё ещё охватывающий более одной страницы, разбивается повторно рекурсивно, вдвое сокращая свой диапазон страниц на каждом проходе, пока каждый потомок не поместится или не станет одной страницей. Ограниченная глубина повторного разбиения защищает от патологической несходимости. Выходные индексы перенормируются, чтобы оставаться непрерывными и отсчитываемыми от нуля.
optimize() использует три поля профиля: maxFileSizeBytes, removeJavaScript и linearize. Поля flattenForms, imageQuality и compressObjectStreams — это объявленные ограничения профиля, на которые optimize() не реагирует в 3.1.0.
Вывод электронной подачи — это артефакт доставки, а не состояние жизненного цикла документа. Оптимизированный или разбитый PDF является финальным для передачи и не должен повторно входить в конвейер подписания или архивирования; повторная обработка нарушила бы цепочки хешей и доказательную целостность.
Этот модуль подготавливает форматы для подачи в электронные суды / государственные органы согласно настройкам. Он не гарантирует принятия каким-либо судом, реестром, трибуналом или порталом подачи. Встроенные лимиты профилей кодируют общеопубликованные ограничения для удобства, а не как живой поток от каждого портала; правила порталов различаются по юрисдикциям и меняются. Сверка их с текущими правилами целевого реестра — ответственность подателя.
Обработка выполняется внутри процесса и локально. Передача в суд, реестр или портал подачи внешняя по отношению к этому модулю.
Граничные случаи и режимы сбоя
Заголовок раздела «Граничные случаи и режимы сбоя»- Вход на уровне лимита или ниже: один сегмент с диапазоном страниц
all; шаг разбиения оставляет байты без изменений. - Отклонение санитизации (например, неразбираемый вход): фиксируется предупреждение
CDR sanitization rejected: <reason>, и конвейер продолжает работу с исходными байтами. - Проход санитизации без обнаруженных угроз: байты всё равно заменяются перестроенным PDF, а запись оптимизации фиксирует чистый проход.
- Сбой линеаризации: фиксируется предупреждение
Linearization skipped: <message>, и конвейер продолжает работу с нелинеаризованными байтами. - Одна страница сверх лимита: действительно неделима, возвращается без изменений как один сегмент сверх лимита. Для этого случая предупреждение не фиксируется; сравнивайте
sizeBytesкаждого сегмента с лимитом профиля перед подачей. - Достигнут предел глубины повторного разбиения: сегмент сверх лимита проходит без изменений, а не зацикливается.
compressionRatio()возвращает0.0, когда исходный вход пуст.- Модуль не выполняет криптографических операций; режим FIPS неприменим.
Соответствие
Заголовок раздела «Соответствие»| Поведение | Ссылка | Статус |
|---|---|---|
| Организация линеаризованного вывода (данные первой страницы в начале файла) | ISO 32000-2:2020 Annex F / Annex G | Разработано с ориентацией на |
| Семантика связи присоединённого файла | ISO 19005-3:2012 §6.7.8 | Соблюдается там, где применимы носители |
| Требования к носителю встроенного файла | ISO 19005-4:2020 Annex A | Соблюдается там, где применимы носители |
Линеаризация нацелена на организацию линеаризованного PDF, которая размещает все данные, необходимые для отображения первой страницы, в начале файла для эффективного инкрементального доступа.
Эти строки описывают возможность, разработанную с ориентацией на цитируемые пункты. Поддержка — это не соответствие, а соответствие — не сертификация; NextPDF не имеет сертификации. Ни одно утверждение на этой странице не гарантирует принятия каким-либо порталом подачи.
Эта страница помечена export_control_class: legal-review-required. NextPDF не предоставляет юридических консультаций. Правила подачи различаются по юрисдикциям и меняются; их соблюдение — ответственность подателя. Обратитесь к юрисконсульту и текущим указаниям целевого реестра.
Заметки по разработке
Заголовок раздела «Заметки по разработке»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.}- Проверяйте
$result->warningsперед подачей. Отклонённая санитизация или пропущенная линеаризация проявляется там, а не как исключение. - Сначала подпишите и заархивируйте исходный документ; затем оптимизируйте копию для доставки. Никогда не переподписывайте, не проставляйте повторно штампы и не архивируйте оптимизированный сегмент.
- Проверяйте
sizeBytesкаждого сегмента относительно лимита профиля. Неделимая страница сверх лимита достигает вывода незаметно. - Для порталов без встроенной фабрики сконструируйте собственный
EFilingProfileс опубликованным лимитом портала.
Граница публикации
Заголовок раздела «Граница публикации»Эта страница документирует только внешне наблюдаемое поведение и поддерживаемую публичную поверхность API. Внутренние пути пространств имён, вспомогательные классы, таблицы механизмов, имена файлов руководств по эксплуатации и префиксы тикетов вне области рассмотрения.