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

How to enable Arabic support in reportlab.pdfgen using drawString()?

我在 PIL Image 中有二维码和一些阿拉伯文本,并试图将二维码图像放在 pdf 文件中。 我正在使用 reportlab.pdfgencanvas

找了很久发现arabic_reshaper,某人的项目不行,看了textobject.py的源码后发现需要安装pyfribidi ,安装并使用 drawString(x,y,"مربحا",RTL) 没有任何反应。

我正在使用存储库中描述的 arabic_reshaper,以及 pyfribidi

中的 RTL
import arabic_reshaper

reshaped = arabic_reshaper.reshape(exam_name)
c.drawString(x - 100, y - 20, reshaped, direction=RTL)

结果总是一样的,你可以在右边看到英文字符串正常显示,阿拉伯字符串显示为黑色像素:

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

感谢一些开发人员指出问题是由字体引起的,我得以修复它。

首先我下载了​​阿拉伯语 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.