2011-04-09 74 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')) 

它爲我工作。