Salta ai contenuti
getnextpdf.com

Pro edizione

Template — Riferimento approfondito

Questo riferimento approfondito documenta lo schema JSON dei modelli accettato, ogni regola di validazione e l’esatto comportamento di formattazione per tipo del data binder. Il modulo analizza una definizione di modello, quindi associa i dati del chiamante a placeholder tipizzati. Emette stringhe formattate; non disegna oggetti PDF.

Questa funzionalità è inclusa in NextPDF Pro (nextpdf/pro) e si attiva con un envelope di licenza di livello Pro. Un deployment privo di tale entitlement non carica le classi della funzionalità. Nessun flag di capability di runtime applica un gate a questo modulo. Confronta le edizioni e ottieni una licenza.

Il modulo espone due servizi di ingresso e quattro value object immutabili. Ogni simbolo elencato di seguito è pubblico e stabile.

SimboloParametriComportamento predefinitoRestituisceSolleva o fallisce conNote
TemplateParser::parsestring $jsonValida, poi costruisce la definizioneTemplateDefinitionInvalidArgumentException quando è presente un errore di validazioneDelega prima a validate.
TemplateParser::validatestring $jsonRaccoglie tutti gli errori strutturali in un’unica passatalist<string> (vuota quando valido)Non solleva mai eccezioni; un errore di decodifica JSON viene restituito come messaggioGate autoritativo per i limiti di lunghezza e precisione.
TemplateDataBinder::bindTemplateDefinition $template, array<string,mixed> $dataConfronta i placeholder senza distinzione tra maiuscole e minuscole e li formatta per tipoBindingResultNon solleva mai eccezioni; le anomalie diventano avvisi o campi mancantiUsa il valore predefinito del placeholder quando la chiave è assente.
TemplateDefinition::__constructstring $name, string $pageSize, string $orientation, list<TemplatePlaceholder> $placeholders, string $backgroundPdf = ''Memorizza la definizione analizzataTemplateDefinitionTypeError in caso di tipo di argomento non corrispondenteValue object final readonly.
TemplateDefinition::getPlaceholderstring $nameRicerca per nome senza distinzione tra maiuscole e minuscoleTemplatePlaceholder|nullNessun errore; restituisce null quando assente
TemplateDefinition::requiredFieldsnessunoRaccoglie i nomi dei placeholder privi di valore predefinitolist<string>Nessun erroreUn valore predefinito non vuoto rende opzionale un placeholder.
TemplatePlaceholder::__constructstring $name, PlaceholderType $type, float $x, float $y, float $width, float $height, string $defaultValue = '', string $format = ''Memorizza una regione placeholderTemplatePlaceholderTypeError in caso di tipo di argomento non corrispondenteLe coordinate sono in punti a partire dall’angolo in alto a sinistra.
TemplatePlaceholder::matchesstring $keyConfronto del nome senza distinzione tra maiuscole e minuscoleboolNessun errore
BindingResult::__constructlist<BoundPlaceholder> $bindings, list<string> $missingFields, list<string> $warningsMemorizza l’esito del bindingBindingResultTypeError in caso di tipo di argomento non corrispondenteValue object final readonly.
BindingResult::isCompletenessunoIndica se ogni campo obbligatorio è stato associatoboolNessun erroreVero quando missingFields è vuoto.
BindingResult::countnessunoConta i placeholder associati con successointNessun errore
BoundPlaceholder::__constructTemplatePlaceholder $placeholder, string $formattedValue, mixed $rawValueAbbina un placeholder al suo valore formattatoBoundPlaceholderTypeError in caso di tipo di argomento non corrispondenteValue object final readonly.
PlaceholderTypecasi enum Text, Image, Barcode, Date, Number, Currency, ConditionalTassonomia dei placeholder basata su stringheistanza enumValueError da from() per un valore sconosciutotryFrom() restituisce invece null.
PlaceholderType::requiresFormattingnessunoIndica se il tipo utilizza una stringa di formatoboolNessun erroreVero per Date, Number, Currency.
final class TemplateParser
{
public function parse(string $json): TemplateDefinition;
public function validate(string $json): array;
}
final class TemplateDataBinder
{
public function bind(TemplateDefinition $template, array $data): BindingResult;
}

Forma JSON accettata:

