Jupyter Notebook中FPDF add_font()函数无法读取TTF文件路径的问题问询
解决PDF生成时字体路径找不到的问题
这个错误的核心原因很明确:你的代码里指定的字体路径和实际存放字体的文件夹不匹配,导致程序找不到目标字体文件。下面具体拆解可能的原因和对应的解决办法:
可能的原因
- 代码路径硬编码未同步更新:你提到修改过文件夹路径名称,但加载字体的代码里仍然沿用了旧的路径
font//gothambold.ttf,没有改成实际的2.font文件夹路径。比如之前项目里字体放在font文件夹,后来改成2.font,但代码里的路径字符串没跟着改。 - Jupyter工作目录干扰:Notebook运行时的当前工作目录可能不是你的项目根目录。举个例子,如果你的Notebook是在
1.code文件夹里打开运行的,那代码里的font//gothambold.ttf会被解析成1.code/font/gothambold.ttf,而你的字体实际在上级目录的2.font里,自然找不到。
具体解决步骤
1. 修正代码中的字体路径
找到代码中加载TTF字体的代码段,通常是类似这样的:
from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.ttfonts import TTFont # 旧的错误路径 pdfmetrics.registerFont(TTFont('gothambold', 'font//gothambold.ttf'))
把路径改成实际的位置:
- 如果Notebook的工作目录是项目根目录(即包含
1.code、2.font的文件夹),直接改成:pdfmetrics.registerFont(TTFont('gothambold', '2.font//gothambold.ttf')) - 如果Notebook在
1.code文件夹里,需要用../回到上级目录:pdfmetrics.registerFont(TTFont('gothambold', '../2.font//gothambold.ttf'))
2. 确认Jupyter的当前工作目录
不确定工作目录的话,先在Notebook里运行这段代码查看:
import os print(os.getcwd())
根据输出的路径来调整字体路径:
- 输出如果是
你的项目路径/1.code,就用../2.font/gothambold.ttf - 输出如果是项目根路径,就用
2.font/gothambold.ttf
3. 用绝对路径彻底避免相对路径问题
如果不想纠结相对路径的问题,直接用字体文件的绝对路径更稳妥,比如:
# Windows系统示例 pdfmetrics.registerFont(TTFont('gothambold', 'D:/你的项目路径/2.font/gothambold.ttf'))
或者用os.path.join动态构建路径,适配不同系统:
import os # 假设项目根目录是当前工作目录的上级(如果Notebook在1.code里) project_root = os.path.dirname(os.getcwd()) font_path = os.path.join(project_root, '2.font', 'gothambold.ttf') pdfmetrics.registerFont(TTFont('gothambold', font_path))
总结
本质上就是代码里的路径和实际文件夹结构不匹配,只要把字体路径修正到正确的位置,这个错误就能解决。
内容的提问来源于stack exchange,提问作者asif abdullah
相关产品推荐
相关产品推荐

