Ir al contenido
getnextpdf.com

Referencia de enumeraciones

Varios métodos de creación de NextPDF reciben un enum tipado en lugar de una cadena o un entero a secas. La enumeración es el contrato: restringe el argumento a un conjunto fijo y válido, y tanto el IDE como PHPStan rechazan cualquier valor fuera de él. Esta página es la consulta de valores permitidos para las enumeraciones que se establecen (o se reciben) a través de la API pública de Document y de Config —más una enumeración de color de nivel de motor (RenderingIntent), incluida porque sus casos forman parte del contrato público de color y señalada como de nivel de motor allí donde aparece.

Es el complemento de la referencia de configuración. Donde el objeto Config indica qué control girar, esta página indica qué valores acepta ese control. Cada entrada enumera el nombre de clase totalmente cualificado (FQCN) de la enumeración, su tipo de respaldo, la lista exacta de casos copiada del código fuente y el método público que la recibe.

Las enumeraciones internas profundas del motor (la maquetación de HTML/CSS, el árbol de sintaxis abstracta, la CLI, las interioridades del shaper) se excluyen deliberadamente: nunca se establecen. Casi todo lo que sigue es un valor que se pasa a través de la API pública; la única excepción, RenderingIntent, es una enumeración de color de nivel de motor sin setter público, listada por exhaustividad y etiquetada como tal allí donde aparece.

Las enumeraciones de PHP vienen en dos formas, y la forma cambia cómo se escribe el valor:

  • Una enumeración respaldada (enum X: string o enum X: int) tiene un value escalar para cada caso, de modo que va y vuelve mediante X::from('...') / $case->value. La mayoría de las enumeraciones aquí están respaldadas.
  • Una enumeración pura (enum X sin tipo de respaldo) tiene casos pero ningún valor escalar; siempre se hace referencia a ella por caso (X::SomeCase). Solo UnderlineStyle es pura.

En ambas formas se pasa el propio caso; por ejemplo, $pdf->addPage(orientation: Orientation::Landscape). El tipo de respaldo solo importa cuando hay que serializar la elección o volver a leerla desde la configuración.

Geometría de página vertical u horizontal. Se pasa al añadir una página; el motor intercambia el ancho y el alto para que coincidan.

PropiedadValor
FQCNNextPDF\Contracts\Orientation
Respaldostring
Se establece medianteDocument::addPage(?PageSize $size = null, Orientation $orientation = Orientation::Portrait)
CasoValor de respaldo
Portrait'P'
Landscape'L'
use NextPDF\Contracts\Orientation;
use NextPDF\ValueObjects\PageSize;
$pdf->addPage(PageSize::a4(), Orientation::Landscape);

Cómo termina un trazado abierto con borde. ISO 32000-2:2020 §8.4.3.3.

PropiedadValor
FQCNNextPDF\Graphics\LineCap
Respaldoint
Se establece medianteel objeto de configuración LineStyle (new LineStyle(cap: ...)), aplicado con Document::setLineStyle(LineStyle $style)
CasoValor de respaldoSignificado
Butt0Extremo cuadrado en el punto final, sin proyección.
Round1Arco semicircular en el punto final.
Square2Proyección cuadrada que se extiende la mitad del ancho de línea más allá del punto final.

Cómo se encuentran dos segmentos con borde en una esquina. ISO 32000-2:2020 §8.4.3.4.

PropiedadValor
FQCNNextPDF\Graphics\LineJoin
Respaldoint
Se establece medianteel objeto de configuración LineStyle (new LineStyle(join: ...)), aplicado con Document::setLineStyle(LineStyle $style)
CasoValor de respaldoSignificado
Miter0Esquina afilada extendida hasta el límite de inglete.
Round1Arco circular que une los bordes exteriores.
Bevel2Diagonal que conecta los bordes exteriores.

LineCap y LineJoin no se pasan directamente a un método de Document: son campos del objeto de valor inmutable NextPDF\Graphics\LineStyle, que luego se entrega a 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);

La función de mezcla de transparencia aplicada al dibujo posterior. Los primeros doce casos son separables; los cuatro últimos son los modos HSL no separables. ISO 32000-2:2020 §11.3.5.

PropiedadValor
FQCNNextPDF\Graphics\BlendMode
Respaldostring
Se establece medianteDocument::setAlpha(float $alpha, BlendMode $mode = BlendMode::Normal)
CasoValor de respaldoCasoValor de respaldo
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');

