Перейти к содержимому
getnextpdf.com

Pro редакция

Legal — глубокий справочник

  • Генерирует последовательные штампы номеров Bates в виде фрагментов потока содержимого PDF для каждой страницы.
  • Три публичных типа: BatesNumberConfig (неизменяемая конфигурация), BatesNumberer (движок), BatesPosition (перечисление позиций из шести случаев).
  • Каждый фрагмент самодостаточен. Графическое состояние сохраняется и восстанавливается, поэтому добавление никогда не нарушает существующее содержимое страницы.
  • Вывод детерминирован: фрагмент — это чистая функция от конфигурации, текста штампа и размера страницы.
  • Модуль не выбрасывает исключений. Значения вне диапазона обрабатываются по документированным правилам отката.

Эта возможность поставляется в NextPDF Pro (nextpdf/pro) и активируется лицензионным конвертом уровня Pro. Развёртывание без этого права не загружает классы возможности. Сравнить редакции и получить лицензию.

Отдельного лицензионного флага для возможности нет. Это возможность редакции Pro.

Окно терминала
composer require nextpdf/pro:^3
СимволПараметрыПоведение по умолчаниюВозвращаетВыбрасывает или завершается ошибкойПримечания
BatesNumberConfig::__constructstring $prefix = '', string $suffix = '', int $startNumber = 1, int $padding = 5, BatesPosition $position = BatesPosition::BottomRight, float $fontSize = 9.0, string $fontFamily = 'Courier', float $opacity = 1.0, bool $useLayer = true, string $layerName = 'Bates Numbers', float $inset = 15.0Неизменяемая конфигурация внешнего вида и нумерацииBatesNumberConfigВсе одиннадцать свойств публичные и readonly.
BatesNumberConfig::formatNumberint $pageIndex (с нуля)prefix + дополненный нулями (startNumber + pageIndex) + suffixstringЧисло шире padding не усекается.
BatesNumberConfig::getRangeint $pageCountПервый и последний отформатированные штампы прогонаarray{first: string, last: string}Предполагает pageCount >= 1; при счёте 0 форматируется индекс страницы -1.
BatesNumberer::__constructBatesNumberConfig $configПривязывает конфигурациюBatesNumbererКласс final и readonly.
BatesNumberer::generateint $pageCount, array $pageSizes, string $prefix = '', int $startFrom = 1Статический быстрый путь с внешним видом по умолчаниюlist<string>Суффикс, позиция, шрифт, непрозрачность и слой остаются со значениями по умолчанию.
BatesNumberer::generateStreamsint $pageCount, list<array{width: float, height: float}> $pageSizesОдин самодостаточный фрагмент на страницуlist<string>Никогда не выбрасывает; отсутствующая запись размера откатывается к A4 portraitЧисло фрагментов равно pageCount; лишние записи размеров игнорируются.
BatesNumberer::buildPageStreamstring $text, float $pageWidth, float $pageHeightСтроит фрагмент штампа одной страницыstringОбёрнут в q/Q; текст штампа экранирован для синтаксиса литеральной строки.
BatesNumberer::getConfigВозвращает привязанную конфигурациюBatesNumberConfig
BatesPositionслучаи перечисления BottomLeft, BottomCenter, BottomRight, TopLeft, TopCenter, TopRightСловарь позиций на основе строкБазовые значения в kebab-case (например, bottom-right).
BatesPosition::coordinatesfloat $pageWidth, float $pageHeight, float $textWidth, float $inset = 15.0X/Y базовой линии штампа в PDF-нативном пространствеarray{x: float, y: float}Начало координат — нижний левый угол; верхние ряды размещают базовую линию на расстоянии inset от верхнего края.
public function __construct(
public string $prefix = '',
public string $suffix = '',
public int $startNumber = 1,
public int $padding = 5,
public BatesPosition $position = BatesPosition::BottomRight,
public float $fontSize = 9.0,
public string $fontFamily = 'Courier',
public float $opacity = 1.0,
public bool $useLayer = true,
public string $layerName = 'Bates Numbers',
public float $inset = 15.0,
) {}
public static function generate(
int $pageCount,
array $pageSizes,
string $prefix = '',
int $startFrom = 1,
): array
public function generateStreams(int $pageCount, array $pageSizes): array
public function buildPageStream(string $text, float $pageWidth, float $pageHeight): string
public function coordinates(
float $pageWidth,
float $pageHeight,
float $textWidth,
float $inset = 15.0,
): array

