快速开始
这个示例使用明确指定的字体文件。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 换行。每个方框是该行的逻辑范围,点线是基线。