Cómo se reasignan los colores fuera de gama durante la conversión de color. Se emite como el operador ri. ISO 32000-2:2020 §8.6.5.8 (Tabla 71).

A diferencia de las demás enumeraciones de esta página, RenderingIntent no tiene setter público de Document ni de Config: es una enumeración de nivel de motor. Se aplica directamente sobre el motor de dibujo interno (DrawingEngine::setRenderingIntent()), que emite el operador ri en el flujo de contenido actual. La listamos aquí por exhaustividad porque sus casos forman parte del contrato público de color, pero no forma parte de la API de creación orientada al desarrollador que documenta el resto de esta página; trata el motor de dibujo como una clase interna en lugar de como el punto de entrada contra el que programas.

PropiedadValor
FQCNNextPDF\Graphics\RenderingIntent
Respaldostring
Se establece medianteSolo a nivel de motor: se aplica sobre el motor de dibujo interno; sin setter público de Document/Config.
CasoValor de respaldoSignificado
RelativeColorimetric'RelativeColorimetric'Conserva los colores dentro de gama; recorta los que están fuera de gama.
AbsoluteColorimetric'AbsoluteColorimetric'Conserva los valores colorimétricos con exactitud, incluido el blanco de papel.
Saturation'Saturation'Conserva una saturación vívida a costa del tono/luminancia.
Perceptual'Perceptual'Conserva las relaciones visuales; compresión de gama suave.

El perfil de color del espacio de trabajo declarado en el /OutputIntent del documento. El valor predeterminado DeviceRGB conserva el comportamiento heredado de «sin OutputIntent adicional»; seleccionar cualquier otro caso hace que el escritor emita un OutputIntent /GTS_PDFX con el perfil ICC incluido (ISO 32000-2:2020 §14.11.5). Es un valor de Config, no un método por llamada: se establece en el objeto de configuración que se pasa al Document.

PropiedadValor
FQCNNextPDF\Core\OutputColorProfile
Respaldostring
Se establece medianteConfig::withOutputColorProfile(OutputColorProfile $profile) (el parámetro $outputColorProfile del constructor de Config)
CasoValor de respaldoNotas
DeviceRGB'device-rgb'Predeterminado. No se emite ningún OutputIntent adicional.
Srgb'srgb'OutputIntent sRGB explícito (IEC 61966-2-1). Sin gama amplia.
DisplayP3'display-p3'Gama amplia Display-P3 (D65).
Rec2020'rec2020'Gama amplia 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);

Si los glifos se rellenan, se trazan, se recortan o se renderizan de forma invisible (el modo invisible sustenta las capas OCR buscables). ISO 32000-2:2020 §9.3.6, Tabla 104.

PropiedadValor
FQCNNextPDF\Content\TextRenderingMode
Respaldoint
Se establece medianteDocument::setTextRenderingMode(TextRenderingMode $mode)
CasoValor de respaldoSignificado
Fill0Rellena los glifos.
Stroke1Traza los contornos de los glifos.
FillStroke2Rellena y luego traza.
Invisible3Renderiza de forma invisible (capas OCR buscables).
FillClip4Rellena y añade al trazado de recorte.
StrokeClip5Traza y añade al trazado de recorte.
FillStrokeClip6Rellena, traza y recorta.
Clip7Solo añade al trazado de recorte (sin renderizado visible).

Cómo se dibuja una decoración de subrayado. Es la única enumeración pura aquí, así que siempre se hace referencia a ella por caso.

PropiedadValor
FQCNNextPDF\Contracts\UnderlineStyle
Respaldopura (sin valor de respaldo)
Se establece medianteDocument::setUnderlineStyle(UnderlineStyle $style)
CasoSignificado
RectFillRectángulo relleno bajo la línea base (predeterminado compatible con TCPDF).
StrokeLineLínea trazada bajo la línea base (dibujo de línea semántico).
use NextPDF\Content\TextRenderingMode;
use NextPDF\Contracts\UnderlineStyle;
$pdf->setTextRenderingMode(TextRenderingMode::Invisible); // OCR text layer
$pdf->setUnderlineStyle(UnderlineStyle::StrokeLine);

