如何在 python 环境中而不是从命令行使用 Fonttools 的 pyftsubset

Ale*_*eda 1 python fonts ttx-fonttools

我需要对很多字体文件进行子集化,并且需要在 python 环境中执行此操作。然而,Fonttools 的文档非常少,我无法找到模块和正确的函数语法来在 python 中基于 unicode 执行子集化,而不是作为命令行工具 ( pyftsubset)。我的一些文件在由 Fonttools 读取时包含各种错误,并且我无法使用!commandjupyter 内部捕获异常。

dja*_*ude 8

pyftsubset本身只是一个 Python 脚本,它调用fontTools.subset.main,然后解析sys.argv(命令行参数)以执行子集。您可以在自己的脚本中轻松完成相同的操作,例如:

import sys
from fontTools.subset import main as ss

sys.argv = [None, '/path/to/font/file.ttf', '--unicodes=U+0020-002F']
ss()  # this is what actually does the subsetting and writes the output file
Run Code Online (Sandbox Code Playgroud)

显然,您会希望使用自己的值--unicodes加上许多其他pyftsubset选项,但总的来说,此方案应该可行。可能的警告是,如果您的程序的其他部分使用/依赖sys.argv; 如果是这种情况,您可能希望在修改sys.argv和调用子集之前捕获另一个变量中的初始值,然后将其重新设置为初始值。