如何使用 drawString() 在 reportlab.pdfgen 中启用阿拉伯语支持?
How to enable Arabic support in reportlab.pdfgen using drawString()?
我在 PIL Image
中有二维码和一些阿拉伯文本,并试图将二维码图像放在 pdf 文件中。
我正在使用 reportlab.pdfgen
的 canvas
。
找了很久发现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.
我在 PIL Image
中有二维码和一些阿拉伯文本,并试图将二维码图像放在 pdf 文件中。
我正在使用 reportlab.pdfgen
的 canvas
。
找了很久发现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.