THotPDF.RegisterAcroFormFont

Registro multi-fonte de THotPDF AcroForm /DR (v2.119.42)

 

AddXFAPacket  AcroForm Support  SetFormUnicodeFontDict

Registra uma fonte Unicode adicional (Type 0 / com chave CID) para inclusão no dicionário de Default Resources (/DR) do AcroForm. Permite que um único documento PDF exponha múltiplas fontes Unicode a widgets AcroForm simultaneamente — tipicamente usado em formulários multilíngues que precisam (por exemplo) de uma fonte latina mais uma fonte CJK mais uma fonte árabe no mesmo formulário.

 

Sintaxe Delphi:

procedure RegisterAcroFormFont(const FontResourceName: AnsiString;

  FontIndirectRef: THPDFObject);

 

Descrição

Widgets AcroForm referenciam fontes por meio de um dicionário de Default Resources (/DR) no dict AcroForm, que atua como o pool de recursos compartilhado para todos os appearance streams de campos de formulário. Antes da v2.119.42 o AcroForm /DR expunha exatamente uma fonte Unicode (tipicamente a fonte Type 0 do conjunto de helpers registrada por meio de SetFormUnicodeFontDict), o que restringia fluxos de formulários multilíngues porque todo widget tinha de renderizar pelo mesmo programa de fonte.

 

Depois da v2.119.42 os chamadores podem registrar fontes Unicode adicionais sob nomes de recursos arbitrários. Cada fonte registrada vira uma entrada /DR /Font /<name> <indirect ref> dentro do dict /DR do AcroForm em EndDoc. Os appearance streams de widgets podem então referenciar qualquer um dos nomes registrados por meio do próprio operador /Tf <name> <size> deles dentro do appearance content stream.

 

Parâmetros

FontResourceName - o PDF Name que o operador /Tf do appearance stream referencia. Convenção: um identificador curto e estável sem a cerilha inicial (ex.: 'NotoSansArab', 'NotoSansCJK'). O HotPDF grava a cerilha inicial ao serializar.

FontIndirectRef - um dicionário de fonte Type 0 (com chave CID) indireto existente, tipicamente o resultado de CreateIndirectFontDict sobre uma fonte registrada via RegisterUnicodeTTF.

 

Fluxo de trabalho típico (formulário multilíngue)

 

PDF.RegisterUnicodeTTF('NotoSansArab', 'NotoSansArabic-Regular.ttf');

PDF.RegisterUnicodeTTF('NotoSansJP'  , 'NotoSansJP-Regular.otf');

ArabRef := PDF.CreateIndirectFontDict('NotoSansArab');

JPRef   := PDF.CreateIndirectFontDict('NotoSansJP');

PDF.RegisterAcroFormFont('NotoSansArab', ArabRef);

PDF.RegisterAcroFormFont('NotoSansJP'  , JPRef);

 

Agora widgets com conteúdo árabe podem criar os appearance streams deles com /NotoSansArab 12 Tf, enquanto widgets com conteúdo japonês usam /NotoSansJP 12 Tf, compartilhando um único pool de recursos AcroForm /DR no documento todo.

 

Coexistência com SetFormUnicodeFontDict

O helper preexistente de fonte única (SetFormUnicodeFontDict) continua funcionando para projetos que precisam de apenas uma fonte Unicode no AcroForm /DR. RegisterAcroFormFont é aditivo: os chamadores podem usá-lo além de SetFormUnicodeFontDict, ou substituir SetFormUnicodeFontDict por completo quando mais de uma fonte Unicode for necessária.

 

See also: THotPDF.SetFormUnicodeFontDict, THotPDF.CreateIndirectFontDict, AcroForm Support, THPDFPage.AddTextField