Artigo técnico

HotPDF: Unicode text shaping for complex scripts in Delphi

Esta versão localizada trata de Arabic and RTL Text Shaping in Delphi PDFs with HotPDF usando o artigo em inglês atualizado como referência técnica para equipes Delphi, PDF e software documental

A página transforma a base atualizada em pontos de controle práticos para projeto, implementação e validação

Conteúdo sincronizado a partir da base em inglês

O artigo base foi ampliado com contexto prático, decisões técnicas e exemplos concretos, então esta página deve ser lida como guia de trabalho, não como resumo curto

Pontos importantes da versão atualizada:

  • Use primeiro arquivos de entrada pequenos e reproduzíveis
  • Mantenha intactos nomes de produto, API, arquivos e valores literais
  • Salve a saída do validador e as versões junto com o arquivo de teste gerado

Decisões práticas de implementação

Comece pelo tipo de arquivo, pelo resultado esperado e pelo estado de erro que o usuário precisa ver. Depois conecte cada chamada API a um resultado verificável para que validação, logs e suporte possam reproduzir o caso do cliente

  • Use primeiro arquivos de entrada pequenos e reproduzíveis
  • Mantenha intactos nomes de produto, API, arquivos e valores literais
  • Salve a saída do validador e as versões junto com o arquivo de teste gerado

Código e pontos API

Os exemplos de código são preservados sem alteração para comparação direta com projetos Delphi, C++Builder e Lazarus/FPC

// Arabic: pass logical order; RtLTextOut reorders and joins
Pdf.CurrentPage.SetFont('Arial Unicode MS', [], 12, 178);
Pdf.CurrentPage.RtLTextOut(400, 700, 0, 'يوضح ملف PDF');

// Hebrew: reordering only, no contextual joining
Pdf.CurrentPage.SetFont('Arial Unicode MS', [], 12, 177);
Pdf.CurrentPage.RtLTextOut(400, 660, 0, 'קובץ PDF זה');
// Ship a known font instead of relying on installed system fonts
Pdf.RegisterUnicodeTTF('C:\Fonts\NotoSansArabic.ttf');
Pdf.CurrentPage.SetFont('NotoSansArabic', [], 12);

// Audit coverage for the codepoints your data actually uses
GID := Pdf.GetUnicodeGlyphForCodepoint($0628);  // U+0628 ARABIC LETTER BEH
LogGlyphAudit($0628, GID);
// Declare right-to-left reading order at the document level
Pdf.Direction := RightToLeft;  // adds vpDirection to ViewerPreferences

Verificação antes da publicação

Revise o arquivo de saída com as mesmas ferramentas que o cliente ou o arquivo documental usará. Registre versão do componente, dados de teste, versão do validador e resultado observado