はじめに

Type 1はAdobeのオリジナルのスケーラブルフォント形式で、TrueTypeやOpenTypeよりも前に登場しました。Type 1フォントは2つのファイルで構成されます。暗号化されたフォントプログラムを含む.pfb(Printer Font Binary)ファイルと、カーニングやメトリクスデータを含む.afm(Adobe フォントメトリクス)ファイルです。OpenTypeに取って代わられたにもかかわらず、Type 1フォントは出版ワークフロー、PostScriptパイプライン、そしてアーカイブ文書で依然として広く使われています。

Aspose.Font FOSS for Pythonは、Type1Font、Type1FontData、Type1Serializer、Type1Interpreterを通じてType 1の内部に直接アクセスできる機能を提供します。FontLoader.openを使用してPFBまたはPFAファイルをロードし、埋め込まれたフォントプログラムのメタデータを検査し、charstringをグリフパスに変換し、フォントをPFBまたはPFA形式にシリアライズすることができます。

このライブラリはPyPIでaspose-fontとして公開されており、MITライセンスの下でライセンスされています。必須の商用依存関係はなく、標準のPython 3上で動作します。


主な機能

Type 1フォントの読み込み

FontLoader.openを使用してPFBまたはPFAファイルをロードします。返されるオブジェクトは、標準のFontインターフェースと、Type1Fontクラスを介したType 1固有の機能の両方を提供します:

from aspose_font import FontLoader

loaded = FontLoader.open("fonts/Courier.pfb")

print(loaded.font_name)    # e.g. "Courier"
print(loaded.font_family)  # e.g. "Courier"
print(loaded.num_glyphs)   # number of defined glyphs
print(loaded.font_style)   # style string, e.g. "Regular"

FontLoader.open はファイルヘッダーから Type 1 フォーマットを自動的に検出します。PFB および PFA ファイルの両方がサポートされています。


AFM メトリクスをロード中

Type 1 フォントはメトリクスを別個の .afm ファイルに格納しています。Type1Font クラスは load_afm(path) メソッドを公開しており、AFM データをロードされたフォントオブジェクトに結合し、get_kern_pairs() を通じたカーンペアの検索を可能にします。

AFM ファイルがない場合、get_kern_pairs() は空のリストを返します。カーンデータは PFB プログラム自体ではなく AFM ファイルに格納されているためです。load_afm メソッドは、対応する .afm ファイルへのパス文字列を受け取ります。


Type1FontData メタデータへのアクセス

Type1FontData クラスは Type 1 ファイルに埋め込まれたフォントプログラム辞書を公開します。これにはメトリクス、バウンディングボックス、エンコーディングベクタ、charstrings、サブルーチンが含まれます:

from aspose_font.type1.data import Type1FontData

# Type1FontData is the font program dictionary parsed from the PFB
# Access its properties to inspect the raw PostScript font data

Type1FontData のプロパティ:

  • font_name(str)— フォントの PostScript 名
  • full_name (str) — 完全な人間が読める名前
  • family_name (str) — フォントファミリー
  • weight (str) — ウェイト文字列 (例: "Medium")
  • italic_angle (float) — イタリック角度(度)
  • is_fixed_pitch (bool) — 等幅フォントの場合は true
  • font_bbox (tuple[int, int, int, int]) — バウンディングボックス (llx, lly, urx, ury)
  • underline_position (int) — フォント単位の下線位置
  • underline_thickness (int) — 下線の太さ
  • encoding (list[str]) — 256スロットのエンコーディングベクトル(PostScript グリフ名)
  • charstrings (dict[str, bytes]) — グリフ名 → charstring バイトのマッピング
  • subrs (list[bytes]) — charstring エンジンで使用されるサブルーチン バイト文字列
  • len_iv (int) — lenIV 暗号化パラメータ

Charstrings の解釈

Type1Interpreter は Type 1 charstring プログラムを GlyphPath アウトラインにデコードします。Type1FontData.charstrings からの生の charstring バイトを interpret に渡してください:

from aspose_font.type1.interpreter import Type1Interpreter

interpreter = Type1Interpreter()
charstring = b"\x0e"  # seac or other charstring bytes

glyph_path, stack_depth = interpreter.interpret(charstring)
for cmd in glyph_path.commands:
    print(cmd)

interpret は (GlyphPath, int) タプルを返します。GlyphPath にはグリフアウトラインの描画コマンドが含まれます。整数は実行後の最終スタック深さで、破損した charstring のデバッグに役立ちます。


PFB と PFA へのシリアライズ

Type1Serializer はロードされた Type 1 フォントをバイナリ PFB またはテキスト PFA フォーマットに変換します。両方のメソッドは任意の Font インスタンスを受け取り、生のバイト列を返します:

from aspose_font import FontLoader
from aspose_font.type1.serializer import Type1Serializer

loaded = FontLoader.open("fonts/Courier.pfb")

# Serialize to PFB (binary) format
pfb_bytes = Type1Serializer.serialize_pfb(loaded)
with open("output/Courier_copy.pfb", "wb") as fh:
    fh.write(pfb_bytes)

# Serialize to PFA (text) format
pfa_bytes = Type1Serializer.serialize_pfa(loaded)
with open("output/Courier_copy.pfa", "wb") as fh:
    fh.write(pfa_bytes)

print(f"PFB: {len(pfb_bytes)} bytes")
print(f"PFA: {len(pfa_bytes)} bytes")

フォントメトリクス

メトリクスとエンコーディングは標準の Font インターフェースからアクセスできます:

from aspose_font import FontLoader

loaded = FontLoader.open("fonts/Courier.pfb")

metrics = loaded.metrics
print(f"Units per em  : {metrics.units_per_em}")
print(f"Ascender      : {metrics.ascender}")
print(f"Descender     : {metrics.descender}")
print(f"Underline pos : {metrics.underline_position}")
print(f"Underline tck : {metrics.underline_thickness}")

クイックスタート

ライブラリをインストール:

.venv/bin/pip install aspose-font

PFB フォントをロードして検査する:

from aspose_font import FontLoader
from aspose_font.type1.serializer import Type1Serializer

loaded = FontLoader.open("Courier.pfb")

print(f"Font name : {loaded.font_name}")
print(f"Family    : {loaded.font_family}")
print(f"Style     : {loaded.font_style}")
print(f"Glyphs    : {loaded.num_glyphs}")

metrics = loaded.metrics
print(f"UPM       : {metrics.units_per_em}")

# Round-trip: serialize back to PFB
pfb_bytes = Type1Serializer.serialize_pfb(loaded)
print(f"Serialized: {len(pfb_bytes)} bytes")

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

フォーマット拡張子読み取り書き込み
TTF.ttf✓—
OTF.otf✓—
EOT.eot✓—
CFF.cff✓—
TYPE1.pfb/.pfa✓—
WOFF.woff✓—
WOFF2.woff2✓—

Type 1 フォントは FontLoader.open でロードされ、Type1Serializer でシリアライズされます。


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

Aspose.Font FOSS for Python は MIT ライセンスの下でリリースされています。個人、商用、オープンソースプロジェクトで無料で使用できます。ソースコードは GitHub で入手可能で、パッケージは PyPI を通じて aspose-font として配布されています。


入門ガイド

関連リソース