はじめに

フォントファイルはテーブルを中心に構成されており、各テーブルはグリフのアウトライン、文字マッピング、名前メタデータ、横方向メトリクスなど、特定のデータカテゴリを格納します。これらのテーブルを理解しアクセスできることは、フォントの分析、メタデータ編集、品質保証、フォーマット変換といった作業に不可欠です。

Aspose.Font FOSS for Python (aspose-font) は、クリーンな Python API を通じて、OpenType と TrueType の全テーブルセットに直接アクセスできるようにします。このライブラリは MIT ライセンスでリリースされており、外部依存がゼロなので、ライセンス上の懸念なく任意のプロジェクトに組み込むことが可能です。

本稿では、ライブラリで利用可能な主要なテーブルクラスを順に解説します — ヘッダーメタデータの読み取りからグリフデータの検査、名前レコードの変更まで — すべては TtfFont 上の TtfTableSet コンテナに裏付けられています。


主な機能

フォントの読み込みとテーブルへのアクセス

FontLoader で読み込まれたすべてのフォントは、TtfFont 上の ttf_tables プロパティを通じて解析済みテーブルを公開します。TtfTableSet オブジェクトは各標準テーブルへの型付きアクセスを提供し、カスタムまたは未認識テーブルに対しては get_raw() を介した生バイトアクセスも可能です。

import aspose_font

font = aspose_font.FontLoader.open("MyFont.ttf")
tables = font.ttf_tables

# Typed table access
head = tables.head
name = tables.name
cmap = tables.cmap

# Raw bytes for any table tag
raw_os2 = tables.get_raw("OS/2")

Headテーブルの読み取り

HeadTable は、フォント全体の基本パラメータ(units per em、revision、バウンディングボックス、作成日、スタイルフラグ)を格納します。これらの値は、レンダリングエンジンやフォントバリデータにとって重要です。

import aspose_font

font = aspose_font.FontLoader.open("MyFont.ttf")
head = font.ttf_tables.head

print(f"Units per em: {head.units_per_em}")
print(f"Revision: {head.font_revision}")
print(f"Bounding box: ({head.x_min}, {head.y_min}) to ({head.x_max}, {head.y_max})")
print(f"Mac style flags: {head.mac_style}")
print(f"Glyph data format: {head.glyph_data_format}")

Nameテーブルの操作

NameTable は、フォントファミリ名、スタイル、著作権、ライセンス、デザイナー、説明など、すべての人が読めるメタデータを保持します。name IDでレコードをクエリしたり、ローカライズされた名前を取得したり、リブランディングのためにエントリを変更したりできます。

import aspose_font

font = aspose_font.FontLoader.open("MyFont.ttf")
name_table = font.ttf_tables.name

# Read the font family name (name ID 1)
family = name_table.best_name(1, ["en"])
print(f"Family: {family}")

# List all localized versions of the full name (name ID 4)
localized = name_table.localized_names(4)
for lang, value in localized.items():
    print(f"  {lang}: {value}")

# Replace the font family name
name_table.replace_name(1, "MyCustomFamily")

CMapテーブルの検査

CmapTable はUnicodeコードポイントをグリフIDにマッピングします。異なるプラットフォームとエンコーディングの組み合わせに対して複数のサブテーブルを含むことがあります。best_subtable() を使用して、用途に最適なマッピングを取得してください。

import aspose_font

font = aspose_font.FontLoader.open("MyFont.ttf")
cmap = font.ttf_tables.cmap

# Get the best Unicode subtable
subtable = cmap.best_subtable()
print(f"Platform: {subtable.platform_id}, Encoding: {subtable.encoding_id}")

# Look up the glyph ID for 'A'
gid = subtable.get_gid(ord("A"))
print(f"Glyph ID for 'A': {gid}")

OS/2 と水平メトリクスの読み取り

Os2Table は OS/2 と、タイポグラフィ的な ascender/descender、埋め込みフラグ、Panose分類を含む Windows 固有のメトリクスを提供します。HheaTableHmtxTable は、テキストシェーピングに使用される水平レイアウトメトリクスを供給します。

import aspose_font

font = aspose_font.FontLoader.open("MyFont.ttf")
os2 = font.ttf_tables.os2
hhea = font.ttf_tables.hhea

print(f"Typo ascender: {os2.s_typo_ascender}")
print(f"Typo descender: {os2.s_typo_descender}")
print(f"Embedding flags (fsType): {os2.fs_type}")
print(f"Panose: {os2.panose.hex()}")

print(f"Hhea ascender: {hhea.ascender}")
print(f"Max advance width: {hhea.advance_width_max}")
print(f"Number of hmetrics: {hhea.number_of_hmetrics}")

カーニングとグリフデータ

KernTable は水平間隔調整のためのカーニングペアを格納します。GlyfTable には TrueType フォント用の実際のグリフアウトラインデータが含まれています。 また、PostTable を使用してグリフ名を解決することもできます。

import aspose_font

font = aspose_font.FontLoader.open("MyFont.ttf")

# Kerning lookup
kern = font.ttf_tables.kern
if kern:
    pairs = kern.pairs
    print(f"Total kern pairs: {len(pairs)}")
    # Look up a specific pair by glyph IDs
    adjustment = kern.get(36, 57)
    print(f"Kern adjustment: {adjustment}")

# Glyph name from post table
post = font.ttf_tables.post
if post:
    glyph_name = post.glyph_name(0)
    print(f"Glyph 0 name: {glyph_name}")

クイックスタート

git clone https://github.com/aspose-font-foss/Aspose.Font-FOSS-for-Python.git
cd Aspose.Font-FOSS-for-Python
pip install -e .
import aspose_font

# Load any TTF or OTF font
font = aspose_font.FontLoader.open("MyFont.ttf")
tables = font.ttf_tables

# Print basic table info
print(f"Font: {font.font_name}")
print(f"Family: {font.font_family}")
print(f"Glyphs: {font.num_glyphs}")
print(f"Units/em: {tables.head.units_per_em}")

# Read name table entries
name_table = tables.name
for name_id in [0, 1, 2, 4, 5, 6]:
    value = name_table.best_name(name_id, ["en"])
    if value:
        print(f"  Name ID {name_id}: {value}")

# Check character coverage
cmap = tables.cmap
subtable = cmap.best_subtable()
for char in "ABCabc012":
    gid = subtable.get_gid(ord(char))
    print(f"  '{char}' -> glyph {gid}")

サポートされているフォーマット

形式拡張子読み取り書き込み
TTF.ttf
OTF.otf
CFF.cff
WOFF.woff
WOFF2.woff2
EOT.eot
TYPE1.pfb/.pfa

オープンソースとライセンス

Python 用の Aspose.Font FOSS は MIT ライセンスでリリースされています。ソースコードは GitHub で入手可能で、パッケージは PyPI に aspose-font として公開されています。個人および商用プロジェクトのいずれでも、制限なく自由に使用、変更、配布できます。


スタートガイド

関連リソース