はじめに
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) — 等幅フォントの場合は truefont_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 として配布されています。