Pular para o conteúdo
getnextpdf.com

Pro edição

Template — Referência Profunda

Esta referência profunda documenta o esquema JSON de template aceito, cada regra de validação e o comportamento exato de formatação por tipo do vinculador de dados. O módulo analisa uma definição de template e depois vincula os dados do chamador a placeholders tipados. Ele emite strings formatadas; não desenha objetos PDF.

Este recurso é entregue no NextPDF Pro (nextpdf/pro) e ativa com um envelope de licença de nível Pro. Uma implantação sem esse direito não carrega as classes do recurso. Nenhum sinalizador de capacidade em tempo de execução restringe este módulo. Compare as edições e obtenha uma licença.

O módulo expõe dois serviços de ponto de entrada e quatro objetos de valor imutáveis. Todo símbolo abaixo é público e estável.

SímboloParâmetrosComportamento padrãoRetornaLança ou falha comNotas
TemplateParser::parsestring $jsonValida e depois constrói a definiçãoTemplateDefinitionInvalidArgumentException quando há qualquer erro de validaçãoDelega primeiro para validate.
TemplateParser::validatestring $jsonColeta todos os erros estruturais em uma única passagemlist<string> (vazia quando válida)Nunca lança; uma falha de decodificação JSON é retornada como mensagemGate autoritativo para os limites de comprimento e precisão.
TemplateDataBinder::bindTemplateDefinition $template, array<string,mixed> $dataFaz a correspondência de placeholders sem distinção de maiúsculas e minúsculas e formata por tipoBindingResultNunca lança; anomalias viram avisos ou campos ausentesUsa o valor padrão de um placeholder quando a chave está ausente.
TemplateDefinition::__constructstring $name, string $pageSize, string $orientation, list<TemplatePlaceholder> $placeholders, string $backgroundPdf = ''Armazena a definição analisadaTemplateDefinitionTypeError em uma incompatibilidade de tipo de argumentoObjeto de valor final readonly.
TemplateDefinition::getPlaceholderstring $nameBusca por nome sem distinção de maiúsculas e minúsculasTemplatePlaceholder|nullSem falha; retorna null quando ausente
TemplateDefinition::requiredFieldsnenhumColeta os nomes dos placeholders que não têm valor padrãolist<string>Sem falhaUm padrão não vazio marca um placeholder como opcional.
TemplatePlaceholder::__constructstring $name, PlaceholderType $type, float $x, float $y, float $width, float $height, string $defaultValue = '', string $format = ''Armazena uma região de placeholderTemplatePlaceholderTypeError em uma incompatibilidade de tipo de argumentoAs coordenadas são pontos a partir do canto superior esquerdo.
TemplatePlaceholder::matchesstring $keyComparação de nome sem distinção de maiúsculas e minúsculasboolSem falha
BindingResult::__constructlist<BoundPlaceholder> $bindings, list<string> $missingFields, list<string> $warningsArmazena o resultado da vinculaçãoBindingResultTypeError em uma incompatibilidade de tipo de argumentoObjeto de valor final readonly.
BindingResult::isCompletenenhumInforma se todos os campos obrigatórios foram vinculadosboolSem falhaVerdadeiro quando missingFields está vazia.
BindingResult::countnenhumConta os placeholders vinculados com sucessointSem falha
BoundPlaceholder::__constructTemplatePlaceholder $placeholder, string $formattedValue, mixed $rawValueEmparelha um placeholder com seu valor formatadoBoundPlaceholderTypeError em uma incompatibilidade de tipo de argumentoObjeto de valor final readonly.
PlaceholderTypecasos de enum Text, Image, Barcode, Date, Number, Currency, ConditionalTaxonomia de placeholder respaldada por stringinstância de enumValueError de from() em um valor desconhecidotryFrom() retorna null em vez disso.
PlaceholderType::requiresFormattingnenhumInforma se o tipo consome uma string de formatoboolSem falhaVerdadeiro para 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;
}

Formato JSON aceito:

{
"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" }
]
}

