2011-04-09 46 views
2

全部! 我正在编写可在Google App Engine上运行的应用程序。我正在使用ReportLab生成PDF文件。但是,应用程序需要能够使用cyrilic文本生成PDF。所以我需要加载一些True Type字体。我应该写这样的事情Google App Engine,ReportLab和True Type字体

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

我想“verdana.ttf”文件复制到/reportlab/fontsregisterFont再次失败。但是在桌面环境中它工作正常。

如何从运行在GAE上的应用程序加载True Type字体?

在此先感谢

回答

0

根据文档:

在马吕斯的原始修补程序的文件名应该是完全正确的,但我们已经修改的东西,这样,如果文件名是相对的则搜索相应的文件在当前目录中完成,然后在由reportlab.rl_config.TTFSearchpath指定的目录中完成!

当您上传您将无法修改/reportlab/fonts因为,你需要做的仅仅是把它上传,然后指定相对于当前工作目录的位置(应该是相同的目录中的Python代码是什么驻留在中,但如果不起作用,您可能需要检查GAE文档,了解可以在服务器上放置支持文件(如字体)的位置。

但也许我误解,这就是你试图做和失败?

+1

如果我运行没有GAE的脚本,reportlab在'/ reportlab/fonts'中查找字体,并且他们的文档说,它是放置字体的正确目录。但我使用的reportlab模块是将压缩的压缩文件复制到应用程序源目录中,字体位于此压缩文件中。该问题已通过将字体文件复制到应用程序源代码目录中解决。 – Andrey 2011-04-10 21:22:40

+0

太棒了!真高兴你做到了。 – 2011-04-11 02:58:28

0

下面的答案很好,但不适用于Google App Engine,我不知道为什么!这是基于应用程序目录烧瓶开发一个简单的例子:

〜/ MYAPP

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

所以,你的代码将是:

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

如果使用泊坞窗容器做这个工作,或任何linux环境下只使用

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

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

代替

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

它为我工作。