Fuentes de reserva y texto vertical
HotPDF puede seleccionar tipografías de reserva según script Unicode, informar de los puntos de código que siguen sin resolverse y escribir texto CJK mediante un modo real de escritura CID vertical
Cadenas de respaldo a nivel de documento
THotPDF.SetFontFallbackChain almacena una lista ordenada de faces para una categoría THPDFFontScript
THPDFPage.TextOutWithFallback resuelve cada escalar Unicode contra la face seleccionada, su cadena de scripts y la cadena común, y después emite los escalares adyacentes con la misma face como un único run de texto
- Las cadenas de respaldo son ajustes del documento y siguen disponibles entre páginas
- Los nombres de face duplicados y vacíos se eliminan conservando el orden del llamador
- El sondeo de faces instaladas rechaza la sustitución GDI silenciosa antes de aceptar la cobertura
- Los escalares de planos suplementarios se decodifican a partir de pares sustitutos UTF-16 antes de la clasificación
- Cada run de fallback usa la fuente Type0 incrustada existente, el subsetting,
ToUnicodey la ruta compartida de fuentes entre páginas - La maquetación de fallback comprueba las familias de fuentes instaladas con la variante bold e italic solicitada, conserva todos los ajustes de estilo de fuente, charset, tamaño y dirección de escritura entre runs, y restaura después la fuente del llamador
Diagnósticos accionables
AnalyzeUnresolvedGlyphs realiza una auditoría de cobertura de solo lectura, mientras que TextOutWithFallback registra los escalares no resueltos encontrados durante la salida
Cada THPDFUnresolvedGlyphInfo incluye el punto de código escalar, la tipografía principal, el script clasificado y una lista de sugerencias de reserva separada por puntos y coma
GetUnresolvedGlyphs devuelve el informe actual del documento y ClearUnresolvedGlyphs inicia un nuevo intervalo de informe
Las sobrecargas de estilo explícito de THotPDF.ResolveFontForCodePoint y THotPDF.AnalyzeUnresolvedGlyphs aceptan TFontStyles, de modo que el preflight puede inspeccionar la misma face usada para la salida; sus sobrecargas originales siguen inspeccionando faces regulares
Los cuadros de texto, el texto incrustado SVG y las apariencias de texto cargado conservan las familias de fuentes con estilo a lo largo de la maquetación de fallback, en lugar de tratar los nombres de fuente internos del PDF como familias del sistema o cambiar cada run a una face regular
Escritura CJK vertical
THPDFPage.TextOutVertical selecciona la variante vertical de la face actual y emite un run de texto Identity-V en lugar de posicionar cada carácter manualmente
- La fuente descendiente CID contiene valores por defecto
/DW2y entradas/W2específicas por glifo - Los
vheayvmtxOpenType aportan avances verticales y top side bearings; los orígenes TrueType se derivan del bounding box de cadaglyf, mientras queVORGaporta los valores por defecto de origen CFF autoritativos y sus excepciones - Las fuentes sin tablas verticales usan valores por defecto configurables: avance de 1000 unidades y origen de 880 unidades
- Con
sfVerticalAlternates, el run GSUB completo que preserva la longitud usavrt2cuando se anuncia y si no cae envert, conservando la selección activa de script e idioma - Cuando una fuente omite una sustitución de puntuación pero mapea formas de presentación vertical Unicode, las comas, los puntos, los corchetes, los guiones, los puntos suspensivos y la puntuación relacionada usan esos glifos mientras
ToUnicodepreserva el texto de origen - Las funcionalidades GPOS verticales
vkrnyvpalsiguen disponibles a través deShapingFeatures GetVerticalTextAdvancedevuelve el avance en espacio de usuario necesario para posicionar el siguiente run vertical
Ejemplo
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;