Regras de validação, todas expostas por validate como mensagens e agregadas por parse em uma única exceção:

  • name ausente ou vazio.
  • pageSize fora da allow-list, ou orientation diferente de P ou L.
  • placeholders ausente, ou um valor que não seja um array.
  • Por placeholder: nome ausente ou vazio; tipo inválido; x, y, width, height ausentes ou não numéricos; nome duplicado (sem distinção de maiúsculas e minúsculas).
  • defaultValue: não string, com mais de 4096 bytes, ou carregando um caractere de controle ASCII.
  • format: não string, com mais de 256 bytes, ou carregando um caractere de controle ASCII.
  • Um format de placeholder number que não seja um inteiro não negativo, ou que exceda 30.

Semântica de vinculação (TemplateDataBinder::bind):

  • As chaves de dados são convertidas para minúsculas para a correspondência sem distinção de maiúsculas e minúsculas com os nomes dos placeholders.
  • Uma chave ausente com um padrão não vazio vincula o padrão; uma chave ausente sem um é relatada em missingFields.
  • Valores de texto, imagem e barcode são convertidos em string sem alteração.
  • A vinculação de data aceita um DateTimeInterface, um timestamp Unix inteiro, ou uma string em um de quatro formatos explícitos. O formato de saída padrão é Y-m-d.
  • A vinculação de número usa number_format(value, decimals, '.', ','). A contagem de decimais vem de format, tem padrão 2 e é limitada ao intervalo de 0 a 30.
  • A vinculação de moeda prefixa o número formatado com format, tendo $ como prefixo padrão.
  • A vinculação condicional emite "true" ou "false" a partir de uma conversão booleana.
  • O backgroundPdf nunca é aberto ou desreferenciado por este módulo. Ele é uma string opaca entregue ao renderizador.
  • Um valor não numérico vinculado a um placeholder Number ou Currency produz um aviso; o valor é convertido em string (string-cast), não rejeitado.
  • As strings de data são analisadas estritamente. Tokens relativos e de linguagem natural (“now”, “+1 year”, “tomorrow”) não correspondem a nenhum formato aceito, então geram aviso e o valor bruto passa adiante sem alteração.
  • Um valor de data inteiro é lido como um timestamp Unix por meio da forma de época @.
  • Uma precisão de format de Number fora do intervalo de 0 a 30 que chegue ao vinculador é rejeitada com um aviso; o vinculador recorre à precisão padrão de 2.
  • Nenhuma operação criptográfica ocorre neste módulo, portanto não há comportamento específico de modo FIPS.

Não existe superfície direta de especificação PDF. Os vocabulários de tamanho de página e de orientação são convenções do NextPDF, e o módulo emite valores formatados, não objetos PDF. A allow-list estrita de datas em string aceita o perfil de data/hora da Internet do ISO 8601 definido no RFC 3339 §5.6, junto de uma data de calendário Y-m-d e duas formas locais de data-hora. O NextPDF documenta a capacidade de ler esses formatos; não reivindica nenhuma certificação em relação ao RFC 3339 ou ao ISO 8601.

  • TemplateParser e TemplateDataBinder são sem estado. Uma única instância é reutilizável e segura para compartilhar entre vinculações.
  • Os quatro objetos de valor são final readonly; construa-os por meio do parser em vez de manualmente para entrada de produção.
  • validate relata todo erro estrutural em uma única passagem, enquanto parse chama validate primeiro e lança sobre a mensagem agregada. Use validate para feedback em estilo de formulário e parse para ingestão fail-fast.
  • Os limites de comprimento e precisão são impostos no parser como o gate autoritativo. TemplateDataBinder reverifica a precisão do número como uma proteção do lado do sink contra a amplificação de memória do number_format.

Esta página documenta apenas o comportamento observável externamente e a superfície da API pública suportada. Caminhos de namespace internos, classes auxiliares, tabelas de mecanismos, nomes de arquivos de runbook e prefixos de ticket estão fora de escopo.