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

Справочник перечислений

Несколько авторских методов NextPDF принимают типизированный enum, а не голую строку или целое число. Перечисление — это контракт: оно ограничивает аргумент фиксированным, допустимым набором, и IDE и PHPStan отклоняют любое значение вне его. Эта страница — справочник допустимых значений для перечислений, которые вы задаёте (или получаете) через публичный API Document и Config, плюс одно перечисление цвета уровня движка (RenderingIntent), включённое потому, что его варианты — часть публичного контракта цвета и помечено как уровень движка там, где оно появляется.

Это спутник справочника по конфигурации. Там, где объект Config говорит вам, какой регулятор повернуть, эта страница говорит, какие значения этот регулятор принимает. Каждая запись приводит полностью квалифицированное имя класса (FQCN) перечисления, его базовый тип, точный список вариантов, скопированный из исходного кода, и публичный метод, который его принимает.

Глубокие внутренние для движка перечисления (макет HTML/CSS, абстрактное синтаксическое дерево, CLI, внутренности шейпера) намеренно исключены — вы их никогда не задаёте. Почти всё ниже — это значение, которое вы передаёте через публичный API; единственное исключение, RenderingIntent, — это перечисление цвета уровня движка без публичного сеттера, перечисленное для полноты и помеченное соответствующим образом там, где оно появляется.

Перечисления PHP бывают двух форм, и форма меняет то, как вы пишете значение:

  • Backed-перечисление (enum X: string или enum X: int) имеет скалярный value для каждого варианта, поэтому оно круговым образом проходит через X::from('...') / $case->value. Большинство перечислений здесь — backed.
  • Pure-перечисление (enum X без базового типа) имеет варианты, но не имеет скалярного значения; вы всегда ссылаетесь на него по варианту (X::SomeCase). Только UnderlineStyle — pure.

В обеих формах вы передаёте сам вариант — например, $pdf->addPage(orientation: Orientation::Landscape). Базовый тип имеет значение только тогда, когда нужно сериализовать выбор или прочитать его обратно из конфигурации.

Книжная или альбомная геометрия страницы. Передаётся при добавлении страницы; движок меняет местами ширину и высоту, чтобы они соответствовали.

СвойствоЗначение
FQCNNextPDF\Contracts\Orientation
Базовый типstring
Задаётся черезDocument::addPage(?PageSize $size = null, Orientation $orientation = Orientation::Portrait)
ВариантБазовое значение
Portrait'P'
Landscape'L'
use NextPDF\Contracts\Orientation;
use NextPDF\ValueObjects\PageSize;
$pdf->addPage(PageSize::a4(), Orientation::Landscape);

Как завершается обведённый открытый контур. ISO 32000-2:2020 §8.4.3.3.

СвойствоЗначение
FQCNNextPDF\Graphics\LineCap
Базовый типint
Задаётся черезобъект конфигурации LineStyle (new LineStyle(cap: ...)), применяемый через Document::setLineStyle(LineStyle $style)
ВариантБазовое значениеСмысл
Butt0Квадратное окончание в конечной точке, без выступа.
Round1Полукруглая дуга в конечной точке.
Square2Квадратный выступ, выходящий за конечную точку на половину ширины линии.

Как два обведённых сегмента встречаются в углу. ISO 32000-2:2020 §8.4.3.4.

СвойствоЗначение
FQCNNextPDF\Graphics\LineJoin
Базовый типint
Задаётся черезобъект конфигурации LineStyle (new LineStyle(join: ...)), применяемый через Document::setLineStyle(LineStyle $style)
ВариантБазовое значениеСмысл
Miter0Острый угол, продлённый до предела скоса (miter limit).
Round1Круговая дуга, соединяющая внешние края.
Bevel2Диагональ, соединяющая внешние края.

LineCap и LineJoin не передаются методу Document напрямую — это поля неизменяемого объекта-значения NextPDF\Graphics\LineStyle, который вы затем передаёте в setLineStyle():

use NextPDF\Graphics\{LineStyle, LineCap, LineJoin};
$style = new LineStyle(width: 1.5, cap: LineCap::Round, join: LineJoin::Bevel);
$pdf->setLineStyle($style);
$pdf->line(20, 20, 120, 20);

Функция смешивания прозрачности, применяемая к последующей отрисовке. Первые двенадцать вариантов разделимые; последние четыре — неразделимые режимы HSL. ISO 32000-2:2020 §11.3.5.

СвойствоЗначение
FQCNNextPDF\Graphics\BlendMode
Базовый типstring
Задаётся черезDocument::setAlpha(float $alpha, BlendMode $mode = BlendMode::Normal)
ВариантБазовое значениеВариантБазовое значение
Normal'Normal'HardLight'HardLight'
Multiply'Multiply'SoftLight'SoftLight'
Screen'Screen'Difference'Difference'
Overlay'Overlay'Exclusion'Exclusion'
Darken'Darken'Hue'Hue'
Lighten'Lighten'Saturation'Saturation'
ColorDodge'ColorDodge'Color'Color'
ColorBurn'ColorBurn'Luminosity'Luminosity'
use NextPDF\Graphics\BlendMode;
$pdf->setAlpha(0.6, BlendMode::Multiply);
$pdf->rect(20, 20, 80, 40, 'F');

