快速開始
這個範例使用明確指定的字型檔。GlyphKit 只在建立字型庫時讀取字型位元組一次,所以之後改了路徑,也不會影響排版結果。
from glyphkit import FontLibrary, FontSource, Paragraph, TextSpan, TextStyle
library = FontLibrary.from_sources((FontSource.path("fonts/SourceSans3-Regular.ttf"),))
family = library.faces[0].family
paragraph = Paragraph(
(TextSpan("Utility U(x₁, x₂)", TextStyle((family,), 18)),),
max_width=360,
)
layout = library.layout(paragraph)
print(layout.logical_bounds)
print(layout.lines[0].runs[0].glyphs[0])
FontSource(_kind, _value, label)
FontSource.path(path) → FontSource
FontSource.bytes(data, *, label) → FontSource
FontSource.stream(stream, *, label) → FontSource
字型檔。內容只在建立字型庫時讀取一次。
由呼叫端持有的字型來源:路徑、位元組或資料流。路徑與資料流在建立 FontLibrary 時讀取,位元組來源則保留傳入的位元組。
FontLibrary(faces, *, generic_families=None, strict=True)
FontLibrary.from_sources(sources, *, generic_families=None, strict=True) → FontLibrary
由呼叫端提供的字型來源。配對時如果分不出高下,就依這個順序。
把 "sans-serif" 這類通用名稱對應到一串依序的字族。
遇到讀不了的字型就拋出錯誤,而不是略過。
主要的排版引擎。建立之後,它的字型面目錄、配對規則與來源識別就固定下來。faces 列出所有字型面,library.faces[0].family 就是寫進樣式的字族名稱。
處理每個片段的字形,在合法的斷行位置換行,並回傳不可變的 TextLayout。
Paragraph(
spans,
max_width=None,
max_height=None,
align='start',
line_height=None,
first_line_indent=0.0,
hanging_indent=0.0,
paragraph_spacing=0.0,
tab_stops=(),
default_tab_width=None,
)
依邏輯順序排列的帶樣式片段。
在此寬度換行。None 則排成不受限制的一行。
只接受不超過此高度的行,其餘記為垂直溢出。
"start"、"center"、"end" 或 "justify"。
基線間距。None 則由最大的樣式推算。
第一行的縮排。
之後每一行的縮排。
不可變的帶樣式文字片段序列,另可設定寬度、高度、對齊、縮排與行的選項。
TextSpan(text, style, semantic_role=None)
一段原始文字,搭配一個 TextStyle。
TextStyle(
families,
size,
weight=400,
width=100,
slant='normal',
axes=(),
features=(),
language=None,
script=None,
direction=None,
letter_spacing=0.0,
word_spacing=0.0,
)
依後備順序排列的字族,或字型庫裡的通用名稱。
字級,使用排版單位。
字重,從 100 到 900。
字寬等級,以正常寬度的百分比表示。
"normal"、"italic" 或 "oblique"。
OpenType 功能,例如 (("liga", 0),)。
用於特定語言字形處理的 BCP 47 語言標籤。
每個字形後額外加的間距。
每個空白字元後額外加的間距。
一個片段的字族、字級、字重、字寬、斜體、語言、方向、間距與 OpenType 功能。
TextLayout(
text,
lines,
logical_bounds,
ink_bounds,
diagnostics=(),
vertical_overflow=0.0,
)
段落排版後不可變的結果:行、字形組、已定位的字形、原文範圍、範圍、基線、溢出,以及用過的字型。
座標
GlyphKit 使用排版單位,不是綁定 DPI 的像素。這些單位如何對應到畫布,由使用端決定。排版結果的 y 軸向上:第一條基線在 y = 0,之後每一行的基線 y 更小,是負值。已定位的字形帶著位於基線上的原點位置 x、y。
字型的基準線、寬度與高度度量
多種文字系統混排時做法相同。字族依樣式裡的順序嘗試,每個字元採用第一個涵蓋它的字族。沒有任何已設定的字族涵蓋的字元,會拋出 MissingGlyphError。
拉丁文與中文混排的段落,在 max_width 換行。每個方框是該行的邏輯範圍,點線是基線。