如何使用drawString()在reportlab.pdfgen中启用阿拉伯语支持?

时间:2019-05-05 01:46:02

标签: python-3.x reportlab

我在PIL Image中有一个二维码,并带有一些阿拉伯文字,并试图将二维图放在pdf文件中。 我正在使用reportlab.pdfgen的{​​{1}}。

经过大量搜索,我发现canvas是某人的项目无效,并且在阅读了arabic_reshaper的源代码之后,我发现我需要安装textobject.py并使用pyfribidi没事。

我正在使用存储库中所述的drawString(x,y,"مربحا",RTL)arabic_reshaper中的RTL

pyfribidi

结果总是相同的,正如您在右侧看到的那样,英语字符串正常显示,阿拉伯字符串显示为黑色像素:

a busy cat

如果您对其他图书馆有其他建议,也将不胜感激。

1 个答案:

答案 0 :(得分:0)

感谢一些开发人员,他们指出问题是由我能够解决的字体引起的。

首先,我下载了阿拉伯语TTF字体,并在使用linux时将其放在'/usr/share/fonts'中,然后执行以下操作:

import reportlab
import arabic_reshaper
from bidi.algorithm import get_display
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
// BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

reportlab.rl_config.TTFSearchPath.append(str(settings.BASE_DIR))
pdfmetrics.registerFont(TTFont('Arabic', '/usr/share/fonts/tradbdo.TTF'))

ar = arabic_reshaper.reshape(u'العربية')
ar = get_display(ar)
canvas.setFont('Arabic', 32)
canvas.drawString(x - 100, y, ar)

现在一切正常。

Read this answer carefully.