핵심 글꼴 관리
핵심 글꼴 관리
이 가이드는 파일 경로나 바이트 배열에서 글꼴을 로드하고, 메타데이터 속성을 읽으며, Unicode 코드 포인트를 글리프 ID에 매핑하고, 글리프를 검색하며, 가변 글꼴 축 및 명명된 인스턴스를 사용하는 방법을 보여줍니다.
FontLoader은(는) 모든 글꼴 로드 작업의 주요 진입점입니다. 글꼴이 로드되면, Font 기본 클래스는 메타데이터, 인코딩, 글리프 접근 및 메트릭에 대한 접근을 제공하며, 바이너리 테이블 파싱이 필요하지 않습니다.
글꼴 로드
FontLoader.open(source, font_type, collection_index)은(는) 자동 형식 감지를 통해 파일 경로에서 글꼴을 로드합니다. FontLoader.load(source, font_type, collection_index)은(는) 메모리 내 또는 네트워크 워크플로를 위한 원시 바이트를 받아들입니다.
from aspose_font import FontLoader
# From a file path — format auto-detected
font = FontLoader.open("Roboto-Regular.ttf")
# From raw bytes — useful for in-memory or network workflows
with open("OpenSans-Regular.otf", "rb") as f:
font = FontLoader.load(f.read())글꼴 메타데이터 읽기
로드 후, Font 객체는 font_name, font_family, font_style, num_glyphs 속성을 노출하여 수동 테이블 파싱 없이 빠른 검사를 할 수 있게 합니다.
from aspose_font import FontLoader
font = FontLoader.open("MyFont.ttf")
print(font.font_name) # full PostScript name
print(font.font_family) # family name
print(font.font_style) # style name e.g. "Regular", "Bold"
print(font.num_glyphs) # total glyph count글리프 인코딩
FontEncoding은(는) 유니코드 코드 포인트를 글리프 ID에 매핑합니다. 단일 코드 포인트를 해석하려면 unicode_to_gid(cp)을(를) 사용하고, 폰트에 매핑된 모든 코드 포인트를 열거하려면 get_all_codepoints()을(를) 사용하십시오.
from aspose_font import FontLoader
font = FontLoader.open("OpenSans-Regular.otf")
# Map a single code point
gid = font.encoding.unicode_to_gid(0x41) # GID for 'A'
# Enumerate all mapped code points
all_cps = font.encoding.get_all_codepoints()
print(f"Font covers {len(all_cps)} Unicode code points")글리프 액세스
GlyphAccessor은(는) ID, 유니코드 또는 텍스트 문자열로 글리프 객체를 가져옵니다.
from aspose_font import FontLoader
font = FontLoader.open("OpenSans-Regular.otf")
glyph = font.glyph_accessor.get_glyph_by_id(gid)
glyph_a = font.glyph_accessor.get_glyph_by_unicode(0x41)
glyphs = font.glyph_accessor.get_glyphs_for_text("Hello")
all_ids = font.glyph_accessor.get_all_glyph_ids()가변 폰트
가변 폰트( fvar 테이블을 포함하는 경우)에서는 TtfFont이 축 정의와 명명된 인스턴스를 직접 노출합니다.
from aspose_font import FontLoader
from aspose_font import TtfFont
loaded = FontLoader.load("Roboto-VariableFont_wdth,wght.ttf")
ttf: TtfFont = loaded.font
# Check if the font is variable
if ttf.is_variable:
# List all variation axes
for axis in ttf.variable_axes:
print(f"{axis.tag} range: {axis.min_value}..{axis.max_value} default: {axis.default_value}")
# Look up a single axis by tag
wght = ttf.get_axis("wght")
if wght:
print(f"Weight axis: {wght.min_value}..{wght.max_value}")
# Enumerate named instances (e.g. Bold, Condensed)
for inst in ttf.named_instances:
print(f"Instance: name_id={inst.name_id} coordinates={inst.coordinates}")고급 인스턴싱 워크플로우의 경우, SmartInstancer은 축 열거와 명명된 인스턴스 해석을 단일 객체로 래핑합니다:
from aspose_font import FontLoader
from aspose_font import SmartInstancer
loaded = FontLoader.load("Roboto-VariableFont_wdth,wght.ttf")
instancer = SmartInstancer(loaded.font)
print(f"Axes: {[a.tag for a in instancer.axes]}")
print(f"Named instances: {len(instancer.named_instances)}")팁 및 모범 사례
- 같은 폰트 파일을 여러 번 처리할 때 로드된
Font객체를 캐시합니다 - 네트워크 또는 데이터베이스 워크플로에서 임시 파일을 피하려면
FontLoader.load(bytes)를 사용하십시오 - 서브셋팅 전에
num_glyphs를 확인하여 서브셋팅 후 커버리지를 추정합니다 get_all_glyph_ids()는 전체 글리프 세트를 반복하는 데 유용합니다
일반적인 문제
| 문제 | 원인 | 수정 |
|---|---|---|
UnsupportedFontFormatException | 파일 형식을 인식할 수 없습니다 | 파일이 유효한 TTF/OTF/CFF/WOFF/WOFF2/EOT/Type1인지 확인하십시오 |
FontParseException | 잘못된 바이너리 데이터 | 로드하기 전에 linter로 폰트 파일을 검증합니다 |
GlyphNotFoundException | GID가 범위를 벗어났습니다 | ID로 접근하기 전에 num_glyphs를 확인하십시오 |
FAQ
FontLoader가 WOFF2를 지원합니까?
예. FontLoader.open()와 FontLoader.load()은 모두 WOFF2 파일을 받아들이며 형식을 자동으로 감지합니다.
URL에서 글꼴을 로드할 수 있나요?
직접적으로는 불가능합니다. urllib 또는 requests를 사용하여 글꼴 바이트를 다운로드하고 이를 FontLoader.load(bytes)에 전달하십시오.
로드가 스레드 안전합니까?
각 FontLoader.open() 호출은 독립적인 Font 객체를 반환합니다. 별개의 객체에 대한 동시 호출은 안전합니다.
API Reference 요약
| 클래스 / 메서드 | 설명 |
|---|---|
FontLoader.open(path) | 파일 경로에서 폰트를 로드합니다 |
FontLoader.load(data) | 원시 바이트에서 글꼴을 로드합니다 |
Font.font_name | 전체 PostScript 글꼴 이름 |
Font.font_family | 글꼴 패밀리 이름 |
Font.font_style | 글꼴 스타일 이름 |
Font.num_glyphs | 전체 글리프 수 |
FontEncoding.unicode_to_gid(cp) | Unicode 코드 포인트를 글리프 ID에 매핑 |
FontEncoding.get_all_codepoints() | 글리프 매핑이 있는 모든 Unicode 코드 포인트 |
GlyphAccessor.get_glyph_by_id(gid) | ID로 글리프 검색 |
GlyphAccessor.get_glyph_by_unicode(cp) | Unicode 코드 포인트로 글리프 가져오기 |
GlyphAccessor.get_glyphs_for_text(text) | 텍스트 문자열에 대한 글리프 가져오기 |
GlyphAccessor.get_all_glyph_ids() | 폰트의 모든 글리프 ID를 나열합니다 |
TtfFont.is_variable | 폰트에 가변 글꼴 데이터가 포함되어 있는지 여부 |
TtfFont.variable_axes | 각 변형 축에 대한 VariableAxis 객체 목록 |
TtfFont.get_axis(tag) | 네 글자 태그로 단일 축을 조회합니다 |
TtfFont.named_instances | 글꼴의 fvar 테이블에 정의된 명명된 인스턴스 |
SmartInstancer(font) | 축 및 인스턴스 쿼리를 래핑하는 고수준 헬퍼 |