谷歌应用引擎、ReportLab 和真字体
大家好!
我正在写一个可以在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文档,了解可以把像字体这样的支持文件放在哪里)。
不过也许我理解错了,你是不是已经尝试这样做但没有成功呢?