Как цвета за пределами охвата переотображаются во время преобразования цвета. Выдаётся как оператор ri. ISO 32000-2:2020 §8.6.5.8 (таблица 71).

В отличие от других перечислений на этой странице, у RenderingIntent нет публичного сеттера Document или Config — это перечисление уровня движка. Оно применяется прямо на внутреннем движке отрисовки (DrawingEngine::setRenderingIntent()), который выдаёт оператор ri в текущий поток содержимого. Мы перечисляем его здесь для полноты, потому что его варианты — часть публичного контракта цвета, но оно не входит в авторский API для разработчика, который документирует остальная часть этой страницы; относитесь к движку отрисовки как к внутреннему классу, а не как к точке входа, против которой вы программируете.

СвойствоЗначение
FQCNNextPDF\Graphics\RenderingIntent
Базовый типstring
Задаётся черезТолько уровень движка — применяется на внутреннем движке отрисовки; публичного сеттера Document/Config нет.
ВариантБазовое значениеСмысл
RelativeColorimetric'RelativeColorimetric'Сохраняет цвета в охвате; отсекает цвета за пределами охвата.
AbsoluteColorimetric'AbsoluteColorimetric'Сохраняет колориметрические значения точно, включая белизну бумаги.
Saturation'Saturation'Сохраняет яркую насыщенность за счёт оттенка/яркости.
Perceptual'Perceptual'Сохраняет визуальные соотношения; плавное сжатие охвата.

Цветовой профиль рабочего пространства, объявляемый в /OutputIntent документа. По умолчанию DeviceRGB сохраняет устаревшее поведение “без дополнительного OutputIntent”; выбор любого другого варианта заставляет writer выдать OutputIntent /GTS_PDFX со вложенным профилем ICC (ISO 32000-2:2020 §14.11.5). Это значение Config, а не метод на каждый вызов — задайте его на объекте конфигурации, который вы передаёте Document.

СвойствоЗначение
FQCNNextPDF\Core\OutputColorProfile
Базовый типstring
Задаётся черезConfig::withOutputColorProfile(OutputColorProfile $profile) (параметр $outputColorProfile конструктора Config)
ВариантБазовое значениеПримечания
DeviceRGB'device-rgb'По умолчанию. Дополнительный OutputIntent не выдаётся.
Srgb'srgb'Явный OutputIntent sRGB (IEC 61966-2-1). Не широкий охват.
DisplayP3'display-p3'Широкий охват Display-P3 (D65).
Rec2020'rec2020'Широкий охват ITU-R BT.2020 / Rec.2020.
A98RGB'a98-rgb'Adobe RGB 1998.
ProphotoRGB'prophoto-rgb'ProPhoto RGB / ROMM RGB (D50).
use NextPDF\Core\{Config, OutputColorProfile};
$config = (new Config())->withOutputColorProfile(OutputColorProfile::DisplayP3);

Заливаются ли глифы, обводятся, отсекаются или отрисовываются невидимо (невидимый режим лежит в основе слоёв OCR с возможностью поиска). ISO 32000-2:2020 §9.3.6, таблица 104.

СвойствоЗначение
FQCNNextPDF\Content\TextRenderingMode
Базовый типint
Задаётся черезDocument::setTextRenderingMode(TextRenderingMode $mode)
ВариантБазовое значениеСмысл
Fill0Заливать глифы.
Stroke1Обводить контуры глифов.
FillStroke2Сначала заливать, затем обводить.
Invisible3Отрисовывать невидимо (слои OCR с возможностью поиска).
FillClip4Заливать и добавлять к контуру отсечения.
StrokeClip5Обводить и добавлять к контуру отсечения.
FillStrokeClip6Заливать, обводить и отсекать.
Clip7Только добавлять к контуру отсечения (без видимой отрисовки).

Как рисуется декорация подчёркивания. Это единственное pure-перечисление здесь, поэтому вы всегда ссылаетесь на него по варианту.

СвойствоЗначение
FQCNNextPDF\Contracts\UnderlineStyle
Базовый типpure (без базового значения)
Задаётся черезDocument::setUnderlineStyle(UnderlineStyle $style)
ВариантСмысл
RectFillЗалитый прямоугольник под базовой линией (умолчание, совместимое с TCPDF).
StrokeLineОбведённая линия под базовой линией (семантическая отрисовка линии).
use NextPDF\Content\TextRenderingMode;
use NextPDF\Contracts\UnderlineStyle;
$pdf->setTextRenderingMode(TextRenderingMode::Invisible); // OCR text layer
$pdf->setUnderlineStyle(UnderlineStyle::StrokeLine);

