Salta ai contenuti
getnextpdf.com

Riferimento delle enum

Diversi metodi di authoring di NextPDF accettano una enum tipizzata anziché una semplice stringa o un intero. L’enum è il contratto: vincola l’argomento a un insieme fisso e valido, e l’IDE e PHPStan rifiutano qualsiasi valore al di fuori di esso. Questa pagina è la tabella di consultazione dei valori ammessi per le enum che si impostano (o si ricevono) tramite l’API pubblica del Document e di Config — più un’enum di colore a livello di motore (RenderingIntent), inclusa perché i suoi case fanno parte del contratto pubblico del colore e segnalata come a livello di motore dove compare.

Questo è il complemento del riferimento di configurazione. Dove l’oggetto Config indica quale manopola girare, questa pagina indica quali valori quella manopola accetta. Ogni voce elenca il nome completo della classe (FQCN) dell’enum, il suo tipo di backing, l’elenco esatto dei case copiato dal codice sorgente e il metodo pubblico che la accetta.

Le enum profonde, interne al motore (layout HTML/CSS, l’albero di sintassi astratta, la CLI, gli interni dello shaper) sono deliberatamente escluse — non si impostano mai quelle. Quasi tutto ciò che segue è un valore che si passa attraverso l’API pubblica; l’unica eccezione, RenderingIntent, è un’enum di colore a livello di motore senza setter pubblico, elencata per completezza ed etichettata come tale dove compare.

Le enum di PHP hanno due forme, e la forma cambia il modo in cui si scrive il valore:

  • Un’enum backed (enum X: string o enum X: int) ha un value scalare per ogni case, quindi compie un round-trip tramite X::from('...') / $case->value. La maggior parte delle enum qui sono backed.
  • Un’enum pure (enum X senza tipo di backing) ha case ma nessun valore scalare; ci si riferisce sempre ad essa per case (X::SomeCase). Solo UnderlineStyle è pure.

In entrambe le forme si passa il case stesso — per esempio $pdf->addPage(orientation: Orientation::Landscape). Il tipo di backing conta solo quando occorre serializzare la scelta o rileggerla dalla configurazione.

Geometria della pagina verticale o orizzontale. Passata quando si aggiunge una pagina; il motore scambia larghezza e altezza per adeguarsi.

PropertyValue
FQCNNextPDF\Contracts\Orientation
Backingstring
Set viaDocument::addPage(?PageSize $size = null, Orientation $orientation = Orientation::Portrait)
CaseBacking value
Portrait'P'
Landscape'L'
use NextPDF\Contracts\Orientation;
use NextPDF\ValueObjects\PageSize;
$pdf->addPage(PageSize::a4(), Orientation::Landscape);

Come termina un tracciato aperto sottoposto a stroke. ISO 32000-2:2020 §8.4.3.3.

PropertyValue
FQCNNextPDF\Graphics\LineCap
Backingint
Set vial’oggetto di configurazione LineStyle (new LineStyle(cap: ...)), applicato con Document::setLineStyle(LineStyle $style)
CaseBacking valueMeaning
Butt0Estremità squadrata sull’endpoint, senza sporgenza.
Round1Arco semicircolare sull’endpoint.
Square2Sporgenza quadrata che si estende per metà della larghezza della linea oltre l’endpoint.

Come si incontrano a un angolo due segmenti sottoposti a stroke. ISO 32000-2:2020 §8.4.3.4.

PropertyValue
FQCNNextPDF\Graphics\LineJoin
Backingint
Set vial’oggetto di configurazione LineStyle (new LineStyle(join: ...)), applicato con Document::setLineStyle(LineStyle $style)
CaseBacking valueMeaning
Miter0Angolo netto esteso fino al limite di smussatura (miter limit).
Round1Arco circolare che unisce i bordi esterni.
Bevel2Diagonale che collega i bordi esterni.

LineCap e LineJoin non si passano direttamente a un metodo del Document — sono campi del value object immutabile NextPDF\Graphics\LineStyle, che poi si consegna 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 funzione di blend della trasparenza applicata al disegno successivo. I primi dodici case sono separabili; gli ultimi quattro sono le modalità HSL non separabili. ISO 32000-2:2020 §11.3.5.

PropertyValue
FQCNNextPDF\Graphics\BlendMode
Backingstring
Set viaDocument::setAlpha(float $alpha, BlendMode $mode = BlendMode::Normal)
CaseBacking valueCaseBacking value
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');