{
"name": "string (required, non-empty)",
"pageSize": "A3|A4|A5|A6|B4|B5|Letter|Legal|Tabloid",
"orientation": "P|L",
"backgroundPdf": "optional path string",
"placeholders": [
{ "name": "string", "type": "text|image|barcode|date|number|currency|conditional",
"x": number, "y": number, "width": number, "height": number,
"defaultValue": "optional", "format": "optional" }
]
}

Regole di validazione, tutte esposte da validate come messaggi e aggregate da parse in un’unica eccezione:

  • name mancante o vuoto.
  • pageSize al di fuori dell’allow-list, oppure orientation diverso da P o L.
  • placeholders mancante, oppure un valore non-array.
  • Per ciascun placeholder: nome mancante o vuoto; tipo non valido; x, y, width, height mancanti o non numerici; nome duplicato (senza distinzione tra maiuscole e minuscole).
  • defaultValue: non stringa, più lungo di 4096 byte, oppure contenente un carattere di controllo ASCII.
  • format: non stringa, più lungo di 256 byte, oppure contenente un carattere di controllo ASCII.
  • Un format di un placeholder number che non è un intero non negativo, oppure che supera 30.

Semantica di binding (TemplateDataBinder::bind):

  • Le chiavi dei dati vengono convertite in minuscolo per la corrispondenza senza distinzione tra maiuscole e minuscole rispetto ai nomi dei placeholder.
  • Una chiave assente con un valore predefinito non vuoto associa il valore predefinito; una chiave assente che ne è priva viene segnalata in missingFields.
  • I valori text, image e barcode vengono convertiti in stringa senza modifiche.
  • Il binding delle date accetta un DateTimeInterface, un timestamp Unix intero, oppure una stringa in uno di quattro formati espliciti. Il formato di output predefinito è Y-m-d.
  • Il binding dei numeri usa number_format(value, decimals, '.', ','). Il numero di decimali proviene da format, ha valore predefinito 2 ed è vincolato all’intervallo da 0 a 30.
  • Il binding della valuta antepone al numero formattato format, con prefisso predefinito $.
  • Il binding condizionale emette "true" o "false" da una conversione booleana.
  • backgroundPdf non viene mai aperto o dereferenziato da questo modulo. È una stringa opaca passata al renderer.
  • Un valore non numerico associato a un placeholder Number o Currency produce un avviso; il valore viene convertito in stringa, non rifiutato.
  • Le stringhe di data vengono analizzate in modo rigoroso. I token relativi e in linguaggio naturale («now», «+1 year», «tomorrow») non corrispondono ad alcun formato accettato, quindi generano un avviso e il valore grezzo viene passato inalterato.
  • Un valore di data intero viene letto come timestamp Unix tramite la forma epoch @.
  • Una precisione format di un Number al di fuori dell’intervallo da 0 a 30 che raggiunge il binder viene rifiutata con un avviso; il binder ricade sulla precisione predefinita di 2.
  • In questo modulo non si verifica alcuna operazione crittografica, pertanto non esiste alcun comportamento specifico della modalità FIPS.

Non esiste alcuna superficie diretta di specifica PDF. I vocabolari di dimensione della pagina e di orientamento sono convenzioni di NextPDF e il modulo emette valori formattati, non oggetti PDF. L’allow-list rigorosa per le date in formato stringa accetta il profilo Internet date/time di ISO 8601 definito in RFC 3339 §5.6, insieme a una data di calendario Y-m-d e a due forme di data-ora locale. NextPDF documenta la capacità di leggere questi formati; non rivendica alcuna certificazione rispetto a RFC 3339 o ISO 8601.

  • TemplateParser e TemplateDataBinder sono privi di stato. Una singola istanza è riutilizzabile e può essere condivisa in sicurezza tra più binding.
  • I quattro value object sono final readonly; per gli input di produzione conviene costruirli tramite il parser anziché a mano.
  • validate segnala ogni errore strutturale in un’unica passata, mentre parse chiama prima validate e solleva un’eccezione sul messaggio aggregato. Usare validate per il feedback in stile form e parse per un’ingestione fail-fast.
  • I limiti di lunghezza e precisione sono applicati nel parser come gate autoritativo. TemplateDataBinder ricontrolla la precisione dei numeri come salvaguardia lato sink contro l’amplificazione di memoria di number_format.

Questa pagina documenta esclusivamente il comportamento osservabile dall’esterno e la superficie API pubblica supportata. Percorsi di namespace interni, classi di supporto, tabelle di meccanismi, nomi di file dei runbook e prefissi dei ticket sono fuori ambito.