BatesNumberConfig::formatNumber вычисляет startNumber + pageIndex, дополняет число нулями слева до padding цифр и оборачивает его в prefix и suffix. getRange возвращает первый и последний отформатированные штампы для числа страниц. Используйте его для сцепления сквозной нумерации между передачами документов.

Каждый фрагмент состоит, по порядку, из: сохранения графического состояния (q), оператора цвета заливки, опционального начала маркированного содержимого, текстового блока, который позиционирует и отображает штамп, опционального конца маркированного содержимого и восстановления (Q). Координаты и размер шрифта сериализуются с шестью знаками после запятой, поэтому одинаковые входные данные дают одинаковые байты. Текст штампа экранирует \, ( и ) перед помещением в литеральную строку.

Текстовый блок выбирает фиксированное имя ресурса шрифта /BatesFont. Словарь ресурсов встраивающей страницы должен сопоставить это имя со шрифтом, соответствующим настроенному fontFamily, а семейство должно разрешаться в реестре шрифтов. Сама генерация фрагмента никогда не обращается к реестру.

BatesPosition::coordinates вычисляет базовую линию штампа в PDF-нативном пространстве; начало координат — нижний левый угол. Размещение по центру и справа вычитает оценочную ширину текста: длина в байтах, умноженная на 0.6 и на размер шрифта, — приближение для моноширинного шрифта. Пропорциональные шрифты и многобайтовый текст смещают эту оценку. Размещение слева от неё не зависит.

При включённом useLayer (по умолчанию) фрагмент заключает текст между операторами маркированного содержимого BDC и EMC. Имя маркированного содержимого имеет форму /Lyr_<name>, производную от layerName, где несловесные символы заменены подчёркиваниями. Заключение в скобки происходит только на уровне фрагмента: регистрация соответствующей группы опционального содержимого в документе — шаг, который делает слой переключаемым в просмотрщике, — относится к встраивающему писателю.

opacity ниже 1.0 выводится как более светлая заливка в оттенках серого. Полностью непрозрачный штамп отображается чёрным.

Движок применяет нумерацию Bates ровно так, как настроено. Он не утверждает, что нумерованный документ допустим в суде или юридически действителен. Схема нумерации, хранение и обращение с доказательствами остаются ответственностью заказчика; проконсультируйтесь со своими юридическими командами и командами по соответствию относительно процедурной достаточности.

  • generateStreams никогда не выбрасывает исключение при несоответствии pageSizes. Отсутствующая запись откатывается к A4 portrait, 595.276 на 841.890 пунктов; лишние записи игнорируются.
  • Число фрагментов всегда равно pageCount.
  • Число шире padding не усекается; текст штампа просто удлиняется.
  • getRange предполагает pageCount >= 1. При счёте 0 форматируется индекс страницы -1, то есть startNumber - 1.
  • Непрозрачность — это осветление в оттенках серого, а не прозрачность ExtGState; перекрытое содержимое под штампом не смешивается.
  • Байты штампа, кроме \, ( и ), проходят без кодирования. Корректность кодирования для не-ASCII текста зависит от привязанного шрифта.
  • Метки Bates — наложенное содержимое. Они ничего не редактируют, не удаляют и не шифруют на странице.
  • Модуль не выполняет криптографических операций; режим FIPS не меняет его поведения.
ПоведениеСсылкаСтатус
Заключение слоя в скобки операторами маркированного содержимого BDC/EMCISO 32000-2:2020 §8.11.3.2Частично — фрагмент выдаёт заключение в скобки; регистрация группы опционального содержимого — шаг встраивающего писателя

Эти строки фиксируют спецификацию, относительно которой построен модуль, а не сертификацию; NextPDF не имеет сертификата соответствия. Таблица также не является заявлением о юридической действительности или доказательной достаточности.

  • Фрагменты — это чистые строковые значения. Тестируйте их прямым побайтовым сравнением; контекст документа не требуется.
  • buildPageStream публичный и поддаётся модульному тестированию изолированно: передайте предварительно отформатированный текст и явные размеры страницы.
  • Для сквозной нумерации между передачами документов задайте startNumber из предыдущего прогона и запишите вывод getRange в журнал передачи.
  • Имена слоёв санируются до словесных символов. Предпочитайте ASCII-имена слоёв, чтобы имя маркированного содержимого оставалось читаемым в инструментах инспекции.

Эта страница документирует только внешне наблюдаемое поведение и поддерживаемую публичную поверхность API. Внутренние пути пространств имён, вспомогательные классы, таблицы механизмов, имена файлов runbook и префиксы тикетов вне области рассмотрения.