2012-06-09 45 views
3

我试图生成以下Python编程的PDF,但生成的输出不显示希伯来字母正确报告实验室无法处理希伯来语(Unicode)的

# -*- coding: utf-8 -*- 
from reportlab.pdfgen import canvas 
def hello(c): 
    c.drawString(100,100, "מה שלומך") 
c = canvas.Canvas("hello.pdf") 
hello(c) 
c.showPage() 
c.save() 
+0

我使用的是Ubuntu 11.10 – user634615

+0

你有没有尝试在'drawString'之前用'setFont'改变字体? – jedwards

+0

我没有得到我应该设置的字体类型 – user634615

回答

2

如果你使用正确的解码调用,比如"מה שלומך".decode("utf-8")有用。

# -*- coding: utf-8 -*- 
from reportlab.pdfgen import canvas 
def hello(c): 
    c.drawString(100,100, "מה שלומך".decode("utf-8")) 
c = canvas.Canvas("hello.pdf") 
hello(c) 
c.showPage() 
c.save() 
+2

或者更简单的说,使用'u'ההשלומך“'。 –

+1

Hrm,Reportlab声明支持'unicode'和'utf-8'编码的字符串,所以这不可能是答案。请参见[PDF用户指南](http://www.reportlab.com/docs/reportlab-userguide.pdf),第41页,第3.1节。 –

+0

我的经验是,ReportLab在Unicode上有漏洞,你需要使用UTF-8。我通过确保所有内容都是UTF-8解决了非ASCII字符的许多问题。上面的解决方案 –

5

此代码(见下文)的作品!您所需要做的就是将ArialHB.ttf(或任何其他支持希伯来字符的字体)放入site-packages/reportlab/fonts ...

所需输出将位于pdf页面的底部。

# -*- coding: utf-8 -*- 

from reportlab.pdfgen import canvas 
from reportlab.pdfbase import pdfmetrics 
from reportlab.pdfbase.ttfonts import TTFont 

pdfmetrics.registerFont(TTFont('Hebrew', 'ArialHB.ttf')) 

def hello(c): 
    c.setFont("Hebrew", 14) 
    c.drawString(10,10, u"מה שלומך".encode('utf-8')) 

c = canvas.Canvas("hello.pdf") 
hello(c) 
c.showPage() 
c.save()