Font Fallback and Vertical Text
O HotPDF pode selecionar faces de reserva por script Unicode, relatar pontos de código que permanecem não resolvidos e escrever texto CJK por meio de um modo real de escrita CID vertical
Cadeias de fallback no nível do documento
THotPDF.SetFontFallbackChain armazena uma lista ordenada de faces para uma categoria THPDFFontScript
THPDFPage.TextOutWithFallback resolve cada escalar Unicode contra a face selecionada, a cadeia de script dela e a cadeia comum, e emite escalares adjacentes com a mesma face como um único run de texto
- Cadeias de fallback são configurações do documento e permanecem disponíveis entre páginas
- Nomes de face duplicados e vazios são removidos, mantendo a ordem do chamador
- A sondagem de faces instaladas rejeita substituição silenciosa por GDI antes de aceitar a cobertura
- Escalares do plano suplementar são decodificados de surrogate pairs UTF-16 antes da classificação
- Cada run de fallback usa a fonte Type0 embutida existente, o subsetting, o
ToUnicodee o caminho compartilhado de fontes entre páginas - O layout de fallback verifica famílias de fontes instaladas com a face em negrito e itálico solicitada, preserva todas as configurações de estilo de fonte, charset, tamanho e direção de escrita entre os runs e restaura a fonte do chamador em seguida
Diagnósticos acionáveis
AnalyzeUnresolvedGlyphs faz uma auditoria de cobertura somente leitura, enquanto TextOutWithFallback registra escalares não resolvidos encontrados durante a saída
Cada THPDFUnresolvedGlyphInfo inclui o code point do escalar, a face primária, o script classificado e uma lista de sugestões de fallback separada por ponto e vírgula
GetUnresolvedGlyphs retorna o relatório atual do documento e ClearUnresolvedGlyphs inicia um novo intervalo de relatório
As overloads de estilo explícito de THotPDF.ResolveFontForCodePoint e THotPDF.AnalyzeUnresolvedGlyphs aceitam TFontStyles para que o preflight possa inspecionar a mesma face usada na saída; as overloads originais continuam inspecionando faces regulares
Caixas de texto, texto embutido em SVG e appearances de texto carregadas retêm famílias de fontes com estilo ao longo do layout de fallback, em vez de tratar nomes de fontes internas do PDF como famílias do sistema ou trocar cada run para uma face regular
Escrita CJK vertical
THPDFPage.TextOutVertical seleciona a variante vertical da face atual e emite um único run de texto Identity-V, em vez de posicionar cada caractere manualmente
- A fonte descendente CID contém padrões
/DW2e entradas/W2específicas por glifo - OpenType
vheaevmtxfornecem avanços verticais e side bearings superiores; origens TrueType são derivadas do bounding box de cadaglyf, enquantoVORGfornece os padrões de origem CFF autoritativos e as exceções - Fontes sem tabelas verticais usam avanço padrão configurável de 1000 unidades e origem padrão de 880 unidades
- Com
sfVerticalAlternates, o run GSUB completo que preserva o comprimento usavrt2quando anunciado e, caso contrário, recai emvert, preservando a seleção ativa de script e idioma - Quando uma fonte omite uma substituição de pontuação mas mapeia formas de apresentação verticais do Unicode, vírgulas, pontos, colchetes, travessões, reticências e pontuação relacionada usam esses glifos, enquanto
ToUnicodepreserva o texto de origem - As features GPOS verticais
vkrnevpalpermanecem disponíveis por meio deShapingFeatures GetVerticalTextAdvanceretorna o avanço no espaço de usuário necessário para posicionar o próximo run vertical
Exemplo
PDF.SetFontFallbackChain(hfsCJK,
['Microsoft YaHei UI', 'Yu Gothic UI', 'Malgun Gothic']);
PDF.SetFontFallbackChain(hfsEmoji, ['Segoe UI Emoji']);
PDF.CurrentPage.SetFont('Arial', [], 12);
PDF.CurrentPage.TextOutWithFallback(72, 72, 0, Text);
PDF.CurrentPage.SetFont('Yu Gothic UI', [], 14);
PDF.CurrentPage.TextOutVertical(420, 72, VerticalText);
Missing := PDF.GetUnresolvedGlyphs;