Come i colori fuori gamut vengono rimappati durante la conversione del colore. Emesso come operatore ri. ISO 32000-2:2020 §8.6.5.8 (Table 71).

A differenza delle altre enum di questa pagina, RenderingIntent non ha alcun setter pubblico su Document o Config — è un’enum a livello di motore. Viene applicata direttamente sul motore di disegno interno (DrawingEngine::setRenderingIntent()), che emette l’operatore ri nel content stream corrente. La elenchiamo qui per completezza perché i suoi case fanno parte del contratto pubblico del colore, ma non fa parte dell’API di authoring esposta agli sviluppatori documentata nel resto di questa pagina; trattare il motore di disegno come una classe interna anziché come il punto di ingresso con cui si programma.

PropertyValue
FQCNNextPDF\Graphics\RenderingIntent
Backingstring
Set viaSolo a livello di motore — applicata sul motore di disegno interno; nessun setter pubblico su Document/Config.
CaseBacking valueMeaning
RelativeColorimetric'RelativeColorimetric'Conserva i colori in gamut; clip di quelli fuori gamut.
AbsoluteColorimetric'AbsoluteColorimetric'Conserva esattamente i valori colorimetrici, incluso il bianco della carta.
Saturation'Saturation'Conserva una saturazione vivida a scapito di tinta/luminanza.
Perceptual'Perceptual'Conserva le relazioni visive; compressione fluida del gamut.

Il profilo di colore dello spazio di lavoro dichiarato sull’/OutputIntent del documento. Il valore predefinito DeviceRGB conserva il comportamento legacy «nessun OutputIntent aggiuntivo»; selezionando qualsiasi altro case il writer emette un OutputIntent /GTS_PDFX con il profilo ICC incluso (ISO 32000-2:2020 §14.11.5). Questo è un valore di Config, non un metodo per chiamata — impostarlo sull’oggetto di configurazione passato al Document.

PropertyValue
FQCNNextPDF\Core\OutputColorProfile
Backingstring
Set viaConfig::withOutputColorProfile(OutputColorProfile $profile) (il parametro $outputColorProfile del costruttore di Config)
CaseBacking valueNotes
DeviceRGB'device-rgb'Predefinito. Nessun OutputIntent aggiuntivo emesso.
Srgb'srgb'OutputIntent sRGB esplicito (IEC 61966-2-1). Non a gamut esteso.
DisplayP3'display-p3'Display-P3 a gamut esteso (D65).
Rec2020'rec2020'ITU-R BT.2020 / Rec.2020 a gamut esteso.
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);

Se i glifi sono riempiti, sottoposti a stroke, ritagliati o resi in modo invisibile (la modalità invisibile è alla base dei livelli OCR ricercabili). ISO 32000-2:2020 §9.3.6, Table 104.

PropertyValue
FQCNNextPDF\Content\TextRenderingMode
Backingint
Set viaDocument::setTextRenderingMode(TextRenderingMode $mode)
CaseBacking valueMeaning
Fill0Riempie i glifi.
Stroke1Esegue lo stroke dei contorni dei glifi.
FillStroke2Riempie e poi esegue lo stroke.
Invisible3Rende in modo invisibile (livelli OCR ricercabili).
FillClip4Riempie e aggiunge al tracciato di clipping.
StrokeClip5Esegue lo stroke e aggiunge al tracciato di clipping.
FillStrokeClip6Riempie, esegue lo stroke e ritaglia.
Clip7Aggiunge solo al tracciato di clipping (nessun rendering visibile).

Come viene disegnata una decorazione di sottolineatura. Questa è l’unica enum pure qui presente, quindi ci si riferisce sempre ad essa per case.

PropertyValue
FQCNNextPDF\Contracts\UnderlineStyle
Backingpure (no backing value)
Set viaDocument::setUnderlineStyle(UnderlineStyle $style)
CaseMeaning
RectFillRettangolo riempito sotto la linea di base (default compatibile con TCPDF).
StrokeLineLinea sottoposta a stroke sotto la linea di base (disegno semantico della linea).
use NextPDF\Content\TextRenderingMode;
use NextPDF\Contracts\UnderlineStyle;
$pdf->setTextRenderingMode(TextRenderingMode::Invisible); // OCR text layer
$pdf->setUnderlineStyle(UnderlineStyle::StrokeLine);