El contrato de conformidad a nivel de documento: qué parte de ISO debe respetar el escritor y si se requiere etiquetado estructural. El valor predeterminado Plain es salida PDF 2.0 sin restricciones. ISO 14289-2:2024 (PDF/UA-2) y las partes PDF/A de ISO 19005.

PropiedadValor
FQCNNextPDF\Conformance\ConformanceMode
Respaldostring
Se establece medianteDocument::setConformanceMode(ConformanceMode $mode) (vía de escape de más bajo nivel; prefiere enableTaggedPdf() para PDF/UA-2 en Core, o enablePdfA() —solo Premium— para PDF/A)
CasoValor de respaldoContrato
Plain'plain'PDF 2.0, sin restricciones (predeterminado).
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 (discriminador de perfil PDF/A-3).
PdfA3b'pdfa3b'ISO 19005-3 PDF/A-3b (Basic).
PdfA3u'pdfa3u'ISO 19005-3 PDF/A-3u (extraíble como Unicode).
PdfA4'pdfa4'ISO 19005-4:2020 (discriminador de perfil PDF/A-4).
PdfA4e'pdfa4e'ISO 19005-4:2020 PDF/A-4e (Engineering).
PdfA4f'pdfa4f'ISO 19005-4:2020 PDF/A-4f (File attachments).

La enumeración incorpora ayudantes de predicado —isTagged(), isAccessibility(), isArchival() y pdfaPart()— para que las puertas del lado del escritor ramifiquen según el modo en lugar de volver a derivarlo.

Qué casos puede usar realmente una compilación solo de Core. El tipo enum enumera todos los casos, pero listar un caso no es lo mismo que poder producir esa conformidad desde Core:

  • Core (sin paquete adicional): Plain, PdfUa1 y PdfUa2. La vía de Tagged PDF / PDF/UA está integrada en Core: enableTaggedPdf() selecciona la vía de creación de PDF/UA (PdfUa2 de forma predeterminada) y conecta el árbol de estructura sin ninguna comprobación de licencia.
  • Solo Premium: todos los casos PDF/A (PdfA2, PdfA3, PdfA3b, PdfA3u, PdfA4, PdfA4e, PdfA4f). La salida PDF/A real la produce enablePdfA(), que es una función de nivel Premium (ADR-011): requiere el paquete nextpdf/pro y falla de forma cerrada con una InvalidConfigException («install the nextpdf/pro package») cuando ese paquete está ausente.

setConformanceMode() es una vía de escape de más bajo nivel que solo escribe el campo discriminador: no instala la maquinaria de PDF/A. Por tanto, establecer un caso PdfA* a través de él en una compilación solo de Core etiqueta el documento sin darle las garantías de archivado que proporciona enablePdfA(), de modo que no se debe confiar en los modos solo de Premium en una compilación solo de Core. Usa enableTaggedPdf() / enablePdfA() para las vías de conformidad reales, y recurre al paquete Premium siempre que se requiera un entregable PDF/A.

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

El valor /AFRelationship de un archivo asociado incrustado. Un valor no conforme falla la validación de PDF/A-3 y PDF/A-4, así que la enumeración es la forma segura de establecerlo. ISO 32000-2:2020 §14.13.5 (Tabla 401).

PropiedadValor
FQCNNextPDF\Navigation\AFRelationship
Respaldostring
Se establece medianteDocument::embedFile(string $path, string $description = '', AFRelationship|string $afRelationship = AFRelationship::Unspecified)
CasoValor de respaldoUso
Source'Source'El documento de origen a partir del cual se produjo el PDF.
Data'Data'Datos en bruto de los que deriva el PDF (p. ej., XML de Factur-X / ZUGFeRD).
Alternative'Alternative'Presentación alternativa (braille, subtítulos, SVG).
Supplement'Supplement'Material complementario.
EncryptedPayload'EncryptedPayload'Un blob cifrado opaco que el PDF envuelve.
FormData'FormData'Datos de formulario (XFDF, FDF, XML).
Schema'Schema'Esquema que describe un archivo Data (XSD, JSON Schema). PDF 2.0.
Unspecified'Unspecified'Sin relación especificada (predeterminado).

embedFile() acepta tanto el caso de la enumeración como su literal de cadena (con o sin barra inicial), de modo que AFRelationship::Data y '/Data' son equivalentes. Pasar el caso es la opción con seguridad de tipos.

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