谷歌应用引擎、ReportLab 和真字体

2 投票
3 回答
1539 浏览
提问于 2025-04-16 15:25

大家好!

我正在写一个可以在Google App Engine上运行的应用程序。我使用ReportLab来生成PDF文件。不过,这个应用需要能够生成包含西里尔字母的PDF文件。所以我需要加载一些True Type字体。我应该写类似下面的代码:

pdfmetrics.registerFont(TTFont('Verdana', 'verdana.ttf'))

我尝试把'verdana.ttf'这个文件复制到 /reportlab/fonts 目录下,但 registerFont 还是失败了。不过在桌面环境下,这个方法是可以正常工作的。

我该如何在GAE上运行的应用中加载True Type字体呢?

提前谢谢大家!

3 个回答

0

下面的答案很好,但在Google App Engine上不管用,我也不知道为什么!这里有一个简单的例子,适合使用Flask的开发者:

~/myapp

       |-- mymodule.py
       |-- myfont.ttf

所以你的代码应该是:

font = r"myfont.ttf"
pdfmetrics.registerFont(TTFont("myfont", font))
1

如果你使用Docker容器来完成这个工作,或者在任何Linux环境下,只需要使用

pdfmetrics.registerFont(TTFont('Verdana', 'Vera.ttf'))

或者

pdfmetrics.registerFont(TTFont('Verdana-Bold', 'VeraBd.ttf'))

而不是

pdfmetrics.registerFont(TTFont('Verdana', 'verdana.ttf'))

这样做对我有效。

0

根据文档的说明:

在Marius最初的补丁中,文件名应该是完全正确的,但我们对其进行了修改。如果文件名是相对路径,那么系统会先在当前目录中查找对应的文件,然后再在reportlab.rl_config.TTFSearchpath指定的目录中查找!

因为在上传时你无法修改/reportlab/fonts这个文件夹,所以你需要做的就是上传文件,然后指定相对于当前工作目录的位置(这个目录应该和你的Python代码在同一个地方,如果这样不行,你可能需要查看GAE文档,了解可以把像字体这样的支持文件放在哪里)。

不过也许我理解错了,你是不是已经尝试这样做但没有成功呢?

撰写回答