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

Moh*_*mdy 1 reportlab python-3.x

我有二维码PIL Image和一些阿拉伯文本,并尝试将二维码图像放入 pdf 文件中。\n我正在使用reportlab.pdfgen\'s canvas

\n\n

经过大量搜索arabic_reshaper,我发现有人的项目不起作用,并且在阅读源代码后textobject.py我发现我需要安装pyfribidi,安装了它,然后使用drawString(x,y,"\xd9\x85\xd8\xb1\xd8\xa8\xd8\xad\xd8\xa7",RTL)没有任何反应。

\n\n

我正在按照arabic_reshaper存储库中的描述使用,并且RTL来自pyfribidi

\n\n
import arabic_reshaper\n\nreshaped = arabic_reshaper.reshape(exam_name)\nc.drawString(x - 100, y - 20, reshaped, direction=RTL)\n\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

一只忙碌的猫

\n\n

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

\n

Moh*_*mdy 6

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

\n\n

首先,我下载了一种阿拉伯TTF字体,当我使用时,linux我将其放入,\'/usr/share/fonts\'然后执行了以下操作:

\n\n
import reportlab\nimport arabic_reshaper\nfrom bidi.algorithm import get_display\nfrom reportlab.pdfbase import pdfmetrics\nfrom reportlab.pdfbase.ttfonts import TTFont\n// BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))\n\nreportlab.rl_config.TTFSearchPath.append(str(settings.BASE_DIR))\npdfmetrics.registerFont(TTFont(\'Arabic\', \'/usr/share/fonts/tradbdo.TTF\'))\n\nar = arabic_reshaper.reshape(u\'\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9\')\nar = get_display(ar)\ncanvas.setFont(\'Arabic\', 32)\ncanvas.drawString(x - 100, y, ar)\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在一切正常。

\n\n

仔细阅读这个答案。

\n