我正在尝试使用.add_font()
. 自从我重写了我正在编写的代码以来,我曾经将所有脚本都放在一个名为“david”的文件夹中。现在我将它迁移到父目录中。
这是意外的行为:在我调用的函数中
# returns /home/path_to_dir/fonts/DejaVuSans.ttf (as expected)
print(os.path.join(os.getcwd(), "fonts", "DejaVuSans.ttf"))
pdf.add_font(
"DejaVu",
"",
# returns /home/path_to_dir/david/../fonts/DejaVuSans.ttf (old path)
os.path.join(os.getcwd(), "fonts", "DejaVuSans.ttf"),
uni=True,
)
我删除了所有pycache文件,如果我添加一个名为“david”的空目录,一切都会再次运行,因为可以解析后一个路径。
可重现的最小示例: - 让 fpdf 工作: - pip install fpdf - 包含字体的字体目录(ttf 格式)
包含此代码的文件
import fpdf
import os
def reproducable_example():
text = ['This is some test text', 'This is some more test text']
pdf = fpdf.FPDF()
print(os.path.join(os.getcwd(), '../fonts', 'DejaVuSans.ttf'))
pdf.add_font(
"DejaVu",
"",
os.path.join(os.getcwd(), "../fonts", "DejaVuSans.ttf"),
uni=True,
)
pdf.set_font('DejaVu', "", 12)
pdf.add_page()
for string in text:
pdf.multi_cell(0, 10, txt=string)
pdf.output(os.path.join(os.getcwd(), 'text.pdf'))
reproducable_example()
如果第二次调用 os.getcwd() 会包含一个名为“david”的文件夹,那显然会很奇怪。因此,您可能必须先将代码放在名为“david”的嵌套文件夹中,然后运行它,然后将其放入父文件夹,删除“david”目录并再次运行它。
我还创建了一个 .workspace 文件夹,其中有我的 launch.json 文件。在此文件中,由于使用 vscode 调试器时的导入问题,我将密钥从cwd
更改为。当我将文件迁移到父目录时,我把它改回来了。${workspaceRoot}
${workspaceRoot}/david
这就是您可以在子文件夹中运行 os.getcwd() 然后手动退出的原因
在我的整个工作区中,我没有声明错误的文件路径,但.add_font()
即使我将正确的路径硬编码到其中,该方法仍然会使用它