Контракт соответствия уровня документа: какую часть ISO writer обязан соблюдать и требуется ли структурная разметка тегами. По умолчанию Plain — это неограниченный вывод PDF 2.0. ISO 14289-2:2024 (PDF/UA-2) и части PDF/A ISO 19005.

СвойствоЗначение
FQCNNextPDF\Conformance\ConformanceMode
Базовый типstring
Задаётся черезDocument::setConformanceMode(ConformanceMode $mode) (низкоуровневый аварийный выход; предпочитайте enableTaggedPdf() для PDF/UA-2 в Core или enablePdfA() — только Premium — для PDF/A)
ВариантБазовое значениеКонтракт
Plain'plain'PDF 2.0, без ограничений (по умолчанию).
PdfUa1'pdfua1'ISO 14289-1 (Tagged PDF/UA-1).
PdfUa2'pdfua2'ISO 14289-2:2024 (Tagged PDF/UA-2).
PdfA2'pdfa2'ISO 19005-2 (PDF/A-2).
PdfA3'pdfa3'ISO 19005-3 (дискриминатор профиля PDF/A-3).
PdfA3b'pdfa3b'ISO 19005-3 PDF/A-3b (Basic).
PdfA3u'pdfa3u'ISO 19005-3 PDF/A-3u (с извлекаемым Unicode).
PdfA4'pdfa4'ISO 19005-4:2020 (дискриминатор профиля PDF/A-4).
PdfA4e'pdfa4e'ISO 19005-4:2020 PDF/A-4e (Engineering).
PdfA4f'pdfa4f'ISO 19005-4:2020 PDF/A-4f (File attachments).

Перечисление несёт вспомогательные предикаты — isTagged(), isAccessibility(), isArchival() и pdfaPart() — поэтому защитные проверки на стороне writer ветвятся по режиму, а не выводят его заново.

Какие варианты сборка только из Core реально может использовать. Тип enum перечисляет каждый вариант, но перечислить вариант — не то же самое, что иметь возможность произвести это соответствие из Core:

  • Core (без дополнительного пакета): Plain, PdfUa1 и PdfUa2. Путь Tagged PDF / PDF/UA встроен в Core — enableTaggedPdf() выбирает авторский путь PDF/UA (PdfUa2 по умолчанию) и подключает дерево структуры без какой-либо проверки лицензии.
  • Только Premium: каждый вариант PDF/A (PdfA2, PdfA3, PdfA3b, PdfA3u, PdfA4, PdfA4e, PdfA4f). Реальный вывод PDF/A производится через enablePdfA(), который является возможностью уровня Premium (ADR-011): он требует пакета nextpdf/pro и завершается с ошибкой (fail closed) с InvalidConfigException (“install the nextpdf/pro package”), когда этот пакет отсутствует.

setConformanceMode() — это низкоуровневый аварийный выход, который только записывает поле дискриминатора — он не устанавливает машинерию PDF/A. Поэтому установка варианта PdfA* через него в сборке только из Core помечает документ, не давая ему архивных гарантий, которые предоставляет enablePdfA(), поэтому на режимы только Premium нельзя полагаться в сборке только из Core. Используйте enableTaggedPdf() / enablePdfA() для реальных путей соответствия и обращайтесь к пакету Premium всякий раз, когда требуется поставляемый результат PDF/A.

use NextPDF\Conformance\ConformanceMode;
$pdf->setConformanceMode(ConformanceMode::PdfUa2);

Значение /AFRelationship для встроенного связанного файла. Несоответствующее значение не проходит валидацию PDF/A-3 и PDF/A-4, поэтому перечисление — безопасный способ его задать. ISO 32000-2:2020 §14.13.5 (таблица 401).

СвойствоЗначение
FQCNNextPDF\Navigation\AFRelationship
Базовый типstring
Задаётся черезDocument::embedFile(string $path, string $description = '', AFRelationship|string $afRelationship = AFRelationship::Unspecified)
ВариантБазовое значениеПрименение
Source'Source'Исходный документ, из которого был произведён PDF.
Data'Data'Сырые данные, из которых выведен PDF (например, XML Factur-X / ZUGFeRD).
Alternative'Alternative'Альтернативное представление (Брайль, субтитры, SVG).
Supplement'Supplement'Дополнительный материал.
EncryptedPayload'EncryptedPayload'Непрозрачный зашифрованный блоб, который оборачивает PDF.
FormData'FormData'Данные формы (XFDF, FDF, XML).
Schema'Schema'Схема, описывающая файл Data (XSD, JSON Schema). PDF 2.0.
Unspecified'Unspecified'Связь не указана (по умолчанию).

embedFile() принимает либо вариант перечисления, либо его строковый литерал (с ведущим слешем или без него), поэтому AFRelationship::Data и '/Data' эквивалентны. Передача варианта — типобезопасный выбор.

use NextPDF\Navigation\AFRelationship;
// e-invoice payload: declare the XML as the source data
$pdf->embedFile('invoice.xml', 'Factur-X invoice data', AFRelationship::Data);