Práce s CFF fonty

Práce s CFF fonty

Tento průvodce ukazuje, jak načíst a prozkoumat vnitřní struktury CFF fontů — znakové sady, tabulky kódování, slovníky a indexové struktury — pomocí Aspose.Font FOSS pro Python.

Písma ve formátu Compact Font Format (CFF) ukládají obrysy glifů jako programy Type 2 charstring. Aspose.Font FOSS pro Python poskytuje vyhrazené třídy v jmenném prostoru aspose_font.cff pro čtení CFF znakových sad, tabulek kódování, slovníků a indexů.


CFF znaková sada

CffCharset mapuje ID glifů na PostScript názvy glifů. Zavolejte CffCharset.standard() pro získání vestavěné znakové sady ISO Adobe, poté použijte name_for() a gid_for() pro převod mezi ID glifů a názvy.

from aspose_font.cff import CffCharset

charset = CffCharset.standard()
name = charset.name_for(1)   # PostScript name for GID 1
gid  = charset.gid_for("A")  # GID for PostScript name "A"

CFF kódování

CffEncoding mapuje kódy znaků na ID glifů. Standardní kódování pokrývá Adobe Latin znakovou sadu; použijte unicode_to_gid() k vyhledání jednotlivých kódových bodů a get_all_codepoints() k vypsání všech přiřazených hodnot.

from aspose_font.cff import CffEncoding

enc = CffEncoding.standard()
gid = enc.unicode_to_gid(0x41)
codepoints = enc.get_all_codepoints()

Parsování slovníku CFF

CffDict.from_bytes() parsuje surový blob CFF DICT do mapování klíč-operátor. Každý klíč operátoru mapuje na seznam číselných hodnot, které konfigurojí font, například výchozí šířku nebo offsety podprogramů.

from aspose_font.cff import CffDict

d = CffDict.from_bytes(raw_bytes)
vals = d.get(21)   # retrieve values for operator 21

CFF Index

CffIndex.from_reader() parsuje datovou strukturu CFF INDEX z binárního proudu. Struktury INDEX jsou pole proměnné délky dat používaných pro tabulky názvů, tabulky řetězců a úložiště charstringů v CFF fontech.

from aspose_font.cff import CffIndex
from aspose_font._io import BinaryReader  # internal API — may change between releases
import io

reader = BinaryReader(io.BytesIO(raw_index_bytes))
index = CffIndex.from_reader(reader)
print(f"INDEX entries: {len(index)}")

Interpretace Type 2 Charstring

Type2Interpreter.interpret() vykoná Type 2 charstring a vrátí GlyphPath.

from aspose_font.cff import Type2Interpreter

interpreter = Type2Interpreter()
glyph_path = interpreter.interpret(charstring_bytes, private_dict)

Tipy a osvědčené postupy

  • Použijte CffEncoding.standard() jako základ; přepište pomocí from_reader() pro vložená kódování
  • CffDict.to_bytes() vám umožní pře-serializovat upravené slovníky
  • Interpretace charstringu je potřeba pouze pro extrakci surových obrysů glifu; GlyphAccessor pokrývá většinu případů použití na vyšší úrovni

API Reference Shrnutí

Třída / MetodaPopis:
CffCharset.standard()Standardní znaková sada ISO Adobe
CffCharset.name_for(gid)PostScript název pro glyph ID
CffCharset.gid_for(name)Glyph ID pro PostScript název
CffEncoding.standard()Standardní tabulka kódování CFF
CffEncoding.unicode_to_gid(cp)Namapovat kódový bod na GID
CffDict.from_bytes(data)Analyzovat surový CFF DICT
CffDict.get(operator)Získat hodnoty pro operátor DICT
CffIndex.from_reader(reader)Analyzovat CFF INDEX
Type2Interpreter.interpret(cs, pd)Spusťte Type 2 charstring

Viz také:

 Čeština