Il contratto di conformità a livello di documento: quale parte ISO il writer deve rispettare e se è richiesto il tagging strutturale. Il valore predefinito Plain è output PDF 2.0 non vincolato. ISO 14289-2:2024 (PDF/UA-2) e le parti PDF/A di ISO 19005.

PropertyValue
FQCNNextPDF\Conformance\ConformanceMode
Backingstring
Set viaDocument::setConformanceMode(ConformanceMode $mode) (escape hatch di basso livello; preferire enableTaggedPdf() per PDF/UA-2 in Core, o enablePdfA() — solo Premium — per PDF/A)
CaseBacking valueContract
Plain'plain'PDF 2.0, non vincolato (default).
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 (discriminatore di profilo PDF/A-3).
PdfA3b'pdfa3b'ISO 19005-3 PDF/A-3b (Basic).
PdfA3u'pdfa3u'ISO 19005-3 PDF/A-3u (Unicode-extractable).
PdfA4'pdfa4'ISO 19005-4:2020 (discriminatore di profilo PDF/A-4).
PdfA4e'pdfa4e'ISO 19005-4:2020 PDF/A-4e (Engineering).
PdfA4f'pdfa4f'ISO 19005-4:2020 PDF/A-4f (File attachments).

L’enum espone helper predicato — isTagged(), isAccessibility(), isArchival() e pdfaPart() — così che i gate lato writer si diramino in base alla modalità anziché riderivarla.

Quali case può effettivamente usare una build solo Core. Il tipo enum elenca ogni case, ma elencare un case non equivale a poter produrre quella conformità da Core:

  • Core (nessun pacchetto extra): Plain, PdfUa1 e PdfUa2. Il percorso Tagged PDF / PDF/UA è integrato in Core — enableTaggedPdf() seleziona il percorso di authoring PDF/UA (PdfUa2 per impostazione predefinita) e cabla l’albero della struttura senza alcun controllo di licenza.
  • Solo Premium: ogni case PDF/A (PdfA2, PdfA3, PdfA3b, PdfA3u, PdfA4, PdfA4e, PdfA4f). L’output PDF/A reale è prodotto da enablePdfA(), che è una funzionalità di livello Premium (ADR-011): richiede il pacchetto nextpdf/pro e fallisce in modo chiuso con una InvalidConfigException («install the nextpdf/pro package») quando tale pacchetto è assente.

setConformanceMode() è un escape hatch di basso livello che scrive solo il campo discriminatore — non installa la macchineria PDF/A. Impostare un case PdfA* tramite esso in una build solo Core etichetta quindi il documento senza conferirgli le garanzie di archiviazione che enablePdfA() fornisce, quindi sulle modalità solo Premium non si deve fare affidamento in una build solo Core. Usare enableTaggedPdf() / enablePdfA() per i percorsi di conformità reali, e ricorrere al pacchetto Premium ogni volta che è richiesto un deliverable PDF/A.

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

Il valore /AFRelationship per un file associato incorporato. Un valore non conforme fa fallire la validazione PDF/A-3 e PDF/A-4, quindi l’enum è il modo sicuro per impostarlo. ISO 32000-2:2020 §14.13.5 (Table 401).

PropertyValue
FQCNNextPDF\Navigation\AFRelationship
Backingstring
Set viaDocument::embedFile(string $path, string $description = '', AFRelationship|string $afRelationship = AFRelationship::Unspecified)
CaseBacking valueUse
Source'Source'Il documento sorgente da cui è stato prodotto il PDF.
Data'Data'Dati grezzi da cui il PDF è derivato (ad es. XML Factur-X / ZUGFeRD).
Alternative'Alternative'Presentazione alternativa (braille, sottotitoli, SVG).
Supplement'Supplement'Materiale supplementare.
EncryptedPayload'EncryptedPayload'Un blob cifrato opaco che il PDF avvolge.
FormData'FormData'Dati di modulo (XFDF, FDF, XML).
Schema'Schema'Schema che descrive un file Data (XSD, JSON Schema). PDF 2.0.
Unspecified'Unspecified'Nessuna relazione specificata (default).

embedFile() accetta sia il case dell’enum sia il suo letterale stringa (con o senza slash iniziale), quindi AFRelationship::Data e '/Data' sono equivalenti. Passare il case è la scelta type-safe.

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