最近做pdf编辑操作,发现一些特殊字符无法显示,究其原因是因为字体问题,因此引入了一个新的问题,需要判断字符是否在字体文件中
参考资料:
python中font的用法_使用Python库判断字符是否在字体里
Python_FontTools使用
可是我测试发现glyf
针对中文的key是uni9ED1
这样的格式,而不是参考资料提到的ord
,跟字符的unicode
还是有所差别的,因此我的最终代码如下:
def char_in_font(char: str, fontfile: str) -> bool:
"""判断字符是否在字体里
Args:
char (str): 单字符文本
fontfile (str): 字体文件
Returns:
bool: 是否在字体里
"""
code = char.encode("unicode-escape").decode()
if "\\u" in code:
code = "uni" + code[2:].upper()
font = TTFont(fontfile)
glyf = font["glyf"]
if not glyf.has_key(code):
return False
return len(glyf[code].getCoordinates(0)[0]) > 0