Funciones de subsetting de fuentes CFF y OpenType

PDF Filter Support

 

Top  EnableFontSubsetting  Contenido

Estas funciones a nivel de unidad exponen la superficie pública de inspección de fuentes CFF, OpenType-CFF y sfnt que usa la tubería de fuentes incrustadas de HotPDF. HotPDF también distribuye unidades reutilizables de análisis Type 1 PFB y CFF para los llamadores que necesiten inspección de fuentes de más bajo nivel

 

Sintaxis Delphi

function HPDFSubsetCFF(const CFFBytes: TBytes; const KeepGlyph: array of Boolean): TBytes;

function HPDFIsCFF2Font(const FontBytes: TBytes): Boolean;

function HPDFInstantiateCFF2Font(const FontBytes: TBytes; const AxisValues: THPDFVariableFontAxisValueArray): TBytes;

function HPDFSubsetCFF2Font(const FontBytes: TBytes; const KeepGlyph: array of Boolean): TBytes;

function HPDFIsTrueTypeVariableFont(const FontBytes: TBytes): Boolean;

function HPDFInstantiateTrueTypeVariableFont(const FontBytes: TBytes; const AxisValues: THPDFVariableFontAxisValueArray): TBytes;

function HPDFSfntIsOTF(const Data: TBytes): Boolean;

function HPDFOTFFindCFFTable(const Data: TBytes; out TableOff: Cardinal; out TableLen: Cardinal): Boolean;

function HPDFSubsetOTFContainer(const OTFBytes: TBytes; const KeepGlyph: array of Boolean): TBytes;

function HPDFExtractTTFPostScriptName(const Data: TBytes): AnsiString;

 

Descripción

HPDFSubsetCFF reescribe una carga de fuente CFF in situ, preservando los IDs de glifo y reemplazando las CharStrings y subrutinas no usadas por stubs mínimos. Es el helper para los llamadores que ya extrajeron una tabla CFF de un contenedor de fuentes

 

HPDFIsCFF2Font detecta un sfnt con tabla CFF2. HPDFInstantiateCFF2Font resuelve las coordenadas fvar seleccionadas a través de avar 1.0 o 2.0, evalúa operaciones blend respaldadas por VariationStore a través de subrutinas recursivas, horneadas HVAR, VVAR y MVAR, elimina las tablas variables y devuelve un sfnt estático con checksum correcto

 

HPDFSubsetCFF2Font realiza la misma instanciación de coordenadas por defecto mientras reemplaza los programas de glifos no usados por CharStrings vacías. Preserva los IDs de glifo, los diccionarios multi-FD, los datos de hints privados y las matrices de fuente

 

HPDFIsTrueTypeVariableFont detecta un sfnt que contiene fvar, glyf y loca. HPDFInstantiateTrueTypeVariableFont mapea los ejes seleccionados a través de avar, evalúa las tuplas gvar y la interpolación IUP, actualiza los contornos simples y compuestos más las métricas de puntos fantasma, aplica HVAR, VVAR y MVAR donde corresponda, elimina las tablas variables y devuelve un sfnt estático con checksum correcto

 

HPDFSfntIsOTF detecta un contenedor sfnt cuya versión es OTTO. HPDFOTFFindCFFTable localiza la tabla 'CFF ' incrustada. HPDFSubsetOTFContainer hace subsetting de datos CFF o CFF2 incrustados y devuelve un contenedor OTF con checksums sfnt válidos. HPDFExtractTTFPostScriptName lee el name ID 6 de la tabla name del sfnt y devuelve el nombre PostScript de la fuente cuando está presente

 

El subsetter reconoce tanto CFF con claves por nombre (un único Private DICT, un único Local Subr INDEX) como CFF con claves CID (operador ROS en el Top DICT, FDArray con varios Private DICT de subfuentes, mapa glifo-a-FD en FDSelect, Local Subr INDEX por cada FD). El soporte CID cubre las fuentes OpenType-CFF CJK / índicas / árabes; el análisis de clausura sigue el contexto FD de cada CharString conservado, de modo que los Local Subr INDEX de cada FD se reducen de forma independiente

 

Los decodificadores de enteros CFF de más bajo nivel, los parsers FDArray / FDSelect y los escáneres de subrutinas son detalles de implementación detrás de esta superficie pública de helpers

 

Unidades parser de Type 1 y CFF

HPDFType1Core, HPDFType1Glyphs, HPDFType1CFFHandler y HPDFType1PFBHandler proporcionan lectores reutilizables de arrays de bytes, extracción de comandos de contorno de glifos Type 1, parseo de cabecera / INDEX / diccionario / charset / encoding CFF, y metadatos PFB Type 1 más helpers de búsqueda de glifos. HPDFType1CFFHandler resuelve la herencia SyntheticBase a través de un FontSet para valores Top y Private de DICT, CharStrings, charset, Encoding y Local Subrs, rechazando índices inválidos, ciclos y profundidad excesiva. HPDFType1CB ofrece un punto de entrada del parser amigable con C++Builder. Las unidades se incluyen en los proyectos de paquete Delphi y C++Builder para que las aplicaciones puedan inspeccionar datos PFB y CFF Type 1 sin reimplementar los parsers binarios

 

Véase también: EnableFontSubsetting, FontEmbedding, PDF Filter Support

Operaciones de pila Type 2 y seguridad de subrutinas

El renderizador nativo de glifos implementa las operaciones Type 2 estándar booleanas, aritméticas, condicionales, de transient array y de pila, incluidas put, get, ifelse, random, dup, exch, index y roll

Los valores transitorios se reinician en cada glifo, los valores aleatorios son reproducibles, y los límites de operandos, transient array, recursión y ejecución rechazan los programas malformados sin devolver un contorno parcial

El escáner de subsetting resuelve las expresiones aritméticas y de transient array usadas por las llamadas a subrutinas locales y globales, incluidos los operandos Type 2 de punto fijo 16.16

Cuando valores aleatorios, estado transitorio desconocido o efectos de pila entre procedimientos hacen incierta la llamada de destino, el subsetting conserva todas las subrutinas candidatas en lugar de descartar una dependencia de contorno potencialmente alcanzable

Las operaciones Multiple Master reservadas y obsoletas siguen sin soportarse y fallan de forma explícita